(1)其实就像一个FORM,所以在这个事件里声明的变量都是局部变量。
(2)根据SY-UCOMM这个系统变量可以判断用户的命令
(3)在这个事件里响应的是屏幕上选择条件中的事件,例如CHECKBOX的选择与否,RADIOBUTTON的选择,LISTBOX的选择等等。
所以分为以下几个方面:
1. ... ON field:在PARAMETER变化时触发的事件,对于选择屏幕某字段输入的PAI事件,当该字段的值被传递给程序时被触发,可以应用于改字段本身的正确性检查,如可系统提示错误,则可以在该字段中重新输入,此时其他元素呈灰色,不接受输入
2. ... ON END OF sel:SELECT-OPTION触发的事件,用于整个选择表输入结束后各行的检查
3. ... ON VALUE-REQUEST FOR psel_low_high:当光标位于某屏幕字段时,选择的帮助(F4)
4. ... ON HELP-REQUEST FOR psel_low_high:当光标位于某屏幕字段时,选择的帮助(F1)
5. ... ON RADIOBUTTON GROUP radi:单选按钮事件,必须进行整体输入检查
6. ... ON BLOCK block:框架的触发事件
7. ... OUTPUT:响应屏幕上的事件,修改选择屏幕的唯一方法
3 逻辑数据库事件 如果报表中使用到逻辑数据库,则在START-OF-SELECTION事件结束后将触发数据库事件。现说明如下: GET node 选择逻辑数据库中当前级别数据中的数据。 GET node LATE 选择逻辑数据库中上一级别数据源中的数据。 逻辑数据库事件的作用也是选择并整理数据,因而也可以将其看作是一种报表过程事件。 4 列表事件 在所有报表过程和选择屏幕事件结束后,系统将开始触发列表事件,这些事件块控制列表输出状态,负责处理列表过程中的交互并响应用户行为。主要有以下四种列表事件块。 TOP-OF-PAGE:页眉控制,在每个新页面开始时触发。 END-OF-PAGE:页脚控制,在当前页面结束时触发。 AT LINE-SELECTION:行选择控制,用户选择某列表行时触发。 AT USER-COMMAND : 用户交互控制,用户选择某个GUI功能时触发。 如果一个报表中定义了后两种事件之一,则称其为交互之列表,因为这种表不仅能显示列表输出,还可以根据用户的行为给出更多其他的交互式信息。 一般性的报表事件触发过程如下: 1 一旦用户开始运行报表过程的可执行程序,事件LOAD-OF-PROGRAM首先被触发,程序开始运行。 2 INITIALZATIONG 被触发。 3 如果程序中定义了供用户输入的选择屏幕,每次选择屏幕输出之前,事件AT SELECTION-SCREEN OUTPUT 被触发。 4 如果用户在选择屏幕中输入某些值后执行某些功能,系统将触发AT SELECTION-SCREEN。 5 之后触发START-OF-SELECTION事件。 6 如果报表中使用到逻辑数据库,则接下来触发的事件为GET和GET LATE。 逻辑数据库是一种数据源,为程序提供数据筛选和整理的方式,在逻辑数据库内部,数据条目通过循环一行一行读入程序,并可以在GET事件块内部进行处理。 7 之后执行END-OF-SELECTION事件,如有列表,一般在该事件之后输出列表,此后系统运行时环境将控制交给显示服务器。 8 然后触发页眉,页脚控制的TOP-OF-PAGE和END-OF-PAGE. 9 如果程序中定义有列表事件,则系统可以响应用户在列表屏幕中的行为,触发各种程序中交互事件。行选择交互事件(AT LINE-SELECTION)允许用户从列表中选择某行,并将触发响应的事件。如果用户选择其他子定义的功能代码(功能代码与相关菜单,按钮或键盘热键有关,又程序员在GUI状态中定义),将触发用户指令交互,即AT USER-COMMAND事件。 5 事件块的中止 事件块的中止分为有条件中止和无条件中止。 1 有条件中止 CHECK CHEXK: 如果CHECK语句中的条件为假,则系统离开当前事件并转向下一个事件块(不一定是END-OF-SELECTION)。但是如果CHECK用在事件块内部的循环语句中,则只作用于当前循环。 2 无条件中止STOP,EXIT STOP: 立即结束任何当前事件,直接转向END-OF-SELECTION. EXIT: 立即离开任何模块,直接转向列表输出屏幕,不执行END-OF-SELECTION。实例:
Event in ABAP report determine process flow of a program. The events are triggered depended on the way the output is generated. They begin after event keyword and end when the next event reached.
Event keyword:
INITIALIZATION.
Occurs when report initialized.
We can use it to check user authorization or prepare output for selection screen.
AT SELECTION-SCREEN OUTPUT :
Occurs each time selection screen about to generated.
We can use it to modify selection screen, for example hide / unhide parameter.
AT SELECTION-SCREEN.
Occurs each user command in selection screen. we can use it to perform checking on user input.
START-OF-SELECTION
Occurs after the standard selection screen has been processed.,
data is read in this event.
END-OF-SELECTION
Occurs after start-of-selection.
TOP-OF-PAGE
Occurs when a new page starts.
Use it for write report header.
END-OF-PAGE
Occurs when a page ends.
Use it for write report footer.
AT LINE-SELECTION
Occurs when the user double-click on report.
AT USER-COMMAND
Occurs when the user push toolbar button.
This is program to demonstrate how to use event properly.
REPORT zt_event LINE-COUNT 10(1).
*http://abap-gallery.blogspot.com
TABLES: sflight.
DATA: BEGIN OF t_report OCCURS 3,
carrid LIKE sflight-carrid,
connid LIKE sflight-connid,
END OF t_report.
*begin selection screen
PARAMETERS p_datum LIKE sy-datum.
PARAMETERS p_check AS CHECKBOX.
*end selection screen
INITIALIZATION.
*begin initialization
MOVE sy-datum TO p_datum.
*end initialization
AT SELECTION-SCREEN.
*begin at selection-screen
MESSAGE i888(sabapdocu) WITH 'At selection-screen'.
IF p_check = 'X'.
MESSAGE e888(sabapdocu) WITH 'Clear checkbox'.
ENDIF.
*end at selection-screen
AT SELECTION-SCREEN OUTPUT.
*begin at selection-screen output
MESSAGE i888(sabapdocu) WITH 'At selection-screen output'.
*end at selection-screen output
START-OF-SELECTION.
*begin start-of-selection.
MESSAGE i888(sabapdocu) WITH 'start-of-selection'.
SELECT * FROM sflight.
MOVE sflight-carrid TO t_report-carrid.
MOVE sflight-connid TO t_report-connid.
APPEND t_report.
ENDSELECT.
*end start-of-selection.
END-OF-SELECTION.
*begin end-of-selection.
MESSAGE i888(sabapdocu) WITH 'end-of-selection'.
FORMAT COLOR COL_NORMAL.
DO 30 TIMES.
LOOP AT t_report.
WRITE / t_report-carrid.
WRITE t_report-connid.
ENDLOOP.
ENDDO.
*end end-of-selection.
TOP-OF-PAGE.
FORMAT COLOR COL_HEADING.
WRITE 'This is header'.
END-OF-PAGE.
FORMAT COLOR COL_TOTAL.
WRITE 'This is footer'.
AT LINE-SELECTION.
WRITE: / 'Cursor Row:', sy-curow.
WRITE: / 'Cursor Col:', sy-cucol.