• 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.'.
  • 相关阅读:
    项目管理之代码合并
    C#判断操作系统的位数
    年初离职潮的思考
    线上系统问题的紧急处理案例(一)
    [六、页面跳转]8通过PresentationMode实现导航的后退
    [六、页面跳转]12使用@ObervedObject监听实例对象二
    [六、页面跳转]13使用@StateObject实现简单的购物车功能
    [六、页面跳转]4在导航栏添加一些功能按钮
    [六、页面跳转]5在导航栏视图的底部放置一排工具栏
    [六、页面跳转]7实现导航页面的自定义后退
  • 原文地址:https://www.cnblogs.com/miaosj/p/10338891.html
Copyright © 2020-2023  润新知