SAP ABAP – 对象事件
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