为什么在AT SELECTION SCREEN OUTPUT中未初始化内联声明的itab?

时间:2019-06-21 09:44:17

标签: sap abap

我有以下一段代码。

REPORT YYY.

TYPES: BEGIN OF t_test,
    test TYPE c LENGTH 4,
  END OF t_test,
  tth_test TYPE HASHED TABLE OF t_test WITH UNIQUE KEY test.

DATA(g_tab_test) = VALUE tth_test( ( test = 'AAAA' ) ( test = 'BBBB' )
  ( test = 'CCCC' ) ( test = 'DDDD' ) ).

PARAMETERS:
  p_x1 TYPE abap_bool,
  p_x2 TYPE abap_bool,
  p_x3 TYPE abap_bool.

CLASS lcl_main DEFINITION FINAL CREATE PRIVATE.
  PUBLIC SECTION.
    CLASS-METHODS:
      main.
ENDCLASS.

CLASS lcl_main IMPLEMENTATION.
  METHOD main.
  ENDMETHOD.
ENDCLASS.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT screen.
    MODIFY SCREEN.
  ENDLOOP.
  BREAK-POINT. "<-- why is the table g_tab_test not initialsed here yet?

AT SELECTION-SCREEN ON p_x1.
  ASSERT 1 = 1.

尽管有其定义,但AT SELECTION-SCREEN OUTPUT中的中断点处的表为空。为什么会这样,它是否有记录的行为?

1 个答案:

答案 0 :(得分:7)

我相信这是有据可查的行为。

https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/abapstart-of-selection.htm

  

在可执行程序中,以下语句分配给   隐式START-OF-SELECTION事件块,由   明确的START-OF-SELECTION事件块(如果存在):

     

所有不是声明的并且在列表之前列出的语句   第一个显式处理块。

     

程序中所有不包含任何功能的语句   显式处理块,

代码是“悬而未决的”,不是在确切的事件下显式显示的,这意味着内部表的初始化将仅使用隐式START-OF-SELECTION来运行。

代码段必须位于INITIALIZATION(或LOAD-OF-PROGRAM以下,具体取决于实际需求)