ABAP事件的简单用法详解编程语言

1.1、事件: 用于捕获某类对象状态的改变来触发事件的方法,并进行处理

1.2、定义:可以在类或接口中进行声明

  EVENTS|CLASS-EVENTS evt
   EXPORTING … VALUE(p1) TYPE type|LIKE f [OPTIONAL|DEFAULT g] …

  实例事件中包含一个隐含参数SENDER,该参数的类型为触发时间的类或接口对象引用

1.3、触发:一个实例事件可以被类中的任意方法触发,静态时间则可以被静态方法触发 RAISE EVENT evt EXPORTING p1 = f1 … pn = fn

1。4、事件处理:事件需要通过触发其声明代码中所定义的方法才能处理相关事务。

  任何类都可以调用其他类中所定义的事件,或调用自身所定义的事件

  METHODS|CLASS-METHODS  meth FOR EVENT evt OF cif IMPORTING …ei…

1.5、为相关事件注册方法 SET HANDLER … hi… [FOR] …

1.6、事件类型分为4种 定义在类中的:实例事件,静态事件 定义在接口中的:实例事件,静态事件 对于实例事件,

  注册语句必须使用FOR指定注册对象 … FOR ref

  . … FOR ALL INSTANCES(注册所有可以触发该事件的实例,包括尚未被创建的实例)

  注册静态事件,不需加FOR后缀,自动应用于整个类

1.7、例子:设置一个数字从1循环到50,当它是5的倍数时,触发事件输出一段话。

*定义事件 如果一个数是5的倍数,触发事件 
CLASS a DEFINITION. 
PUBLIC SECTION. 
CLASS-DATA num TYPE i. 
METHODS add. 
EVENTS mod5 EXPORTING VALUE(p_num) TYPE i. 
ENDCLASS. 
CLASS a IMPLEMENTATION. 
METHOD add. 
num = num + 1. 
IF num MOD 5 = 0. 
RAISE EVENT mod5  EXPORTING p_num = num. 
ENDIF. 
ENDMETHOD. 
ENDCLASS. 
*定义事件处理类 
CLASS mod5_handle DEFINITION. 
PUBLIC SECTION. 
METHODS write_num FOR EVENT mod5 OF a IMPORTING p_num. 
ENDCLASS. 
CLASS mod5_handle IMPLEMENTATION. 
METHOD write_num. 
WRITE: / 'this is event menthod,p_num = ',p_num. 
ENDMETHOD. 
ENDCLASS. 
*声明类 
DATA: a TYPE REF TO a, 
mod5 TYPE REF TO mod5_handle, 
a1 TYPE REF TO a, 
a2 TYPE REF TO a. 
START-OF-SELECTION. 
CREATE OBJECT a. 
CREATE OBJECT a1. 
CREATE OBJECT a2. 
CREATE OBJECT mod5. 
*注册事件 
SET HANDLER mod5->write_num FOR a. 
DO 50 TIMES. 
CALL METHOD a->add. 
ENDDO. 
WRITE / 'a is stop.'. 
DO 50 TIMES. 
CALL METHOD a1->add. 
ENDDO. 
WRITE / 'a1 is stop.'. 
*注册事件为所有实例(包含没有创建的实例) 
SET HANDLER mod5->write_num FOR ALL INSTANCES. 
DO 50 TIMES. 
CALL METHOD a1->add. 
ENDDO. 
WRITE / 'a1 is stop.'. 
DO 50 TIMES. 
CALL METHOD a2->add. 
ENDDO. 
WRITE / 'a2 is stop.'.

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/18050.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论