SAP ABAP-개체 이벤트

event다른 클래스의 이벤트 핸들러를 트리거하기 위해 클래스에 정의 된 결과 세트입니다. 이벤트가 트리거되면 원하는 수의 이벤트 핸들러 메서드를 호출 할 수 있습니다. 트리거와 처리기 메서드 간의 링크는 실제로 런타임에 동적으로 결정됩니다.

일반적인 메서드 호출에서 호출 프로그램은 호출해야하는 개체 또는 클래스의 메서드를 결정합니다. 이벤트마다 고정 핸들러 메서드가 등록되어 있지 않으므로 이벤트 핸들링의 경우 핸들러 메서드가 트리거해야 할 이벤트를 결정합니다.

한 클래스의 이벤트는 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