Synchronisation der Automation Queue
Einsatzmöglichkeiten
Bei der Kommunikation zwischen dem OO Control Framework und dem Automation Server spielt die Automation Queue eine zentrale Rolle. In ihr werden die Automation-Aufrufe gepuffert und zu speziellen Synchronisationszeitpunkten vom Backend an das Frontend übertragen. Nach Abarbeiten der Automation Queue am Frontend wird dann das Resultat an das Backend zurückgeschickt.
Die Anzahl der Synchronisationszeitpunkte ist entscheidend für die Performance der Anwendung. Informationen dazu bieten Ihnen der Automation Trace und der Performance-Monitor. Beide Werkzeuge werden in
Services rund um die Automation Queue beschrieben.Ablauf
Die Synchronisation der Automation Queue wird zu bestimmten Zeitpunkten automatisch vom System durchgeführt:
Die Synchronisation durch das System erfolgt erst nach dem Feldtransport zum Dynpro. Daher können Ergebnisse aus Methodenaufrufen, die durch die automatische Synchronisation abgearbeitet werden, nicht auf dem Dynpro angezeigt werden.
Weiterhin können Sie die Synchronisation auch explizit anstoßen. Dazu steht Ihnen die Methode
flush der Klasse CL_GUI_CFW zur Verfügung.Durch geeignete Programmierung können Sie die letzte explizite Synchronisation durch das System implizit durchführen lassen.
Arbeiten mit gepufferten Operationen zur Performance-Optimierung
Die Performance kann anhand eines einfachen Schemas generell optimiert werden. Hierzu sollten hinsichtlich der Ablauflogik am Backend, also pro PBO- / PAI-Schritt, die Aufrufe an alle vorhandenen Controls zweigeteilt werden:
Somit werden nur zwei Synchronisationszeitpunkte für alle Controls zusammen benötigt. Es kann allerdings sein, daß es mehrere Abschnitte "Holen von Eigenschaften der Controls" geben muß. Dies ist dann erforderlich, wenn erst nach Besorgen einer Information entschieden werden kann, welche Information noch besorgt werden muß.
Wiederverwenden von Werten in der Queue
Wenn Sie eine Methode aufrufen, die Ergebnisse zurückliefert, können Sie die erhaltenen Werte in einem nachfolgenden Methodenaufruf innerhalb derselben Queue verwenden, ohne die Queue zu synchronisieren. Einzige Voraussetzung dafür ist, daß die Parameter dieselbe ABAP-Variable verwenden.
Gepuffertes Holen von Control-Eigenschaften
Beim gepufferten Holen von Control-Eigenschaften ist folgendes zu beachten: Die Adressen der ABAP-Variablen, in welche die zu holenden Werte geschrieben werden sollen, werden in der Automation Queue vermerkt. Die Wertübergabe an die Variablen erfolgt erst beim Synchronisationszeitpunkt. Bis zu diesem Zeitpunkt müssen die Adressen dieser Variablen gültig sein. Ist eine lokale Variable nicht mehr vorhanden (z.B. lokale Variable einer Formroutine), löst die Synchronisation einen Laufzeitfehler aus. Die Tücke eines solchen Fehlers besteht darin, daß im Debugger mit der Einstellung Automation Controller: Aufträge immer synchron verarbeiten kein Fehler auftritt.
Der sicherste Weg, mit zurückgelieferten Werten zu arbeiten, ist die Verwendung von Objektattributen, da eine Instanz eines Objekts solange sichtbar bleibt, wie eine Referenzvariable auf sie zeigt.
Sicherheit bringt die Abfrage von Control-Eigenschaften in einer Formroutine, die am Ende und bei jedem EXIT eine Synchronisation durchführt.
Beim Auswerten von Ereignissen macht es Sinn, sich die Eigenschaften des auslösenden Controls im Ereignisbehandler zu holen und die Automation Queue danach zu synchronisieren.
(Pseudo-Syntax): Der selektierte Knoten eines Tree Controls und der selektierte Text eines TextEdit Controls sollen gelesen werden:
FORM GET_CONTROL_PROPERTIES.