Учебники

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 eventhandler1handling_CUTOFF FOR main1. 
main1PRO( 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.

Приведенный выше код производит следующий вывод —