SAP ABAP - События объекта

An 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