ABAP-SAP的Selection屏幕的事件处理顺序

本文深入解析了ABAP-SAP Selection屏幕的事件处理顺序,从初始化到屏幕输出再到用户交互,详细解释了每个关键步骤及具体代码实现。
ABAP-SAP的Selection屏幕的事件处理顺序

一、处理顺序图

二、处理说明

1、程序首先执行INITIALIZATION 事件;

2、接着执行AT SELECTION SCREEN OUTPUT事件(也就是PBO) ,在这个事件里你可以通过修改系统默认screen内表修改屏幕的某些属性;
PARAMETERS: TEST1(10) MODIF ID SC1,
            TEST2(10) MODIF ID SC2,
            TEST3(10) MODIF ID SC1,
            TEST4(10) MODIF ID SC2.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
  IF SCREEN-GROUP1 = 'SC1'.
    SCREEN-INTENSIFIED = '1'.
    MODIFY SCREEN.
    CONTINUE.
  ENDIF.
  IF SCREEN-GROUP1 = 'SC2'.
    SCREEN-INTENSIFIED = '0'.
    MODIFY SCREEN.
  ENDIF.
ENDLOOP.

3、系统将屏幕输出到用户端,用户就可进行交互操作了。也就是PAI处理,其分为
3.1字段AT SELECTION-SCREEN ON XXXX.
REPORT EVENT_DEMO.
NODES SPFLI.
AT SELECTION-SCREEN ON CITY_FR.
  IF CARRID-LOW EQ 'AA' AND CITY_FR NE 'NEW Benjamin'.
    MESSAGE E010(HB).
  ENDIF.
3.2区域AT SELECTION-SCREEN ON BLOCK  XXXX.
REPORT EVENT_DEMO.
SELECTION-SCREEN BEGIN OF BLOCK PART1 WITH FRAME.
  PARAMETERS: NUMBER1 TYPE I,
              NUMBER2 TYPE I,
              NUMBEr3 TYPE I.
SELECTION-SCREEN END OF BLOCK PART1.

SELECTION-SCREEN BEGIN OF BLOCK PART2 WITH FRAME.
  PARAMETERS: NUMBER4 TYPE I,
              NUMBER5 TYPE I,
              NUMBER6 TYPE I.
SELECTION-SCREEN END OF BLOCK PART2.

AT SELECTION-SCREEN ON BLOCK PART1.
  IF NUMBER3 LT NUMBER2 OR
     NUMBER3 LT NUMBER1 OR
     NUMBER2 LT NUMBER1.
     MESSAGE E020(HB).
  ENDIF.

AT SELECTION-SCREEN ON BLOCK PART2.
  IF NUMBER6 LT NUMBER5 OR
     NUMBER6 LT NUMBER4 OR
     NUMBER5 LT NUMBER4.
     MESSAGE E030(HB).
  ENDIF.
 
3.3屏幕AT SELECTION-SCREEN
在此事件里可以进行对用户输入进行完整性进行检查。
在PAI处理中出现错误,系统返回屏幕,请求用户重新输入;

4、当所有的PAI执行后,则进入START-OF-SELECTION事件的执行。

<think> 嗯,用户询问的是ABAP中START-OF-SELECTION事件块的含义。这个问题涉及ABAP程序的基础执行逻辑,可以从事件驱动模型的角度来解析。 用户前三次的引用都聚焦在START-OF-SELECTION的特殊性上:引用[1]提到未包含在任何事件块内的语句会被自动插入该事件块;引用[2]和[3]则补充说明这些语句的合并规则——若无显式定义则独立成块,若已定义则追加到已有块首部。这些材料已经清晰勾勒出该事件的核心机制,但引用[4]关于其他事件的描述提醒我可能需要补充对比说明。 考虑到用户可能是刚接触ABAP的开发人员,在组织回答时需要: 1. 先明确基本概念:事件块是ABAP运行时触发的执行单元 2. 突出START-OF-SELECTION的默认特性——它是报表程序的逻辑起点 3. 用具体场景说明隐式合并规则,比如当程序只写WRITE语句时的自动封装行为 4. 补充显式定义的场景,特别是与INITIALIZATION等事件的执行顺序差异 用户引用中提到的"非声明性语句"这个术语需要特别强调,避免用户混淆变量声明和执行语句的位置。另外那个优快云博客链接虽然包含其他事件说明,但内容较浅显,重点还是应该放在用户核心关注的START-OF-SELECTION上。 注意到用户没有要求代码示例,但根据系统指令中"帮助用户逐步解决问题"的要求,还是决定加入两个典型场景的伪代码说明: - 完全隐式的情况 - 显式定义时语句合并的情况 这样能直观展示ABAP编译器背后的处理逻辑 最后生成的问题要围绕知识延伸点: 1. 执行顺序问题是最常见的关联疑问 2. 与其他事件的对比能强化理解 3. 实际应用场景说明其必要性 4. 调试技巧对开发者很实用 </think> 在ABAP中,**`START-OF-SELECTION`** 是一个核心事件块,主要用于可执行程序(如报表程序)。其含义和工作机制如下: ### 核心含义 1. **默认主入口点** `START-OF-SELECTION` 是ABAP报表程序的**默认执行起点**。程序运行时,系统会自动触发该事件块中的代码。 2. **隐式与显式定义** - **隐式触发**:若程序中未显式定义 `START-OF-SELECTION` 事件块,**所有不属于其他事件块或处理块的非声明性语句**(如计算、数据库查询、屏幕输出等)会被自动封装到默认的 `START-OF-SELECTION` 块中[^1][^3]。 - **显式定义**:若显式声明了 `START-OF-SELECTION`,则上述非声明性语句会**追加到该事件块的起始位置**[^2][^3]。 ### 执行规则 ```abap * 示例:隐式场景(未显式定义 START-OF-SELECTION) REPORT ZDEMO. DATA: lv_num TYPE i VALUE 5. lv_num = lv_num * 2. " 自动归入 START-OF-SELECTION WRITE: / 'Result:', lv_num. " 自动归入 START-OF-SELECTION ``` ```abap * 示例:显式定义(语句被插入块首部) REPORT ZDEMO. DATA: lv_num TYPE i VALUE 5. INITIALIZATION. " 其他事件块 lv_num = 10. START-OF-SELECTION. " 显式定义 " 编译器会将前面的非声明语句插入此处 WRITE: / 'Result:', lv_num. " 输出 10 ``` ### 关键特性 1. **作用域限定** 仅位于 `REPORT`/`PROGRAM` 后且**首个处理块之前**的非声明性语句会被自动分配(如计算、`WRITE` 输出)[^1][^3]。 2. **事件块优先级** 若程序包含其他事件块(如 `INITIALIZATION`、`AT SELECTION-SCREEN`),则 `START-OF-SELECTION` 在它们之后执行[^4]。 3. **必要性** 没有该事件块时,程序可能因缺乏执行入口而跳过逻辑代码(声明性语句除外)[^3]。 ### 典型应用场景 - **报表数据处理**:从数据库读取数据并计算。 - **屏幕输出控制**:通过 `WRITE` 生成列表。 - **条件逻辑执行**:根据用户输入执行分支操作。 --- ### 相关问题 1. `START-OF-SELECTION` 与 `INITIALIZATION` 事件块有何区别? 2. 如何避免非声明性语句被错误归入 `START-OF-SELECTION`? 3. 在对话程序(Module Pool)中是否适用 `START-OF-SELECTION`? 4. `START-OF-SELECTION` 中的异常如何处理? [^1]: SAP ABAP帮助文档关于"未包含在事件块内的语句"的定义。 [^2]: 转载说明START-OF-SELECTION的隐式行为。 [^3]: SAP官方对START-OF-SELECTION的合并规则详解。 [^4]: ABAP事件块执行顺序及开发能力指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值