Событие — это набор результатов, определенных в классе, для запуска обработчиков событий в других классах. Когда событие инициируется, мы можем вызвать любое количество методов обработчика событий. Связь между триггером и его методом-обработчиком фактически определяется динамически во время выполнения.
При обычном вызове метода вызывающая программа определяет, какой метод объекта или класса необходимо вызвать. Поскольку метод фиксированного обработчика не регистрируется для каждого события, в случае обработки события метод обработчика определяет событие, которое должно быть инициировано.
Событие класса может вызвать метод-обработчик события того же класса с помощью инструкции 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.
Приведенный выше код производит следующий вывод —