2013-08-07 11 views
2

我有一個程序ZPROG1_TEST,其中我定義了一個本地類LCL_PROG1_HELPER可以將變量定義爲對另一個程序中定義的本地類的引用?

我有第二個程序ZPROG2_TEST,我想定義這個類的變量引用。

對我來說這樣做沒有句法可能嗎?

或者這可以在理論上適用於像CL_ABAP_CLASSDESCR這樣的RTTI類嗎?

EXTRA
爲什麼我要做到這一點是因爲我有一個自定義窗體ZMM_MEDRUCK需要知道,如果ME32N文件是印刷已更改但未保存。 我已經計算出需要intergate屬性的確切對象,但其中一些在設計時被定義爲通用接口,如IF_SERIALIZABLE_MM,我需要將它們轉換爲其實例我知道這些對象將要去的本地類例如\ FUNCTION-POOL = MEGUI \ CLASS = LCL_APPLICATION。

我當然可以嘗試動態方法調用,而不關心任何事情,但因爲我在這裏,我想我會先問這個事情。

回答

1

據我所知,這是不可能的。動態訪問本地類很容易(很好,相對容易),但是靜態地引用它 - 並不像我所知的那樣。您可能必須動態調用這些方法。

2

你可以這樣做。

REPORT ZPROG1_TEST. 

INTERFACE lif_prog1_helper. 
    METHODS: 
    test. 
ENDINTERFACE. 

CLASS LCL_PROG1_HELPER DEFINITION. 
    PUBLIC SECTION. 
    INTERFACES: 
     lif_prog1_helper. 
    ALIASES: 
     test FOR lif_prog1_helper~test. 
ENDCLASS. 

CLASS LCL_PROG1_HELPER IMPLEMENTATION. 
    METHOD test. 
    WRITE/sy-repid. 
    ENDMETHOD. 
ENDCLASS. 

REPORT ZPROG2_TEST. 

DATA: g_test TYPE REF TO object. 

START-OF-SELECTION. 
    CREATE OBJECT g_test TYPE ('\PROGRAM=ZPROG1_TEST\CLASS=LCL_PROG1_HELPER'). 
    CALL METHOD g_test->('TEST'). 
    CALL METHOD g_test->('LIF_PROG1_HELPER~TEST'). 
+0

非常好,謝謝!你不會碰巧知道我怎麼能夠只定義對這樣一個對象實例的引用? (我基本上只需要一個引用,因爲我的實例存儲在'TYPE ANY'類型的字段符號中。?thx –

+0

如果您正在考慮像'DATA l_rcl_obj TYPE REF TO \ PROGRAM = ZPROG1_TEST \ CLASS = LCL_PROG1_HELPER .'然後我恐怕這是不可能的。 – Jagger

+0

我也發現第一種方法工作正常。事實證明這種情況確實很重要。動態調用方法與''test''是不一樣的調用它與'' TEST''。 – Jagger

相關問題