SAP ABAP - 对象事件



事件是在类中定义的一组结果,用于触发其他类中的事件处理程序。当触发事件时,我们可以调用任意数量的事件处理程序方法。触发器与其处理程序方法之间的链接实际上是在运行时动态确定的。

在正常的调用方法中,调用程序确定需要调用哪个对象或类的哪个方法。由于并非为每个事件注册固定的处理程序方法,因此在事件处理的情况下,处理程序方法确定需要触发的事件。

类的事件可以通过使用 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
广告