SAP ABAP 对象事件

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

在普通方法调用中,调用程序确定需要调用对象或类的哪个方法。由于没有为每个事件注册固定处理程序方法,在事件处理的情况下,处理程序方法确定需要触发的事件。

类的事件可以使用 RAISE EVENT 语句触发同一类的事件处理程序方法。对于事件,可以使用 FOR EVENT 子句在相同或不同的类中定义事件处理程序方法,如以下语法所示:

  1. FOR EVENT <event_name> OF <class_name>.

与类的方法类似,事件可以有参数接口,但它只有输出参数。输出参数通过 RAISE EVENT 语句传递给事件处理程序方法,该语句将输出参数作为输入参数接收。通过使用 SET HANDLER 语句,事件在程序中动态链接到其处理程序方法。

触发事件时,应在所有处理类中执行适当的事件处理程序方法。


实例

  1. REPORT ZEVENT1.
  2. CLASS CL_main DEFINITION.
  3. PUBLIC SECTION.
  4. DATA: num1 TYPE I.
  5. METHODS: PRO IMPORTING num2 TYPE I.
  6. EVENTS: CUTOFF.
  7. ENDCLASS.
  8. CLASS CL_eventhandler DEFINITION.
  9. PUBLIC SECTION.
  10. METHODS: handling_CUTOFF FOR EVENT CUTOFF OF CL_main.
  11. ENDCLASS.
  12. START-OF-SELECTION.
  13. DATA: main1 TYPE REF TO CL_main.
  14. DATA: eventhandler1 TYPE REF TO CL_eventhandler.
  15. CREATE OBJECT main1.
  16. CREATE OBJECT eventhandler1.
  17. SET HANDLER eventhandler1handling_CUTOFF FOR main1.
  18. main1PRO( 4 ).
  19. CLASS CL_main IMPLEMENTATION.
  20. METHOD PRO.
  21. num1 = num2.
  22. IF num2 2.
  23. RAISE EVENT CUTOFF.
  24. ENDIF.
  25. ENDMETHOD.
  26. ENDCLASS.
  27. CLASS CL_eventhandler IMPLEMENTATION.
  28. METHOD handling_CUTOFF.
  29. WRITE: 'Handling the CutOff'.
  30. WRITE: / 'Event has been processed'.
  31. ENDMETHOD. ENDCLASS.

结果如下:

  1. Handling the CutOff
  2. Event has been processed