2013-08-07 1 views
2

У меня есть программа ZPROG1_TEST, где я определяю локальный класс LCL_PROG1_HELPER.Можно определить переменные как ссылки на локальные классы, определенные в другой программе?

У меня есть вторая программа ZPROG2_TEST, где я бы хотел определить ссылку на переменную для этого класса.

Нет ли синтаксической возможности для меня сделать это?

Или это может быть теоретически выполнимо с классами RTTI, такими как CL_ABAP_CLASSDESCR?

EXTRA
Почему я хотел бы сделать это, потому что у меня есть пользовательские формы ZMM_MEDRUCK, что нужно знать, если ME32N документ это печать была изменена, но не сохраняются. Я вычисляю точные объекты, свойства которых мне нужно для взаимодействия, но некоторые из них определены во время разработки как общие интерфейсы, такие как 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