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
廣告