我有以下代码。
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.
Run Code Online (Sandbox Code Playgroud)
尽管有定义,插入点的表AT SELECTION-SCREEN OUTPUT还是空的。为什么会这样,它是否有记录的行为?
我相信这是有据可查的行为。
https://help.sap.com/doc/abapdocu_751_index_htm/7.51/zh-CN/abapstart-of-selection.htm
在可执行程序中,以下语句分配给隐式START-OF-SELECTION事件块,如果存在,则由显式START-OF-SELECTION事件块插入:
所有不是声明的并且在第一个显式处理块之前列出的所有语句。
程序中的所有功能性语句(如果不包含任何显式的处理块),
该代码“在空中”,而不是在确切事件下显式显示,这意味着内部表的初始化将仅在隐式的情况下运行START-OF-SELECTION。
该代码段必须位于INITIALIZATION(或LOAD-OF-PROGRAM根据实际需要)