在ABAP开发中,所有屏幕上的元素默认被存储在SCREEN内表中。开发者可以通过遍历此内表并修改其中的字段值来控制屏幕上各个元素的属性,如可见性、输入输出状态等。
SCREEN内表中的关键字段包括:
常用的属性字段及其含义为:invisible(1表示不可见,0表示可见)、input(控制元素是否可输入)、output(控制元素是否可输出)、group1(用于控件分组,在定义控件时使用MODIF ID指定值)。
要在选择屏幕的PBO事件(即AT SELECTION-SCREEN OUTPUT事件)中动态调整屏幕元素的属性,可以通过以下代码示例来实现:
首先定义屏幕布局:
SELECTION-SCREEN BEGIN OF BLOCK blc WITH FRAME TITLE text-006.
PARAMETERS: vis AS CHECKBOX DEFAULT 'x' USER-COMMAND vis, "用于触发PBO事件"
out AS CHECKBOX DEFAULT 'x' USER-COMMAND out,
act AS CHECKBOX DEFAULT 'x' USER-COMMAND chc.
SELECTION-SCREEN END OF BLOCK blc.
接着定义具体的控件及其属性:
SELECTION-SCREEN BEGIN OF BLOCK blc1 WITH FRAME TITLE text-007.
SELECTION-SCREEN COMMENT 2(5) text-001.
PARAMETERS: id LIKE zschool_132-zscode MODIF ID yy, "设置group1值,用于组控制"
SELECTION-SCREEN COMMENT 40(5) text-002.
PARAMETERS: address LIKE zschool_132-zaddress MODIF ID tt.
PARAMETERS: r1 RADIOBUTTON GROUP g1 MODIF ID ss,
r2 RADIOBUTTON GROUP g1 MODIF ID ss,
r3 RADIOBUTTON GROUP g1 MODIF ID ss.
SELECTION-SCREEN END OF BLOCK blc1.
然后,在AT SELECTION-SCREEN OUTPUT事件中添加逻辑以动态修改控件属性:
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF out IS INITIAL.
IF screen-group1 = 'YY'.
screen-input = 0.
ENDIF.
ENDIF.
IF vis IS INITIAL.
IF screen-group1 = 'SS'.
screen-invisible = 1.
ENDIF.
ENDIF.
IF act IS INITIAL.
IF screen-group1 = 'TT'.
screen-active = 0.
ENDIF.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
MESSAGE S000(SS) WITH 'No data found'.
OK