SAP程序的执行时通过事件来驱动的
1.INITIALIZATION事件,这个事件是在屏幕未显示之前执行,对程序设置值及屏幕元素进行初始化赋值
2.START-OF-SELECTION事件
该事件是单击执行按钮时触发的
3.END-OF-SELCTION事件
该事件应用于所有事件数据处理完成,即START-OF-SELECTION事件执行完成,但是输出屏幕还未显示之前。在实际开发中,主要应用于一直执行结果的检验等,其输出数据叠加于同一输出屏幕。
下面说说AT SELECTION-SCREEN事件
1.AT SELECTION-SCREEN OUT
在程序执行前会优先检查该事件下的所有代码,可以用于对屏幕输入值得校验,当回执错误信息时,程序会终止并退出。
1 REPORT ztest_sum.
2
3 TABLES:mara,spfli.
4 *TABLES sscrfields. "引用屏幕字段属性
5
6 PARAMETERS p_carr TYPE spfli-carrid.
7
8 AT SELECTION-SCREEN OUTPUT.
9 IF p_carr IS INITIAL.
10 MESSAGE ‘please enter a value‘ TYPE ‘I‘.
11 ENDIF.
以上的检测不加OUTPUT也是可以的,但是加了OUTPUT程序在选择屏幕显示前先执行了AT SELECTION-SCREEN
OUTPUT下的检查代码,如果不加的话程序在屏幕显示前是不会检查的,需要点击执行按钮后才会去执行该段代码
2.AT
SELECTION-SCREEN ON{para|selcrit}
可以实现程序执行前对指定输入域数据的检查,执行该事件时,其他输入域的输入状态会被锁定,如下所示
REPORT ztest_sum.TABLES:mara,spfli.
*TABLES sscrfields. "引用屏幕字段属性PARAMETERS p_carr TYPE spfli-carrid.
PARAMETERS p_carr2 TYPE spfli-carrid.AT SELECTION-SCREEN ON p_carr.
IF p_carr IS INITIAL.
MESSAGE ‘please enter a value1‘ TYPE ‘E‘.
ENDIF.AT SELECTION-SCREEN ON p_carr2.
IF p_carr IS INITIAL.
MESSAGE ‘please enter a value2‘ TYPE ‘E‘.
ENDIF.
3.AT SELECTION-SCREEN
该事件和前两个事件类似但是执行顺序的优先级低于前两个,OUTPUT最先执行 再者就是 ON 了
4.AT SELECTION-SCREEN ON END OF (selcrit)
该事件仅仅针对SELECT-OPTIONS所定义的输入域,并且该输入域对象在进行多行数据输入操作时将触发该事件。
5.AT SELECTION-SCREEN ON BLOCK(block)
该事件应用于包含线结构的屏幕中,非指定框线的所有输入域对象输入状态都将被锁定
6.AT SELECTION-SCREEN ON RADIOBUTTON GROUP(radi)
该事件针对屏幕中的单选按钮组进行控制,执行时,非指定按钮组的输入状态都将被锁定
7.AT SELECTION-SCREEN ON {HELP-REQUEST|VALUE-REQUEST}FOR
{para|selrit-low|selcrit-high}
用于实现屏幕输入域的自定义F1和F4帮助
屏幕事件控制器