我有以下一段代码。
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
中的中断点处的表为空。为什么会这样,它是否有记录的行为?
答案 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
以下,具体取决于实际需求)