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 CutOffEvent has been processed