ABAP OO 事件处理

*&---------------------------------------------------------------------*
*& Report  ZAQ_OO_EVENTS
*&
*&---------------------------------------------------------------------*
*&主要功能:
*&类lcl_get_student获取学生信息
*&类lcl_write_student输出学生信息
*&通过类lcl_get_student 获取学生信息后,然后通过事件data_exist把获取的学生信息传递给类lcl_write_student输出
*&---------------------------------------------------------------------*

REPORT zaq_oo_events.

TABLES:zaq_student.

CLASS lcl_get_student DEFINITION.
  PUBLIC SECTION.
    DATA gs_student TYPE zaq_student.

*   申明事件
    EVENTS data_exist EXPORTING VALUE(es_school) TYPE zaq_student.

    METHODS get_data IMPORTING i_zcode TYPE zaq_student-zcode.
ENDCLASS.

CLASS lcl_get_student IMPLEMENTATION.
  METHOD get_data.
    SELECT SINGLE * FROM zaq_student INTO CORRESPONDING FIELDS OF gs_student
      WHERE zcode = i_zcode.

    IF sy-subrc = 0.
*     触发事件 把获取的gs_student传出
      RAISE EVENT data_exist
          EXPORTING
              es_school = gs_student.
    ELSE.
      WRITE:/ '取数失败'.
    ENDIF.
  ENDMETHOD.
ENDCLASS.

CLASS lcl_write_student DEFINITION.
  PUBLIC SECTION.
*   事件处理方法  
    METHODS write_data FOR EVENT data_exist OF lcl_get_student "事件名与事件声明时的名字一致
                                          IMPORTING es_school ."事件参数与事件声明时的参数一致

ENDCLASS.

CLASS lcl_write_student IMPLEMENTATION.
  METHOD write_data.
    WRITE:/ es_school-zcode,es_school-zsname,es_school-zage.
  ENDMETHOD.
ENDCLASS.


DATA lcl_object TYPE REF TO lcl_get_student.
DATA event_handle TYPE REF TO lcl_write_student.

START-OF-SELECTION.
  CREATE OBJECT lcl_object.
  CREATE OBJECT event_handle.

* 注册事件处理方法
  SET HANDLER event_handle->write_data FOR lcl_object.

  CALL METHOD lcl_object->get_data
    EXPORTING
      i_zcode = '001'.

猜你喜欢

转载自www.cnblogs.com/aqsyc/p/10721633.html
oo
今日推荐