1 报表过程事件
报表过程事件是在报表运行过程中由系统自动控制,按照一定次序被触发的事件,其目的是从数据库中选择数据并整理,准备进行列表输出。这些事件从报表程序启动开始就被系统顺序触发,现分述如下:
INITIATION: 初始化事件,用于程序初始化,例如选择屏幕中字段默认值的填充。
START-OF-SELECTION:选择开始事件,如果报表中含有选择屏幕,则在选择屏幕的处理结束后触发,使报表程序的默认事件块。如果程序中部分代码不隶属于任何事件关键字,则自动被插入该事件块的初始部分。
END-OF-SELECTION:选择结束事件,如果程序中使用逻辑数据库,则在所有逻辑数据处理结束后触发。一般在该事件中输出列表。
 
2 选择屏幕事件
如果报表需要使用选择屏幕接受用户输入,除定义选择屏幕元素之外,还需要编辑选择屏幕事件块来选择屏幕行为进行控制,与其相关的系列事件将在INITIATION之后START-OF-SELECTION之前被触发。现分述如下:
AT SELECTION-SCREEN OUTPUT:选择屏幕PBO事件,显示选择屏幕之前触发。
AT SELECTION-SCREEN:选择屏幕PAI事件,用户在选择屏幕中执行某些功能后被触发。该事件关键字语句包含多个附加项,可以用于控制选择屏幕状态,并对其中的用户交互进行响应。例如,当用户输入不正确的值时,给处错误消息。或是进行一些妥当性检查。

(1)其实就像一个FORM,所以在这个事件里声明的变量都是局部变量。

(2)根据SY-UCOMM这个系统变量可以判断用户的命令

(3)在这个事件里响应的是屏幕上选择条件中的事件,例如CHECKBOX的选择与否,RADIOBUTTON的选择,LISTBOX的选择等等。

所以分为以下几个方面:

1. ... ON field:在PARAMETER变化时触发的事件,对于选择屏幕某字段输入的PAI事件,当该字段的值被传递给程序时被触发,可以应用于改字段本身的正确性检查,如可系统提示错误,则可以在该字段中重新输入,此时其他元素呈灰色,不接受输入

2. ... ON END OF sel:SELECT-OPTION触发的事件,用于整个选择表输入结束后各行的检查

3. ... ON VALUE-REQUEST FOR psel_low_high:当光标位于某屏幕字段时,选择的帮助(F4)

4. ... ON HELP-REQUEST FOR psel_low_high:当光标位于某屏幕字段时,选择的帮助(F1)

5. ... ON RADIOBUTTON GROUP radi:单选按钮事件,必须进行整体输入检查

6. ... ON BLOCK block:框架的触发事件

7. ... OUTPUT:响应屏幕上的事件,修改选择屏幕的唯一方法

 
3 逻辑数据库事件
如果报表中使用到逻辑数据库,则在START-OF-SELECTION事件结束后将触发数据库事件。现说明如下:
GET node    选择逻辑数据库中当前级别数据中的数据。
GET node LATE 选择逻辑数据库中上一级别数据源中的数据。
逻辑数据库事件的作用也是选择并整理数据,因而也可以将其看作是一种报表过程事件。
 
4 列表事件
在所有报表过程和选择屏幕事件结束后,系统将开始触发列表事件,这些事件块控制列表输出状态,负责处理列表过程中的交互并响应用户行为。主要有以下四种列表事件块。
TOP-OF-PAGE:页眉控制,在每个新页面开始时触发。
END-OF-PAGE:页脚控制,在当前页面结束时触发。
AT LINE-SELECTION:行选择控制,用户选择某列表行时触发。
AT USER-COMMAND : 用户交互控制,用户选择某个GUI功能时触发。
如果一个报表中定义了后两种事件之一,则称其为交互之列表,因为这种表不仅能显示列表输出,还可以根据用户的行为给出更多其他的交互式信息。
一般性的报表事件触发过程如下:
1         一旦用户开始运行报表过程的可执行程序,事件LOAD-OF-PROGRAM首先被触发,程序开始运行。
2         INITIALZATIONG 被触发。
3         如果程序中定义了供用户输入的选择屏幕,每次选择屏幕输出之前,事件AT SELECTION-SCREEN OUTPUT
被触发。
4         如果用户在选择屏幕中输入某些值后执行某些功能,系统将触发AT SELECTION-SCREEN。
5         之后触发START-OF-SELECTION事件。
6         如果报表中使用到逻辑数据库,则接下来触发的事件为GET和GET LATE。
逻辑数据库是一种数据源,为程序提供数据筛选和整理的方式,在逻辑数据库内部,数据条目通过循环一行一行读入程序,并可以在GET事件块内部进行处理。
7         之后执行END-OF-SELECTION事件,如有列表,一般在该事件之后输出列表,此后系统运行时环境将控制交给显示服务器。
8         然后触发页眉,页脚控制的TOP-OF-PAGE和END-OF-PAGE.
9         如果程序中定义有列表事件,则系统可以响应用户在列表屏幕中的行为,触发各种程序中交互事件。行选择交互事件(AT LINE-SELECTION)允许用户从列表中选择某行,并将触发响应的事件。如果用户选择其他子定义的功能代码(功能代码与相关菜单,按钮或键盘热键有关,又程序员在GUI状态中定义),将触发用户指令交互,即AT USER-COMMAND事件。
 
5 事件块的中止
事件块的中止分为有条件中止和无条件中止。
1 有条件中止 CHECK
CHEXK: 如果CHECK语句中的条件为假,则系统离开当前事件并转向下一个事件块(不一定是END-OF-SELECTION)。但是如果CHECK用在事件块内部的循环语句中,则只作用于当前循环。
2 无条件中止STOP,EXIT
STOP: 立即结束任何当前事件,直接转向END-OF-SELECTION.
EXIT: 立即离开任何模块,直接转向列表输出屏幕,不执行END-OF-SELECTION。
 

实例:

Event in ABAP report determine process flow of a program. The events are triggered depended on the way the output is generated. They begin after event keyword and end when the next event reached.

Event keyword:
INITIALIZATION.
Occurs when report initialized.
We can use it to check user authorization or prepare output for selection screen.

AT SELECTION-SCREEN OUTPUT :
Occurs each time selection screen about to generated.
We can use it to modify selection screen, for example hide / unhide parameter.

AT SELECTION-SCREEN.
Occurs each user command in selection screen. we can use it to perform checking on user input.

START-OF-SELECTION
Occurs after the standard selection screen has been processed.,
data is read in this event.

END-OF-SELECTION
Occurs after start-of-selection.

TOP-OF-PAGE
Occurs when a new page starts.
Use it for write report header.

END-OF-PAGE
Occurs when a page ends.
Use it for write report footer.

AT LINE-SELECTION
Occurs when the user double-click on report.

AT USER-COMMAND
Occurs when the user push toolbar button.

This is program to demonstrate how to use event properly.

REPORT zt_event LINE-COUNT ().

*http://abap-gallery.blogspot.com

TABLES: sflight.

DATA: BEGIN OF t_report OCCURS ,
carrid LIKE sflight-carrid,
connid LIKE sflight-connid,
END OF t_report. *begin selection screen
PARAMETERS p_datum LIKE sy-datum.
PARAMETERS p_check AS CHECKBOX.
*end selection screen INITIALIZATION.
*begin initialization
MOVE sy-datum TO p_datum.
*end initialization AT SELECTION-SCREEN.
*begin at selection-screen
MESSAGE i888(sabapdocu) WITH 'At selection-screen'.
IF p_check = 'X'.
MESSAGE e888(sabapdocu) WITH 'Clear checkbox'.
ENDIF.
*end at selection-screen AT SELECTION-SCREEN OUTPUT.
*begin at selection-screen output
MESSAGE i888(sabapdocu) WITH 'At selection-screen output'.
*end at selection-screen output START-OF-SELECTION.
*begin start-of-selection.
MESSAGE i888(sabapdocu) WITH 'start-of-selection'.
SELECT * FROM sflight.
MOVE sflight-carrid TO t_report-carrid.
MOVE sflight-connid TO t_report-connid.
APPEND t_report.
ENDSELECT.
*end start-of-selection. END-OF-SELECTION.
*begin end-of-selection.
MESSAGE i888(sabapdocu) WITH 'end-of-selection'.
FORMAT COLOR COL_NORMAL.
DO TIMES.
LOOP AT t_report.
WRITE / t_report-carrid.
WRITE t_report-connid.
ENDLOOP.
ENDDO.
*end end-of-selection. TOP-OF-PAGE.
FORMAT COLOR COL_HEADING.
WRITE 'This is header'. END-OF-PAGE.
FORMAT COLOR COL_TOTAL.
WRITE 'This is footer'. AT LINE-SELECTION.
WRITE: / 'Cursor Row:', sy-curow.
WRITE: / 'Cursor Col:', sy-cucol.

SAP事件 Event Flow(转载)的更多相关文章

  1. 经典线程同步 事件Event

    阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇 一个经典的多线程同步问题> <秒杀多线程第五篇 经典线程同步关键段CS> 上一篇中使用关键段来解决经典的多线程同步互斥问题 ...

  2. 关于 javascript event flow 的一个bug

    [1]描述了firefox,safari 有一个bug和DOM 3 规范不一致:在event.currentTarget等于event.target的时候(即event flow处于target ph ...

  3. Javascript——浅谈 Event Flow

    1.Javascript Events : Event Bubbling(事件冒泡) 如果事件从最特定的元素开始,则事件流中的一个阶段称为事件冒泡(DOM中可能最深的节点)然后向上流向最不特定的节点( ...

  4. event flow

    JS之event flow DOM事件流 1.定义: DOM(文档对象模型)结构是一个树型结构,当一个HTML元素产生一个事件时,该事件会在元素节点与根结点之间的路径传播,路径所经过的结点都会收到该事 ...

  5. javaScript高级教程(五) Event Flow

    1.两个阶段三个模型:Netscape支持事件捕获,IE支持事件冒泡,w3c是先捕获后冒泡 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 S ...

  6. 秒杀多线程第六篇 经典线程同步 事件Event

    原文地址:http://blog.csdn.net/morewindows/article/details/7445233 上一篇中使用关键段来解决经典的多线程同步互斥问题,由于关键段的“线程所有权” ...

  7. python线程事件Event(30)

    在python项目开发中,线程thread使用是比较常见的,在前面的文章中我们介绍了 python线程的创建 以及 线程互斥锁 ,今天还要额外介绍一个与线程相关的内容 – 事件Event. 一.pyt ...

  8. libevent源码学习(9):事件event

    目录在event之前需要知道的event_baseevent结构体创建/注册一个event向event_base中添加一个event设置event的优先级激活一个event删除一个event获取指定e ...

  9. 事件EVENT与waitforsingleobject的使用

    事件event与waitforsingleobject的配合使用,能够解决很多同步问题,也可以在数据达到某个状态时启动另一个线程的执行,如报警. event的几个函数: 1.CreateEvent和O ...

随机推荐

  1. Swing实现canvas-nest.js 源码

    #### 说明 canvas-nest.js 源码 http://www.bubuko.com/infodetail-2237716.html 地址:https://gitee.com/dgwcode ...

  2. Proxy模式(代理[延迟]模式)

    Proxy?? Proxy是"代理人"的意思,它指的是代替别人进行工作的人.代理实际上就是使用委托的机制,在代理的过程中你可以做点其他的事情,然后再来执行被代理对象的代码. 知识储 ...

  3. Luogu P2480 [SDOI2010]古代猪文 卢卡斯+组合+CRT

    好吧刚开始以为扩展卢卡斯然后就往上套..结果奇奇怪怪又WA又T...后来才意识到它的因子都是质数...qwq怕不是这就是学知识学傻了.. 题意:$ G^{\Sigma_{d|n} \space C_n ...

  4. 插入po得到主键,插入sql得到主键

    import com.yd.common.data.CIPPageInfo; import com.yd.common.data.CIPReqCondition; import com.yd.comm ...

  5. 如何将拷贝过来的数据 *.ibd 文件生效

    1.将拷贝的数据文件   "qqq.idb"放在自己的数据库中. 一般存放在  mysql/ data/ databasename 下 2. "qqq.idb" ...

  6. java防止表单重复提交的几种方法

    转载大神 1. 使用session同步和token机制来防止并发重复提交 https://blog.csdn.net/hejingyuan6/article/details/50487777 2. S ...

  7. jquery——整屏滚动

    从这里下载了滚轮事件插件:https://github.com/jquery/jquery-mousewheel 函数节流:js中有些事件的触发频率非常高,在短时间内多次触发执行绑定函数,比如mous ...

  8. 【Linux】Linux常用命令大全

    系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...

  9. sql 删除字段 出错

    1. 删除字段:   ALTER TABLE TALE_NAME DROP COLUMN nn;   2.报错: 消息 5074,级别 16,状态 1,第 1 行对象'DF__WorkOrder__I ...

  10. agc015F - Kenus the Ancient Greek(结论题)

    题意 题目链接 $Q$组询问,每次给出$[x, y]$,定义$f(x, y)$为计算$(x, y)$的最大公约数需要的步数,设$i \leqslant x, j \leqslant y$,求$max( ...