SAP面向对象(类)-事件(EVENT)

事件(EVENT)

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

  • 事件是没有继承关系的类之间可以互相调用彼此方法的特殊方法。

  • 当需要关联两个互不关联的类时,需要通过定义事件来实现

4种类型

定义在类中的:实例事件,静态事件

定义在接口中的:实例事件,静态事件

对于实例事件,注册语句必须使用FOR指定注册对象

… FOR ref .

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

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

当程序执行到RAISE EVENT语句后,所有已注册的处理方法都将在下一个语句之前被处理。处理方法按照其在系统内部注册的顺序被执行。为避免无限循环,目前事件处理最多不能超过64级嵌套

使用步骤

1、定义事件

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

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

例:EVENTS mod_10 EXPORTING VALUE(p_data) TYPE i.

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

2、触发事件

触发:一个实例事件可以被类中的任意方法触发,静态时间则可以被静态方法触发

RAISE EVENT evt EXPORTING p1 = f1 … pn = fn

例:RAISE EVENT mod_10 EXPORTING p_data = t_data .

3、接收事件/事件处理

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

人和类都可以调用其他类中所定义的事件,或调用自身所定义的事件。

METHODS|CLASS-METHODS meth FOR EVENT evt OF cifIMPORTING …ei…

例:METHODS write_data FOR EVENT mod_10 OF cl_dataIMPORTING p_data.

4、注册事件方法

为相关事件注册方法,注册事件方法前,先创建类对象,并实例化对象

SET HANDLER … hi… [FOR] …

例:

DATA cl_event TYPE REF TO cl_data. "创建对象

DATA cl_handl TYPE REF TO lcl_handler."创建对象

CREATE OBJECT cl_handl."实例化对象

CREATE OBJECT cl_event."实例化对象

SETHANDLER cl_handl->write_data FOR cl_event. "注册事件方法

方式一:程序实现示例代码

*&---------------------------------------------------------------------*
*& Report ZTEST01
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTEST01.

*定义类的构成项目(属性、方法、事件)
*   CLASS <class> DEFINITION.
*     要素声明
*     所有项目都需要定义在三个访问区域之一中
*   ENDCLASS.

*实现类的方法
*   CLASS <class> IMPLEMENTATION.
*   ENDCLASS.

*事件是没有继承关系的类之间可以互相调用彼此方法的特殊方法
*当需要关联两个互不关联的类时,需要通过定义事件来实现
*第一个类
* 1.定义事件:
*   例: EVENTS mod_10 EXPORTING VALUE(p_data) TYPE i.
* 2.触发事件
*   例: RAISE EVENT mod_10 EXPORTING p_data = t_data .
*第二个类
* 3.接收事件:
*   例: METHODS write_data FOR EVENT mod_10 OF cl_data IMPORTING p_data.
* 4.注册类:
*   CREATE OBJECT cl_handl. "实例化 第二个类
*   CREATE OBJECT cl_event. "第一个类
*"  SET HANDLER 实例2->方法 for 实例1 注册
*   SET HANDLER cl_handl->write_data FOR cl_event.
* 5.调用
*   例: CALL METHOD cl_event->add_data.

"定义一个数字,进行1到50的循环,当为10的倍数时,进行输出
CLASS cl_data DEFINITION.
  PUBLIC SECTION."公共
    METHODS add_data.
    EVENTS mod_10 EXPORTING VALUE(p_data) TYPE i."1.定义事件
  PRIVATE SECTION."私有
    DATA t_data TYPE i.
ENDCLASS.

" 实现add_data方法
CLASS cl_data IMPLEMENTATION.
  METHOD add_data.
    DATA gv_data TYPE i.
    t_data = t_data + 1.
    gv_data = t_data MOD 10."取余
    IF gv_data = 0.
      RAISE EVENT mod_10 EXPORTING p_data = t_data. "2.触发事件
    ENDIF.
  ENDMETHOD.
ENDCLASS.

CLASS lcl_handler DEFINITION.
  PUBLIC SECTION.
    METHODS write_data FOR EVENT mod_10 OF cl_data IMPORTING p_data. "3.接收事件
ENDCLASS.

CLASS lcl_handler IMPLEMENTATION.
  METHOD write_data.
    WRITE:/ p_data.
  ENDMETHOD.
ENDCLASS.

DATA cl_event TYPE REF TO cl_data. "创建对象
DATA cl_handl TYPE REF TO lcl_handler."创建对象

START-OF-SELECTION.
  CREATE OBJECT cl_handl."实例化
  CREATE OBJECT cl_event."实例化
  SET HANDLER cl_handl->write_data FOR cl_event. "4、注册事件,才能进行两个类之间的变量传值

  DO 50 TIMES.
    CALL METHOD cl_event->add_data.
  ENDDO.

执行结果

方式二:SE24创建类实现

1、创建自定义类

2、定义类属性

3、定义类方法

双击方法名进入编写方法内容

4、定义类事件

设置事件参数(选中事件点击参数)

点击【基于源代码】查看该类源码

5、定义接收事件/事件处理方法

双击方法名进入编写方法内容

为方法接收指定事件

引入事件参数

点击【基于源代码】查看该类源码

6、注册事件(在程序中使用时需要注册)

*&---------------------------------------------------------------------*
*& Report ZTEST02
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTEST02.

DATA cl_event TYPE REF TO zcl_test_001. "创建对象
DATA cl_handl TYPE REF TO zcl_test_002."创建对象

START-OF-SELECTION.
  CREATE OBJECT cl_event."实例化
  CREATE OBJECT cl_handl."实例化

" 4、注册事件,才能进行两个类之间的变量传值
  SET HANDLER cl_handl->write_data FOR cl_event.

  DO 50 TIMES.
    CALL METHOD cl_event->add_data.
  ENDDO.

执行结果

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SAP ABAP Object是一种面向对象开发方式,用于开发和扩展SAP系统中的应用程序。它基于SAP的ABAP语言,并使用面向对象的概念和原则来实现应用程序的开发。 ABAP是一种专门用于开发SAP系统的编程语言,它支持面向对象开发风格。使用ABAP Object,开发人员可以创建可重用的对象,这些对象可以封装数据和行为,提供更好的模块化和可维护性。 在SAP ABAP Object中,开发人员可以定义和对象,是一个模板,用于创建对象。对象是的实例,它包含了定义的属性和方法。开发人员可以通过继承和多态性来重用代码,提高开发效率。 ABAP Object还提供了封装、继承和多态性等面向对象的特性。封装可以隐藏内部实现细节,使代码更加模块化和可维护。继承允许创建新,通过继承基的属性和方法来扩展功能。多态性允许使用一个基引用来访问派生的对象,提供更大的灵活性。 通过使用SAP ABAP Object,开发人员可以更容易地创建和维护高质量的应用程序。它提供了更强大的模块化和复用性,使开发人员能够更好地组织和管理代码。此外,ABAP Object还提供了更好的性能和可靠性,能够满足SAP系统的高要求和复杂性。 总之,SAP ABAP Object是一种面向对象开发方式,用于开发和扩展SAP系统中的应用程序。它提供了强大的功能和特性,能够帮助开发人员更好地组织和管理代码,同时提高开发效率和应用程序的质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值