This section contains explains how to work with events in ABAP Objects. For precise details of the relevant ABAP statements, refer to the corresponding keyword documentation in the ABAP Editor.
Triggering Events
To trigger an event, a class must
Declare the event in its declaration part
Trigger the event in one of its methods
Declaring Events
You declare events in the declaration part of a class or in an interface. To declare instance events, use the following statement:
EVENTS
To declare static events, use the following statement:
CLASS-EVENTS
Both statements have the same syntax.
When you declare an event, you can use the EXPORTING addition to specify parameters that are passed to the event handler. The parameters are always passed by value. Instance events always contain the implicit parameter SENDER, which has the type of a reference to the type or the interface in which the event is declared.
Triggering Events
An instance event in a class can be triggered by any method in the class. Static events can be triggered by any static method. To trigger an event in a method, use the following statement:
RAISE EVENT
For each formal parameter
Handling Events
Events are handled using special methods. To handle an event, a method must
be defined as an event handler method for that event
be registered at runtime for the event.
Declaring Event Handler Methods
Any class can contain event handler methods for events from other classes. You can, of course, also define event handler methods in the same class as the event itself. To declare an event handler method, use the following statement:
METHODS
for an instance method. For a static method, use CLASS-METHODS instead of METHODS.
The interface of an event handler method may only contain formal parameters defined in the declaration of the event
If you declare an event handler method in a class, it means that the instances of the class or the class itself are, in principle, able to handle an event
Registering Event Handler Methods
To allow an event handler method to react to an event, you must determine at runtime the trigger to which it is to react. You can do this with the following statement:
SET HANDLER…
… [FOR]…
It links a list of handler methods with corresponding trigger methods. There are four different types of event.
It can be
An instance event declared in a class
An instance event declared in an interface
A static event declared in a class
A static event declared in an interface
The syntax and effect of the SET HANDLER depends on which of the four cases listed above applies.
For an instance event, you must use the FOR addition to specify the instance for which you want to register the handler. You can either specify a single instance as the trigger, using a reference variable :
SET HANDLER…
It links a list of handler methods with corresponding trigger methods. There are four different types of event.
It can be
An instance event declared in a class
An instance event declared in an interface
A static event declared in a class
A static event declared in an interface
The syntax and effect of the SET HANDLER depends on which of the four cases listed above applies.
For an instance event, you must use the FOR addition to specify the instance for which you want to register the handler. You can either specify a single instance as the trigger, using a reference variable :
SET HANDLER…
…FOR .
or you can register the handler for all instances that can trigger the event:
SET HANDLER…or you can register the handler for all instances that can trigger the event:
SET HANDLER…
…FOR ALL INSTANCES.
The registration then applies even to triggering instances that have not yet been created when you register the handler.
You cannot use the FOR addition for static events:
SET HANDLER…The registration then applies even to triggering instances that have not yet been created when you register the handler.
You cannot use the FOR addition for static events:
SET HANDLER…
…
The registration applies automatically to the whole class, or to all of the classes that implement the interface containing the static event. In the case of interfaces, the registration also applies to classes that are not loaded until after the handler has been registered.
Timing of Event Handling
After the RAISE EVENT statement, all registered handler methods are executed before the next statement is processed (synchronous event handling). If a handler method itself triggers events, its handler methods are executed before the original handler method continues. To avoid the possibility of endless recursion, events may currently only be nested 64 deep.
Handler methods are executed in the order in which they were registered. Since event handlers are registered dynamically, you should not assume that they will be processed in a particular order. Instead, you should program as though all event handlers will be executed simultaneously.
The registration applies automatically to the whole class, or to all of the classes that implement the interface containing the static event. In the case of interfaces, the registration also applies to classes that are not loaded until after the handler has been registered.
Timing of Event Handling
After the RAISE EVENT statement, all registered handler methods are executed before the next statement is processed (synchronous event handling). If a handler method itself triggers events, its handler methods are executed before the original handler method continues. To avoid the possibility of endless recursion, events may currently only be nested 64 deep.
Handler methods are executed in the order in which they were registered. Since event handlers are registered dynamically, you should not assume that they will be processed in a particular order. Instead, you should program as though all event handlers will be executed simultaneously.