SAP ABAP - Evénements d'objets

Un eventest un ensemble de résultats définis dans une classe pour déclencher les gestionnaires d'événements dans d'autres classes. Lorsqu'un événement est déclenché, nous pouvons appeler n'importe quel nombre de méthodes de gestion d'événements. Le lien entre un déclencheur et sa méthode de gestion est en fait décidé de manière dynamique au moment de l'exécution.

Dans un appel de méthode normal, un programme appelant détermine quelle méthode d'un objet ou d'une classe doit être appelée. Comme la méthode de gestionnaire fixe n'est pas enregistrée pour chaque événement, en cas de gestion d'événements, la méthode de gestionnaire détermine l'événement qui doit être déclenché.

Un événement d'une classe peut déclencher une méthode de gestionnaire d'événements de la même classe à l'aide de l'instruction RAISE EVENT. Pour un événement, la méthode du gestionnaire d'événements peut être définie dans la même classe ou dans une classe différente à l'aide de la clause FOR EVENT, comme indiqué dans la syntaxe suivante -

FOR EVENT <event_name> OF <class_name>.

Semblable aux méthodes d'une classe, un événement peut avoir une interface de paramètres mais il n'a que des paramètres de sortie. Les paramètres de sortie sont transmis à la méthode du gestionnaire d'événements par l'instruction RAISE EVENT qui les reçoit en tant que paramètres d'entrée. Un événement est lié dynamiquement à sa méthode de gestionnaire dans un programme à l'aide de l'instruction SET HANDLER.

Lorsqu'un événement est déclenché, les méthodes de gestion d'événements appropriées sont supposées être exécutées dans toutes les classes de gestion.

Exemple

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.

Le code ci-dessus produit la sortie suivante -

Handling the CutOff 
Event has been processed