SAP ABAP - 对象事件

  • 简述

    event是在类中定义的一组结果,用于触发其他类中的事件处理程序。当事件被触发时,我们可以调用任意数量的事件处理程序方法。触发器与其处理程序方法之间的链接实际上是在运行时动态决定的。
    在正常的方法调用中,调用程序确定需要调用对象或类的哪个方法。由于并不是为每个事件都注册固定的处理方法,因此在进行事件处理时,处理方法决定需要触发的事件。
    类的事件可以通过使用 RAISE EVENT 语句触发同一类的事件处理程序方法。对于事件,可以使用 FOR EVENT 子句在相同或不同的类中定义事件处理程序方法,如以下语法所示 -
    
    FOR EVENT <event_name> OF <class_name>.
    
    与类的方法类似,事件可以有参数接口,但它只有输出参数。输出参数通过 RAISE EVENT 语句传递到事件处理程序方法,该语句接收它们作为输入参数。通过使用 SET HANDLER 语句,事件在程序中动态链接到其处理程序方法。
    当事件被触发时,应该在所有处理类中执行适当的事件处理程序方法。
  • 例子

    
    REPORT ZEVENT1. 
    CLASS CL_main DEFINITION. 
    PUBLIC SECTION. 
    DATA: num1 TYPE I. 
    METHODS: PRO IMPORTING num2 TYPE I. 
    EVENTS: CUTOFF. 
    ENDCLASS. 
    CLASS CL_eventhandler DEFINITION. 
    PUBLIC SECTION. 
    METHODS: handling_CUTOFF FOR EVENT CUTOFF OF CL_main. 
    ENDCLASS. 
    START-OF-SELECTION. 
    DATA: main1 TYPE REF TO CL_main. 
    DATA: eventhandler1 TYPE REF TO CL_eventhandler. 
    CREATE OBJECT main1. 
    CREATE OBJECT eventhandler1. 
    SET HANDLER eventhandler1→handling_CUTOFF FOR main1. 
    main1→PRO( 4 ).
    CLASS CL_main IMPLEMENTATION.
    METHOD PRO.
    num1 = num2.
    IF num2 ≥ 2. 
    RAISE EVENT CUTOFF.
    ENDIF. 
    ENDMETHOD.
    ENDCLASS.
    CLASS CL_eventhandler IMPLEMENTATION.
    METHOD handling_CUTOFF.
    WRITE: 'Handling the CutOff'. 
    WRITE: / 'Event has been processed'. 
    ENDMETHOD. ENDCLASS.
    
    上面的代码产生以下输出 -
    
    Handling the CutOff 
    Event has been processed