Sap-abap-object-events

提供:Dev Guides
移動先:案内検索

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