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