Ich habe ein Dynpro auf dem dem Benutzer mehrere Informationen angezeigt werden. Über eine Funktion auf dem Dynpro kann der Benutzer die Daten immer wieder selbst aktualisieren lassen.
Allerdings möchte ich auch, dass sobald sich etwas an den Daten ändert ein Ereignis (AOO) ausgelöst wird, dass das Dynpro automatisch aktualisiert. Das Ereignis würde ein anderes Programm auslösen. Bei Shared Objects ist es leider nicht möglich ein Ereignis zu werfen. Existiert eine andere Möglichkeit?
Oder kann man eine GUI-Funktion in einem anderen Programm ausführen lassen?
Das ist schlecht, da das Ereignis (AOO) synchron ausgewertet wird. In dieser Zeit kann der Benutzer keine Aktion ausführen. Wenn dies je Sekunde der Fall ist, wirkt es ziemlich störend auf den Benutzer.
Der Benutzer wird nun zwar nicht mehr durch die permanente Sanduhr gestört, doch durch die asynchrone Verarbeitung führt dazu, dass die Funktion SAPGUI_SET_FUNCTIONCODE ins Nirvana geht; und somit kein neuer PBO Durchlauf angestartet wird.
Da ich nicht davon ausgehe, dass es einen Kunstgriff gibt mit dem man vom asynchronen zurück ins synchrone Verarbeiten wechseln kann, werde ich meine letzte Idee umsetzen.
Und warum kommst du nicht mehr in die synchrone Verarbeitung zurück. Das bewirkt doch grade die Subroutine,die ja nun zum aufgerufenen Prog gehört - also zum synchronen Teil des Programm.
Und hier kannst du doch nun einen neuen Funktionscode setzen (z.B. mit cl_gui_cfw=>set_new_ok_code oder so ähnlich )
Auch mit diesem Methodenaufruf funktioniert es nicht...allerdings liefert diese über den RC einen weiteren Anhaltspunkt.
RC: -102
Ursache: Im Methodenaufruf werden die aktuellen Events mittels
get_current_event ermittelt. Hier werden keine gefunden...weshalb das Event nicht ausgelöst werden kann.
Ruft man eine weitere Methode der Klasse auf (GET_LIVING_DYNPRO_CONTROLS) dann sucht diese im Programm SAPMSSY7 (Scheduler) und auf dem Dynpro 3001 (Empfang von asynchr. RFC-Daten.)...
...bei der Methode get_current_event wird ebenfalls in diesem Programm gesucht. Ruft man die LIVINING_CONTROLS an einer anderen Stelle im Programm auf, dann sucht sie korrekt im Z-Programm.
Meinem Verständis nach läuft das Unterprogramm, das nach dem asynchronen Durchlauf des FuBa, durchlaufen wird ebenfalls synchron asynchron. Wenn ich die Hilfe diesbezüglich richtig interpretiere, soll der Zusatz dazu genutzt werden um auf Fehler bzw. Ergebnisse reagieren zu können (aber nicht synchron, sondern zu einem späteren ausgewählten Zeitpunkt; z. B. Benutzeraktion).