ABAP/4是事件驱动语言。这意味着通过外部事件控制一般的ABAP/4程序流。程序的一部分组成过程块,并将该过程块分配到特定的事件。因为通过事件唯一切换执行顺序,所以在程序中过程块的出现顺序是没有任何关系的。但是,为了保证可读性,在程序中应该以过程块的执行顺序排列它们。
REPORT程序第一行有效代码必须为REPORT <程序名>。
–REPORT report id.
后缀: NO STANDARD PAGE HEADING "隐藏标准表头
LINE-COUNT lcount "每行宽度
LINE-SIZE lsize "每页行数
MESSAGE-ID mid "消息类
包含程序。包含程序不能被单独调用,必须被其他程序包含,相当于此程序代码完全复制在当前程序中。注意声明部分与包含程序的位置。
INCLUDE ... TOP.
INCLUDE ... 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类型(Subroutine Pool)程序时,SAP系统自动将程序加载至内存中时,自动调用这个事件,程序默认执行,不需coding,执行完毕后执行INITIALIZATION。
INITIALIAZATION只能书写在可执行程序中,这个事件是在程序初始化过程中起作用的事件,一旦程序初始化完成以后该事件将不再对程序产生影响。
AT SELECTION-SCREEN OUTPUT:在选择屏幕输出之前执行的事件,一般用来设置选择屏幕的控件属性。
例:点选复选框,对单选按钮及描述进行成组的显示或隐藏。
当对Parameters或Select-options进行隐藏时,要修改其input属性,或修改active属性。
*&-------------------------------------------------
*&EVENT-选择屏幕的PBO事件
*&AT SELECTION-SCREEN OUTPUT
*&-------------------------------------------------
AT SELECTION-SCREEN OUTPUT.
IF P_CHECK EQ 'X'.
LOOP AT SCREEN .
IF SCREEN-GROUP1 = 'SEX'.
SCREEN-INVISIBLE = '1'.
SCREEN-INPUT = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
EDNIF.
效果:
AT SELECTION-SCREEN:在选择屏幕有输入之后执行的事件,一般用来进行有效性检查。PAI执行完毕后,自动执行一次PBO事件。
例:当输入学生序号并点击回车后,程序根据当前输入的学生序号值进行检查,如果在数据库表中存在,在一个文本控件中返回 ‘检查成功!',如果不存在,返回 ’检查失败!’。
*&--------------------------------------
*&EVENT-选择屏幕的PAI事件
*&AT SELECTION-SCREEN
*&--------------------------------------
AT SELECTION-SCREEN
SELECT SINGLE *
FROM Z_TEST
WHERE ZINDEX = P_ZINDEX
IF SY-SUBRC EQ 0.
LTY_MS = '检查成功!'
ELSE.
LTY_MS = '检查失败!'
MESSAGE E001.
EDNIF.
效果:
这个事件是报表程序选择屏幕事件和初始化事件完成后默认进行的事件。在程序中在第一个FORM-ENDFORM之前的语句并且没有声明相关事件的语句都会默认按照顺序插到START-OF-SELECTION事件的开始位置。另在使用逻辑数据库时,这个事件也是逻辑数据库获取数据开始的事件。
这个事件是报表程序选择完并且处理完数据后LIST输出的事件。同时这个事件也是逻辑数据库选择数据结束的标志。
这个事件是在报表程序里输出自定义的表头用的,在新的一页刚开始遇到write语句的时候这个事件块就会执行一次。第一次执行:遇到程序中的第一个write语句时,跳转到TOP-OF-PAGE事件执行,执行完毕后返回执行write语句。
隐藏默认表头,在REPORT程序第一行进行设置:
REPORT program NO STANDARD PAGE HEADING .
次级表单的表头在REPORT程序中重新使用WRITE语句输出表单时,表单序号SY-LSIND自动增加1,次级表单输出时,需要单独指定表头。
SET TITLEBAR ’0100’ :增加标题,可以定义占位符,传入变量,后缀WITH gv_title.
SET PF-STATUS ‘0100’:增加按钮,按钮以组的形式定义,后缀EXCLUDING gt_exclude.设置按钮的隐藏。
AT USER-COMMAND:对自定义按钮增加功能,一般使用系统变量SY-UCOMM判断功能代码。
AT LINE-SELECTION:双击表单中的某一行,可以执行跳转或再次输出表单等操作,一般配合GET CURSOR FIELD LV_FIELDNAME VALUE LV_VALUE.(获取光标所在位置字段)使用。