SAP ABAP - Eventi oggetto

Un eventè un insieme di risultati definiti in una classe per attivare i gestori di eventi in altre classi. Quando viene attivato un evento, possiamo chiamare un numero qualsiasi di metodi del gestore di eventi. Il collegamento tra un trigger e il relativo metodo del gestore viene effettivamente deciso dinamicamente in fase di esecuzione.

In una normale chiamata al metodo, un programma chiamante determina quale metodo di un oggetto o di una classe deve essere chiamato. Poiché il metodo del gestore fisso non viene registrato per ogni evento, in caso di gestione degli eventi, il metodo del gestore determina l'evento che deve essere attivato.

Un evento di una classe può attivare un metodo del gestore eventi della stessa classe utilizzando l'istruzione RAISE EVENT. Per un evento, il metodo del gestore di eventi può essere definito nella stessa classe o in una classe diversa utilizzando la clausola FOR EVENT, come mostrato nella sintassi seguente:

FOR EVENT <event_name> OF <class_name>.

Simile ai metodi di una classe, un evento può avere un'interfaccia con parametri ma ha solo parametri di output. I parametri di output vengono passati al metodo del gestore eventi dall'istruzione RAISE EVENT che li riceve come parametri di input. Un evento è collegato dinamicamente al relativo metodo del gestore in un programma utilizzando l'istruzione SET HANDLER.

Quando viene attivato un evento, si suppone che i metodi appropriati del gestore di eventi vengano eseguiti in tutte le classi di gestione.

Esempio

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.

Il codice precedente produce il seguente output:

Handling the CutOff 
Event has been processed