ABAP 事件驱动编程
在当今时代,随着互联网的出现及其带来的一切,程序代码必须能够与最终用户进行交互和通信。这是在 ABAP/4 中使用用户操作调用的事件完成的。
处理块由事件关键字定义,因此在某些相关事件的调用时执行。
默认情况下,事件 start-of-selection
附加到 ABAP/4 中的所有事件。在程序中,可以定义处理块并将此块附加到事件关键字。
对于通常易于阅读的代码,最好按照顺序定义顺序处理块,这些块最有可能在选择屏幕执行期间触发。利用最重要的事件进行选择屏幕编程也是一种很好的做法。这些事件如下所示:
- 初始事件
initialization
- 选择屏幕事件
at selection-screen
- 用户命令事件
at user-command
使用初始化事件 initialization
比如,在 ALV 报表中,用户需要默认选择屏幕事件,就可以使用如下代码:
INITIALIZATION.
s_crdat-low = '20200101'.
s_crdat-high = sy-datum.
s_crdat-sign = 'I'.
s_crdat-option = 'BT'.
APPEND s_crdat.
CLEAR s_crdat.
此程序执行并为其定义了选择屏幕时,将执行此 initialization
处理块,根据执行时将参数字段 s_crdat-high
设置为系统当前日期, s_crdat-low
设置为自 2020 年 1 月 1 日以来的销售订单。
在此事件块中,您可以根据维护用户输入的数据完整性所需的任何条件指定选择屏幕的初始默认值。一些示例包括设置标题栏、将文本元素分配给图形用户界面 (GUI) 元素以及功能代码状态。
选择屏幕事件 at selection-screen
at selection-screen
事件在用户在活动选择屏幕上输入后进行处理。当用户按下功能键或单击按钮以及用户可以交互的许多其他元素时,可能会发生这种情况。除了数据验证检查之外,还可以使用 at selection-screen
事件调用警告消息、GUI 状态更改甚至弹出窗口。
例如如下代码:
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF p_r4 NE 'X'.
CASE screen-group1.
WHEN 'SC3'.
screen-active = '0'.
MODIFY SCREEN.
ENDCASE.
ELSE.
CASE screen-group1.
WHEN 'SC1'.
screen-active = '0'.
WHEN 'SC2'.
screen-active = '0'.
WHEN 'P1'.
screen-active = '0'.
WHEN 'SC3'.
screen-active = '1'.
ENDCASE.
MODIFY SCREEN.
CONTINUE.
ENDIF.
ENDLOOP.
实现效果:
使用用户命令事件 at user-command
按钮以及许多其他事件驱动的选择屏幕选项在维护用户交互和验证用户输入方面非常有用。在下一节中,您将探讨如何使用按钮调用 at user-command
事件,并查看如何使用按钮来处理用户输入的示例。
以下代码显示了 selection-screen pushbutton
事件的语法:
selection-screen pushbutton example1 user-command 1234.
此语句与 at selection-screen
命令一起使用时,是在用户输入数据时与用户交互的好方法。语法类似于 selection-screen comment
,只是在用户按下按钮时传递数据。按下按钮会在 at selection-screen
事件中触发 sccrfields-ucomm
,并导入输入字段。然后可以验证此数据,并根据按钮的用途发出消息。以下示例说明了如何使用两个按钮来确定报告所选数据的语言。
AT SELECTION-SCREEN.
CASE sscrfields-ucomm.
WHEN 'FC01'.
s_flag1 = 'WERKS'. "工厂数据标识
s_flag2 = 'HEAD'. "外部维护标识
PERFORM frm_get_org.
IF gt_org IS NOT INITIAL .
PERFORM frm_alv_org_ready.
PERFORM frm_alv_org_show.
ENDIF.
WHEN 'FC02'.
s_flag1 = 'VKORG'. " 销售组织数据
s_flag2 = 'HEAD'. " 外部维护标识
PERFORM frm_get_vkorg.
IF gt_org IS NOT INITIAL .
PERFORM frm_alv_org_ready.
PERFORM frm_alv_org_show.
ENDIF.
WHEN 'FC03'. " 下载数据导入模板
PERFORM frm_excel_down.
sscrfields-ucomm = ''.
WHEN OTHERS.
ENDCASE.
实现效果:
在此示例中,您可以使用 case 语句检查用户按下了两个按钮中的哪一个。当用户触发 at user-command
事件时,字段 sy-ucomm
保存用户所选项目的唯一四字节名称。通过这种方式,您可以根据输入的数据和用户选择的项目(在本例中为按钮)的组合对各种数据验证或命令用户输入进行编码。
- 点赞
- 收藏
- 关注作者
评论(0)