OOPS ABAP: EVENTS with Example
Events: Method of one class can call the method of another
class.
Triggering Method: This method raises the event.
Event Handler Method: The method will handle the event.
Register the event handler method using SET HANDLER statement.
CLASS class1.
METHOD DISPLAY
ENDCLASS.
---------------------------------------
CLASS CLASS2.
METHOD MESSAGE.
ENDCLASS.
Syntax for event handler:
SET HANDLER lo_object1 -> event_handler for lo_object2.
where lo_object1 -> class object in which event handler method is defined.
EVENT_HANDLER -> Event handler method name.
lo_object2 -> class object in which triggering method is defined.
Example
*&---------------------------------------------------------------------*
*& Report ZVB_EVENTS
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zvb_events.
PARAMETERS: p_vbeln TYPE vbeln_va.
DATA:it_vbak TYPE ztt_vbak, "Table type
is_vbak TYPE zst_vbak. "Global structure
CLASS class1 DEFINITION.
PUBLIC SECTION.
METHODS display IMPORTING pp_vbeln TYPE vbeln_va
EXPORTING pt_vbak TYPE ztt_vbak. "Table type
EVENTS: no_input.
ENDCLASS.
CLASS class1 IMPLEMENTATION.
METHOD display. "Triggering method
IF pp_vbeln IS INITIAL.
RAISE EVENT no_input.
ELSE.
SELECT vbeln erdat erzet
FROM vbak
INTO TABLE pt_vbak
WHERE vbeln = pp_vbeln.
ENDIF.
ENDMETHOD.
ENDCLASS.
CLASS class2 DEFINITION.
PUBLIC SECTION.
METHODS message FOR EVENT no_input OF class1.
ENDCLASS.
CLASS class2 IMPLEMENTATION.
METHOD message. " Event handler method
WRITE: 'No data avilable for the input'.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA:lo_object1 TYPE REF TO class1,
lo_object2 TYPE REF TO class2.
CREATE OBJECT lo_object1.
CREATE OBJECT lo_object2.
*Registering the event handler method
SET HANDLER lo_object2->message FOR lo_object1.
lo_object1->display( EXPORTING
pp_vbeln = p_vbeln
IMPORTING
pt_vbak = it_vbak ).
IF it_vbak IS NOT INITIAL.
LOOP AT it_vbak INTO is_vbak.
WRITE: / is_vbak-vbeln,
10 is_vbak-erdat,
25 is_vbak-erzet.
ENDLOOP.
ENDIF.
Output:
1. If p_vbeln is initial.
Comments
Post a Comment