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