事件块总览
通过事件控制ABAP/4程序流:
- ABAP/4 是事件驱动语言。这意味着通过外部事件控制一般的ABAP/4程序流。程序的一部分组成过程快,并将该过程快分配到特定的事件。
定义过程块
- 可以在ABAP/4 中通过使用事件关键字定义过程块。在事件及其事件关键字中对可能的事件关键字进行了说明。
- 注:两个事件关键字或事件关键字与FORM 语句之间的所有语句构成过程块。出现事件时,系统将在相应的事件关键字之后处理过程块。 ABAP/4 报表程序中的所有语句都是过程块或者子程序的一部分。
因为通过事件唯一切换执行顺序,所以在程序中过程块的出现顺序是没有任何关系的。但是,为了保证可读性,在程序中应该以过程块的执行顺序排列它们。
事件块总览
步骤: 先进行初始化处理,然后进行AT SELECTION-SCREEN OUTPUT(选择屏幕输出执行之前的事件)
然后进行 ATSELECTION-SCREEN 选择屏幕的输入
程序基本内容
REPORT 程序第一行有效代码必须为REPORT <程序名>
后缀
— NO STANDARD PAGE HEADING "隐藏标准表头
— LINE-COUNT lcount "每行宽度
— LINE-SIZE lsize “每页行数
— MESSAGE-ID mid "消息类
程序的模块化
INCLUDE...
--- 包含程序。 包含程序不能被单独调用,必须被其他程序包含,相当于此程序代码完全复制在当前程序中。
--- 注意声明部分与包含程序的位置
- INCLUDE...TOP.
- INCLUDE...FORM.
PERFORM/FORM
--- Subroutines,子程序,子例程,在程序中形成重用模块,可以进行多次重复调用。
--- 对子程序的调用
PERFORM <子程序名称> TABLES … USING …. CHANGING … .
--- 子程序代码块
FORM <子程序名称> TABLES …[TYPE type] USING … [TYPE type] CHANGING … [TYPE type].
ENDFORM .
初始化事件LOAD-OF-PROGRAM
--- 用于执行程序加载
--- 当执行一个1类型(可执行程序) , M 类型(Module Pool) .F 类型 (Function Group) ,S 类型程序时,SAP系统自动将程序加载至内存中,自动调用这个事件
--- 默认执行,不需coding, 执行完毕后执行 INITIALIZATION
初始化事件INITIALIAZATION
--- 只能书写在可执行程序中
--- 这个事件时在程序初始化过程中其作用的事件,一旦程序初始化完成以后该事件将不在对程序产生影响
选择屏幕相关事件
--- 选择屏幕PBO事件(Process Before Output)
---- AT SELECTION-SCREEN OUTPUT
---- 在选择屏幕输出之前执行的事件,一般用来设置选择屏幕的控件属性
--- 选择屏幕PAI事件 (Process AFTER INPUT)
--- 在选择屏幕有输入之后执行的事件,一般用来进行有效性检查
--- **PAI 执行完毕后,自动执行一次PBO事件
选择屏幕的PBO事件
--- 例如: 点选复选框,对单选按钮及描述进行成组的显示或者隐藏
--- 注意: 当对 Parameters 或 Select-options 进行隐藏时,要修改器INPUT 属性,或修改active属性
PARAMETERS P_CHECK AS CHECKBOX USER-COMMAND HIDE. " 生成一个复选框
SELECTION-SCREEN BEGIN OF LINE. "在一行上放置控件
SELECTION-SCREEN COMMENT (10) TEXT-C01 MODIF ID SEX. "文本
PARAMETERS P_FEMALE RADIOBUTTON GROUP GP1 MODIF ID SEX. "单选按钮
SELECTION-SCREEN POSITION 33. "到屏幕33的位置
SELECTION-SCREEN COMMENT (10) TEXT-C02 MODIF ID SEX. "文本
PARAMETERS P_MALE RADIOBUTTON GROUP GP1 MODIF ID SEX. "单选按钮
SELECTION-SCREEN OF LINE. "一行结束
AT SELECTION-SCREEN OUTPUT.
IF P_CHECK = 'X'.
LOOP AT SCREEN .
IF SCREEN-GROUP1 = 'SEX'.
SCREEN-INVISIBLE = '1' .
SCREEN-INPUT = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.