
Ereignisse eines Controls, die der Benutzer am Frontend auslöst, werden am Backend über die Ereignisverarbeitung von ABAP Objects verarbeitet. Dazu müssen Sie für jedes Ereignis, auf das Sie reagieren möchten, eine Ereignisbehandlermethode implementieren.
Definieren Sie eine lokale Klasse vor dem Ereignis START-OF-SELECTION. Implementieren Sie für diese Klasse eine Methode, die beim Ereignis DBLCLICK aufgerufen wird. Die Methode gibt lediglich den Ereignistyp über ein Textelement aus:
DATA: EVENT_TYPE(20) TYPE C.
CLASS lcl_event_handler DEFINITION.
PUBLIC SECTION.
CLASS-METHODS: CATCH_DBLCLICK FOR EVENT DBLCLICK OF CL_GUI_TEXTEDIT.
IMPORTING SENDER.
ENDCLASS.
DATA: event_handler TYPE REF TO lcl_event_handler.
CLASS lcl_event_handler IMPLEMENTATION.
METHOD CATCH_DBLCLICK.
event_type = text-002.
ENDMETHOD.
ENDCLASS
Vergessen Sie nicht, für das Textelement text-002 einen Text, zum Beispiel, Doppelklick zu vergeben.
Legen Sie für die Ausgabe des Ereignistyps ein Ein-/Ausgabefeld auf Dynpro 100 an:
Name: EVENT_TYPE
Elementtyp: Ein/Ausgabefeld
Verknüpfen Sie die Methode mit dem Ereignis. Fügen Sie dazu den folgenden Code in den IF-Block des PBO-Moduls ein (das Objekt editor muss schon erzeugt sein):
SET HANDLER lcl_event_handler=>catch_dblclick FOR editor.
Aktivieren und starten Sie Ihr Programm.
Überprüfen Sie Ihre Arbeit
Das Ein-/Ausgabefeld wird bei einem Doppelklick innerhalb des Textfensters nicht aktualisiert. Das ABAP Objects Ereignis wird also noch nicht ausgelöst.
Diskussion
Die Schritte in dieser Übung spiegeln nur die Behandlung eines Ereignisses unter ABAP Objects wider. Die Ereignisbehandlung am Backend ist also beschrieben. Da alle Ereignisse im Initialzustand des Controls vom SAPGUI ausgefiltert werden, kann das ABAP-Ereignis zum Doppelklick aber nicht am Backend ausgelöst werden. Grund hierfür ist die noch fehlende Registrierung des Ereignisses am Frontend (siehe Übung 2: Ein Anwendungs-Ereignis registrieren).
Ereignisparameter sender
„sender“In der Definition der Ereignisbehandlermethode wird der Ereignisparameter sender importiert. Auf diesen Parameter können Sie bei jedem ABAP Objects Ereignis zugreifen, obwohl er im Class Builder nicht als Ereignisparameter aufgeführt ist. Der Parameter importiert eine Referenz auf die Instanz, die das Ereignis ausgelöst hat. Die Referenz kann direkt dazu genutzt werden, um Methoden dieser Instanz aufzurufen.
Die Ereignisbehandlermethode
Definition als statische Methode
In dieser Übung wurde die Ereignisbehandlermethode mit dem Zusatz CLASS als statische Methode der Klasse CL_GUI_TEXTEDIT definiert. Sie brauchen also kein Objekt der Klasse lcl_event_handler instanziieren, um die Methode aufrufen zu können.
Mit SET HANDLER verknüpfen Sie die statische Methode lcl_event_handler=>catch_dblclick mit dem Ereignis DBLCLICK für die Instanz editor. Sie könnten auch noch weitere Instanzen des Textedit Controls erzeugen und mit dieser Methode bei diesem Ereignis verknüpfen. Alle mit SET HANDLER angemeldeten Instanzen benutzen dann die gleiche Methode, die nur einmal zur Laufzeit existiert.
Der Ereignisparameter sender enthält eine Referenz auf die auslösende Instanz, über die Sie Methoden dieser Instanz aufrufen können.
Die Definition der Ereignisbehandlermethode als statische Methode ist also dann sinnvoll, wenn sich alle Instanzen einer Klasse bei einem Ereignis gleich verhalten sollen.
Definition als Instanzen-Methode
Vorteil bei Instanzen-Methoden ist, dass Sie mehrere Objekte Ihrer lokalen Klasse erzeugen können. Dies ist nötig, wenn Sie sich innerhalb der Ereignisbehandlermethode einen Zustand merken möchten (z.B. über eine statische Variable). Arbeiten mehrere Control-Instanzen mit der Methode, kann es bei nur einer Instanz der Ereignisbehandlerklasse zu Konflikten kommen. In einem solchen Fall sollten Sie verschiedene Instanzen-Methoden für verschiedene Control-Instanzen der gleichen Klasse verwenden.