SAP ABAP - Eventos de objetos

Un eventes un conjunto de resultados que se definen en una clase para activar los controladores de eventos en otras clases. Cuando se activa un evento, podemos llamar a cualquier número de métodos de manejo de eventos. El vínculo entre un desencadenante y su método de controlador se decide en realidad de forma dinámica en tiempo de ejecución.

En una llamada a un método normal, un programa de llamada determina qué método de un objeto o una clase debe llamarse. Como el método de controlador fijo no se registra para todos los eventos, en caso de manejo de eventos, el método de controlador determina el evento que debe activarse.

Un evento de una clase puede desencadenar un método controlador de eventos de la misma clase mediante la instrucción RAISE EVENT. Para un evento, el método del controlador de eventos se puede definir en la misma clase o en una clase diferente usando la cláusula FOR EVENT, como se muestra en la siguiente sintaxis:

FOR EVENT <event_name> OF <class_name>.

Similar a los métodos de una clase, un evento puede tener una interfaz de parámetros pero solo tiene parámetros de salida. Los parámetros de salida se pasan al método del controlador de eventos mediante la instrucción RAISE EVENT que los recibe como parámetros de entrada. Un evento está vinculado a su método de controlador de forma dinámica en un programa mediante la instrucción SET HANDLER.

Cuando se desencadena un evento, se supone que los métodos de manejo de eventos apropiados se ejecutan en todas las clases de manejo.

Ejemplo

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.

El código anterior produce la siguiente salida:

Handling the CutOff 
Event has been processed