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.
📝 输出结果
1 2
Handling the CutOff Event has been processed
🔍 代码解析
graph TB
A[cl_main.pro] -->|触发| B[cutoff事件]
B -->|处理| C[cl_eventhandler.handling_cutoff]
B -->|条件| D[num2 >= 2]
对象创建:创建了主类和事件处理类的实例
事件绑定:使用 SET HANDLER 将处理程序与主类实例绑定
方法调用:调用主类的 pro 方法,传入值 4
条件判断:当值 >= 2 时,触发 cutoff 事件
事件处理:执行绑定的处理程序方法
🔧 事件特性
1. 参数传递
类似于类的方法,事件可以有参数接口,但它只有输出参数。
1 2 3 4 5
EVENTS: data_changed EXPORTING changed_data TYPE any old_value TYPE any new_value TYPE any.
2. 动态绑定
事件通过使用 SET HANDLER 语句在程序中动态链接到其处理程序方法。
1 2
SET HANDLER handler1->method1 FOR instance1. SET HANDLER handler2->method2 FOR instance1.
3. 多监听支持
一个事件可以绑定多个处理程序:
1 2 3 4 5
DATA: handler1 TYPE REF TO cl_handler1, handler2 TYPE REF TO cl_handler2.
SET HANDLER handler1->process FOR main_instance. SET HANDLER handler2->process FOR main_instance.
🎯 使用场景
1. UI事件处理
1 2 3 4 5 6 7 8 9 10
CLASS cl_controller DEFINITION. PUBLIC SECTION. EVENTS: button_clicked EXPORTING button_id TYPE string. METHODS: handle_button_click. ENDCLASS.
CLASS cl_ui DEFINITION. PUBLIC SECTION. METHODS: update_display FOR EVENT button_clicked OF cl_controller. ENDCLASS.
2. 数据变更通知
1 2 3 4 5 6 7 8 9 10 11 12 13 14
CLASS cl_data_store DEFINITION. PUBLIC SECTION. EVENTS: data_changed EXPORTING field_name TYPE string old_value TYPE any new_value TYPE any. METHODS: set_value IMPORTING value TYPE any. ENDCLASS.
CLASS cl_audit_log DEFINITION. PUBLIC SECTION. METHODS: log_change FOR EVENT data_changed OF cl_data_store. ENDCLASS.
3. 工作流处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
CLASS cl_workflow DEFINITION. PUBLIC SECTION. EVENTS: task_completed EXPORTING task_id TYPE string result TYPE any. METHODS: execute_task IMPORTING task_id TYPE string. ENDCLASS.
CLASS cl_notification DEFINITION. PUBLIC SECTION. METHODS: send_notification FOR EVENT task_completed OF cl_workflow. ENDCLASS.
CLASS cl_audit DEFINITION. PUBLIC SECTION. METHODS: audit_task FOR EVENT task_completed OF cl_workflow. ENDCLASS.