SAPABAP-オブジェクトイベント

アン event他のクラスのイベントハンドラーをトリガーするためにクラスで定義される結果のセットです。イベントがトリガーされると、任意の数のイベントハンドラーメソッドを呼び出すことができます。トリガーとそのハンドラーメソッド間のリンクは、実際には実行時に動的に決定されます。

通常のメソッド呼び出しでは、呼び出し側プログラムが、オブジェクトまたはクラスのどのメソッドを呼び出す必要があるかを判別します。固定ハンドラーメソッドはすべてのイベントに登録されるわけではないため、イベント処理の場合、ハンドラーメソッドはトリガーする必要のあるイベントを決定します。

クラスのイベントは、RAISE EVENTステートメントを使用して、同じクラスのイベントハンドラーメソッドをトリガーできます。イベントの場合、次の構文に示すように、FOR EVENT句を使用して、同じクラスまたは異なるクラスでイベントハンドラメソッドを定義できます。

FOR EVENT <event_name> OF <class_name>.

クラスのメソッドと同様に、イベントにはパラメーターインターフェイスを含めることができますが、出力パラメーターのみがあります。出力パラメーターは、入力パラメーターとして受け取るRAISEEVENTステートメントによってイベントハンドラーメソッドに渡されます。イベントは、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