Erzeugung von Ereignissen über
ABAP-Klassen
Sie müssen sicherstellen, dass das Ereignis beim Eintreten der Zustandsänderung ausgelöst wird. Dafür kann es notwendig sein, das Ereignis mit Hilfe einer Methode einer ABAP-Klasse in Ihrem Programm auszulösen.
Beachten Sie, dass die Ereignisse etwas über tatsächlich erfolgte Zustandsänderungen an Objekten aussagen. Stellen Sie deshalb sicher, dass das Ereignis erst erzeugt wird, wenn auch die entsprechende Zustandsänderung eingetreten ist. Dazu soll der Aufruf einer Methode zum Erzeugen eines Ereignisses in derselben logical unit of work (LUW) erfolgen, in der auch die Zustandsänderung vorgenommen wird.
Die hier beschriebene Ereignisauslösung bezieht sich auf Ereignisse, die durch den Ereignismanager verarbeitet werden. Diese Ereignisse müssen mit Hilfe der ABAP-Klasse CL_SWF_EVT_EVENT ausgelöst werden.
Wird ein Ereignis mit folgendem ABAP Objects Befehl ausgelöst, hat dies für den Ereignismanager keine Bedeutung:
RAISE EVENT <evt> EXPORTING... <ei> = <f i>...
In der Ereignisbehandlermethode kann jedoch wiederum das Ereignis für
den Ereignismanager, mit Hilfe der ABAP-Klasse CL_SWF_EVT_EVENTausgelöst werden. Siehe auch:
ABAP Objects ->
Ereignisse auslösen und behandeln.
Implementierungsbeispiele finden Sie in der Demo-Klasse: CL_SWF_FORMABSENC. Sie können das Ereignis mit einer statischen Methode (Methode: DELETE der Demo-Klasse) oder mit einer Instanzmethode (Methode: UPDATE der Demo-Klasse) auslösen.
Die interne Abarbeitung ist unter Erzeugung von Ereignissen über Funktionsbausteinaufruf beschrieben. Die ABAP-Klasse CL_SWF_EVT_EVENT besitzt zwei Methoden RAISE und RAISE_IN_UPDATE_TASK, die sich synonym zu den Funktionsbausteinen SWE_EVENT_CREATE und SWE_EVENT_CREATE_FOR_UPD_TASK verhalten.

Es ist keine Aussage darüber möglich, ob der Verbraucher erfolgreich war. Weitere Informationen finden Sie unter Auswertung und Pflege der Typkopplungen.

Achten Sie darauf, dass Sie erst die Datenbankänderungen schreiben, dann die Methode zur Ereignisauslösung aufrufen und anschließend ein COMMIT WORK durchführen. Eine andere Reihenfolge kann dazu führen, dass Objektdaten im Container nicht vorhanden sind oder einen falschen Inhalt haben.
Unabhängig davon, ob das Ereignis über eine statische Methode oder eine Instanzmethode ausgelöst wird, müssen folgende Parameter versorgt werden (siehe auch: Demo-Klasse):
|
Importparameter |
Typ |
Bedeutung |
|
im_objcateg |
SWF_CLSTYP |
Workflow Objekttyp: · MC_OBJCATEG_CL (Konstante der Klasse CL_SWF_EVT_EVENT) für eine ABAP-Klasse · MC_OBJCATEG_BOR (Konstante der Klasse CL_SWF_EVT_EVENT) für ein BOR Objekt |
|
im_objtype |
C |
Name des Objekttyps, Name ABAP-Klasse |
|
im_event |
C |
Name des Ereignisses |
|
im_objkey |
C |
Objektschlüssel |
Für das Setzen der Ereignisparameter wird das Interface IF_SWF_IFS_PARAMETER_CONTAINER verwendet, über deren SET-Methode können Sie die entsprechenden Parameter setzen.
Über die TRY ... ENDTRY Anweisung fangen Sie die Ausnahmen cx_swf_evt_execption (Fehler bei der Ereigniserzeugung) und cx_swf_cnt_container (Fehler beim Setzen eines Parameters) ab.

Da der asynchrone RFC für den Aufruf des Verbraucherfunktionsbausteins erst nach dem nächsten COMMIT WORK ausgelöst wird, müssen Sie, damit die Ereignisse auch tatsächlich erzeugt werden, in Ihrer Anwendung nach dem Aufruf der Methode zum Erzeugen eines Ereignisses den Befehl COMMIT WORK absetzen.
Der Datenbank-Commit, der beim Bildwechsel automatisch durchgeführt wird, führt nicht zum Auslösen des asynchronen RFC.