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。

我当然可以尝试动态方法调用而不关心任何事情,但既然我在这里,我想我会先问这个问题。

4

2 回答 2

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').
于 2013-08-07T23:41:36.337 回答
1

据我所知,这是不可能的。动态访问本地类很容易(嗯,相对容易),但静态引用它 - 据我所知。您可能必须动态调用这些方法。

于 2013-08-07T11:21:19.340 回答