SAP ABAP - Eventos de Objeto

A eventé um conjunto de resultados que são definidos em uma classe para acionar os manipuladores de eventos em outras classes. Quando um evento é disparado, podemos chamar qualquer número de métodos manipuladores de eventos. O link entre um gatilho e seu método de tratamento é decidido dinamicamente em tempo de execução.

Em uma chamada de método normal, um programa de chamada determina qual método de um objeto ou classe precisa ser chamado. Como o método de tratamento fixo não é registrado para todos os eventos, no caso de tratamento de eventos, o método de tratamento determina o evento que precisa ser disparado.

Um evento de uma classe pode disparar um método manipulador de eventos da mesma classe usando a instrução RAISE EVENT. Para um evento, o método do manipulador de eventos pode ser definido na mesma classe ou em classes diferentes usando a cláusula FOR EVENT, conforme mostrado na seguinte sintaxe -

FOR EVENT <event_name> OF <class_name>.

Semelhante aos métodos de uma classe, um evento pode ter interface de parâmetro, mas possui apenas parâmetros de saída. Os parâmetros de saída são passados ​​para o método manipulador de eventos pela instrução RAISE EVENT que os recebe como parâmetros de entrada. Um evento é vinculado ao seu método manipulador dinamicamente em um programa usando a instrução SET HANDLER.

Quando um evento é disparado, os métodos de tratamento de eventos apropriados devem ser executados em todas as classes de tratamento.

Exemplo

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.

O código acima produz a seguinte saída -

Handling the CutOff 
Event has been processed