abap AT SELECTION-SCREEN 有哪些事件

ABAP 选择屏幕(Selection Screen)的核心事件是 AT SELECTION-SCREEN。它不是一个单一事件,而是一系列事件的统称,用于在不同的用户交互节点介入处理。

下表汇总了这些事件及其主要用途:
image
各事件详解

  1. AT SELECTION-SCREEN OUTPUT (PBO)
    此事件在选择屏幕每次显示之前触发。它相当于屏幕的 PBO(Process Before Output)逻辑,是动态控制屏幕元素的“大本营”。

核心用途:

动态控制元素属性:通过修改内表 SCREEN 的字段(如 ACTIVE, INVISIBLE, REQUIRED, INPUT 等),可以动态设置屏幕上元素的可见、可输入、必输等状态。通常结合 LOOP AT SCREEN 和 MODIFY SCREEN 实现。

动态填充下拉列表:结合 VRM_SET_VALUES 函数,为 PARAMETERS AS LISTBOX 动态准备可选值。

执行顺序:它在 INITIALIZATION 事件之后触发。

  1. AT SELECTION-SCREEN (基本形式)
    这是最基础的 AT SELECTION-SCREEN 事件,在用户点击执行 (Execute) 按钮、按下回车 (Enter) 键或点击应用工具栏上的按钮后触发。

核心用途:

全局输入检查:作为所有输入数据都传递到 ABAP 程序后的“最后一道关口”,进行跨字段的复杂校验。

响应按钮点击:通过系统变量 SY-UCOMM 捕获用户点击的具体功能码,来响应工具栏按钮或 PUSHBUTTON 的点击。

执行顺序:在 AT SELECTION-SCREEN ON 等更具体的事件之后触发。

  1. AT SELECTION-SCREEN ON (单字段校验)
    此事件在特定字段的值从屏幕传递到 ABAP 程序时被触发。

核心用途:对该字段的值进行即时、独立的校验。

错误处理:如果在此事件中抛出 TYPE 'E' 的错误消息,用户可以只修改该错误字段,其他字段保持可编辑状态,无需重新输入所有内容。这是它相对于基本 AT SELECTION-SCREEN 的一个主要优势。

  1. AT SELECTION-SCREEN ON BLOCK (块校验)
    此事件在特定块 (Block) 内的所有字段值都传递到程序后触发。

核心用途:对一个逻辑块内的字段进行联合校验。例如,可以检查“起始日期”是否早于“结束日期”。

  1. AT SELECTION-SCREEN ON RADIOBUTTON GROUP (单选按钮组处理)
    此事件在特定单选按钮组的值发生变化并被传递时触发。

核心用途:对一组单选按钮的选择进行统一处理或校验。

  1. AT SELECTION-SCREEN ON VALUE-REQUEST FOR (自定义F4帮助)
    当用户将光标放在特定字段上并按下 F4 键时触发。

核心用途:为该字段提供自定义的搜索帮助 (F4 Input Help)。你可以在此事件中调用函数或弹出窗口,让用户选择值,然后通过 DYNP_VALUES_UPDATE 等函数将值传回屏幕。

  1. AT SELECTION-SCREEN ON HELP-REQUEST FOR (自定义F1帮助)
    当用户将光标放在特定字段上并按下 F1 键时触发。

核心用途:为该字段提供自定义的帮助文档 (F1 Help)。

  1. AT SELECTION-SCREEN ON EXIT-COMMAND (捕获退出操作)
    此事件在用户点击具有 TYPE EXIT 类型的按钮(如标准的返回、取消、退出按钮)时触发。

核心用途:捕获用户的退出操作,以便在程序结束前执行一些清理或自定义逻辑。

⚠️ 重要注意事项
执行顺序:标准的选择屏幕处理流程大致为:INITIALIZATION -> AT SELECTION-SCREEN OUTPUT -> (用户操作) -> AT SELECTION-SCREEN ON -> AT SELECTION-SCREEN ON BLOCK -> AT SELECTION-SCREEN (基本形式)。

事件嵌套:AT SELECTION-SCREEN 及其变体事件中定义的变量都是局部变量,仅在当前事件块内有效。

错误消息的影响:在 AT SELECTION-SCREEN 的任何变体中,如果抛出一个 TYPE 'E' 的错误消息,程序会中断当前处理,并重新显示选择屏幕,让用户修正输入。

posted @ 2026-07-28 16:14  虚拟过客之IT老男人  阅读(8)  评论(0)    收藏  举报