Hallo,
ich habe zwei Funktionsbausteine, die über die Nachrichtensteuerung beim Anlegen einer Bestellung ausgeführt werden.
Zur korrekten Ausführung muesste zuerst FB "A" laufen und anschliessend FB "B". Diese Steuerung kann ich aber nicht beeinflussen.
Nun habe ich versucht über die Ereignissteuerung einer Klasse dieses Problem in den Griff zu bekommen. Dazu habe ich eine statische Methode definiert die den Befehl "raise event" enthält und vom FB "A" ausgeführt wird. Zudem habe ich in der Klasse ein statisches Ereignis festgelegt. Läuft nun zuerst der FB "B" an, wird der Befehl "set handler" ausgeführt, der das Ereignis registriert. Wenn dann der FB "A" das Ereignis auslöst hatte ich gehofft, dass nun das registrierte Ereignis behandelt wird. Nur leider tut es das nicht. Ich hoffe, dass mir jemand einen guten Tipp geben kann.
leider geht es aus Deinem Posting nicht hervor: Hast Du auch den Verbraucher des Ereignisses programmiert? Dass das Ereignis nur ausgelöst wird, reicht nicht.
leider gibt es zwei verschiedene Sachverhalten, die im SAP mit "EVENT" bezeichnet werden.
Zum einen sind es die Events, die man auslösen kann und wo dann ein Workflow oder ein Job "losrennt".
Das andere sind events im Abap-OO. (Die haben nichts mit den "System-Events" zu tun.)
Die Events im OO werden von einer Klasse bzw. einem Objekt "angeboten". Für dieses "Angebot" kann sich eine vollkommen fremde Methode eines anderen OO-Objektes (Klasse) "registrieren" lassen. Wenn dann die ursprüngliche Klasse oder das Objekt den Event "hochschmeißt" laufen alle registrierten Prozeduren los.
Aber nochmal, diese Events gelten nur in einem bestimmten Programmkontext für alle aufgerufenen Programme/Subroutinen oder alle "anwesenden" und erzeugten Objekte.
Andere Dinge, Nachrichtensteuerung oder Jobs reagieren darauf nicht.
Wie wäre folgende Idee zum ursprüngliche Problem:
Auf das eigentliche Ereignis reagiert nur Funktionsbaustein A. Wenn der fertig ist, löst er ein weiteres Ereignis aus, auf das dann Funktionsbaustein B reagiert. (Wäre dann zumindest in der richtigen Reihenfolge ...).