HELP.BCCIGOF
Release 4.6C
SAP Control Framework SAP AG
Copyright
Weitergabe und Vervielfältigung dieser Publikation oder von Teilen daraus sind, zu welchem
Zweck und in welcher Form
auch immer, ohne die ausdrückliche schriftliche Genehmigung durch SAP AG nicht gestattet. In
dieser Publikation enthaltene Informationen können ohne vorherige Ankündigung geändert
werden.
Die von SAP AG oder deren Vertriebsfirmen angebotenen Software-Produkte können Software-
Komponenten auch anderer Software-Hersteller enthalten.
® ® ® ® ® ® ®
Microsoft , WINDOWS , NT , EXCEL , Word , PowerPoint und SQL Server sind eingetragene
Marken der
Microsoft Corporation.
® ® ® ® ® ® ® ® ®
IBM , DB2 , OS/2 , DB2/6000 , Parallel Sysplex , MVS/ESA , RS/6000 , AIX , S/390 ,
® ® ®
AS/400 , OS/390 und OS/400 sind eingetragene Marken der IBM Corporation.
®
ORACLE ist eine eingetragene Marke der ORACLE Corporation.
® ® TM
INFORMIX -OnLine for SAP und Informix Dynamic Server sind eingetragene Marken der
Informix Software Incorporated.
® ® ® ®
UNIX , X/Open , OSF/1 und Motif sind eingetragene Marken der Open Group.
®
HTML, DHTML, XML, XHTML sind Marken oder eingetragene Marken des W3C , World Wide
Web Consortium,
Massachusetts Institute of Technology.
®
JAVA ist eine eingetragene Marke der Sun Microsystems, Inc.
®
JAVASCRIPT ist eine eingetragene Marke der Sun Microsystems, Inc., verwendet unter der
Lizenz der von Netscape entwickelten und implementierten Technologie.
SAP, SAP Logo, R/2, RIVA, R/3, ABAP, SAP ArchiveLink, SAP Business Workflow, WebFlow,
SAP EarlyWatch, BAPI, SAPPHIRE, Management Cockpit, mySAP.com Logo und mySAP.com
sind Marken oder eingetragene Marken der SAP AG in Deutschland und vielen anderen Ländern
weltweit. Alle anderen Produkte sind Marken oder eingetragene Marken der jeweiligen Firmen.
2 April 2001
SAP AG SAP Control Framework
Symbole
Symbol Bedeutung
Achtung
Beispiel
Empfehlung
Hinweis
Syntax
Tip
April 2001 3
SAP Control Framework SAP AG
Inhalt
4 April 2001
SAP AG SAP Control Framework
clear............................................................................................................................................................. 73
destroy........................................................................................................................................................ 74
get................................................................................................................................................................ 75
get_handle.................................................................................................................................................. 77
modify ......................................................................................................................................................... 78
remove ........................................................................................................................................................ 80
Methoden der Klasse CL_DRAGDROPOBJECT ..................................................................................... 81
set_flavor.................................................................................................................................................... 82
abort ............................................................................................................................................................ 83
April 2001 5
SAP Control Framework SAP AG
SAP Control Framework
Funktionsumfang
Das beschriebene Framework unterstützt Controls (ActiveX und JavaBeans), die innerhalb des
SAP GUI dargestellt werden.
Aus Sicht des Automation Controllers wird hierbei immer nur mit genau einem Control
(SAPGUI.APPLICATION) - dem Automation Controller - kommuniziert, das selbst als Container
für die Custom Controls dient.
Die Steuerung des Automation Controllers aus ABAP geschieht über die Klassen CL_GUI_CFW,
CL_GUI_OBJECT und CL_GUI_CONTROL, die das Erzeugen und Zerstören von Custom
6 April 2001
SAP AG SAP Control Framework
SAP Control Framework
Controls als auch das Setzen und Lesen von deren Eigenschaften und den Aufruf derer
Methoden ermöglichen.
Mit Blick auf die Performance in Client-Server-Umgebungen werden Puffermechanismen über
die Automation Queue unterstützt, mit der eine Serie von Methodenaufrufen zu
unterschiedlichen Instanzen von Custom Controls in einem Kommunikationsschritt zum Frontend
geschickt werden kann.
Die Interpretation von Ereignissen, die auf einem Custom Control ausgelöst werden, erfolgt in
zwei Schritten:
• Ausfiltern der nicht relevanten Ereignisse
• Weiterreichen der relevanten Ereignisse an den Applikationsserver. Ihr ABAP-Programm
erhält dann an definierter Stelle über ein OO-Ereignis die Kontrolle und kann auf das Ereignis
reagieren.
Die Lebensdauer eines Controls wird über das Lifetime Management geregelt. Es baut Controls
automatisch am Frontend ab. Natürlich wird auch ein explizites Abbauen von Controls durch das
Applikationsprogramm unterstützt.
Einschränkungen
Bestimmte Methoden und Ereignisse in einigen Controls werden nicht unter dem SAP GUI for
HTML unterstützt. Andere stehen nur in eingeschränkter Form zur Verfügung. Einzelheiten
hierzu entnehmen Sie der Dokumentation zum jeweiligen Control.
April 2001 7
SAP Control Framework SAP AG
Architektur des Control Frameworks
SAPGUI
Automation Ereignisse Custom Control 1
Controller
Instanzen
Custom Control 2
Automation Queue
OK_CODE GUI-RFC
Applikationsserver
Automation Controller
Der Automation Controller ist die zentrale Instanz auf dem Frontend. Er verwaltet alle Instanzen
der Custom Controls.
Weiterhin enthält der Automation Controller eine Liste der relevanten Ereignisse, die von einem
Custom Control ausgelöst werden können (siehe Ereignisbehandlung [Seite 10]).
Die gesamte Kommunikation zwischen den Controls am Frontend und dem
Applikationsprogramm am Backend läuft über den Automation Controller.
OO Control Framework
Analog zum Automation Controller existiert am Backend das OO Control Framework. Alle
Methodenaufrufe aus einem Applikationsprogramm an ein Custom Control laufen über das
Control Framework. Damit nicht bei jedem Methodenaufruf eine Verbindung zum Frontend
aufgebaut werden muß, werden die Methodenaufrufe in der Automation Queue gepuffert. Erst
beim Synchronisationspunkt wird dann die Automation Queue mit dem Frontend synchronisiert
(Siehe Automation Queue [Seite 31]).
8 April 2001
SAP AG SAP Control Framework
Architektur des Control Frameworks
Das Control Framework besitzt wie auch der Automation Controller eine Liste der relevanten
Control-Ereignisse. In dieser Liste sind zusätzlich die aufzurufenden Behandlermethoden
hinterlegt (siehe Ereignisbehandlung [Seite 10]).
Auch eine Liste der angelegten Control-Instanzen wird im Control Framework gehalten. Diese
Liste dient auch als Grundlage für das Lifetime Management der Controls (siehe Lifetime
Management [Seite 29]).
April 2001 9
SAP Control Framework SAP AG
Ereignisbehandlung
Ereignisbehandlung
Verwendung
Der Benutzer eines Applikationsprogramms kann Ereignisse auf Custom Controls auslösen. Das
Applikationsprogramm bekommt dann die Kontrolle und kann auf das Ereignis reagieren.
Typische Ereignisse sind z.B. Doppelklick und Drag & Drop.
Integration
Wie in Architektur des Control Frameworks [Seite 8] angedeutet, besitzt sowohl der Automation
Controller als auch das OO Control Framework eine Tabelle aller relevanten Control-Ereignisse.
Diese Tabellen müssen vom Applikationsprogramm aufgebaut werden. Die Ereignistabelle am
Frontend besteht aus Control-Instanz und Ereignis, am Backend enthält die Ereignistabelle
zusätzlich die ABAP-Behandlermethode für die Ereignisse.
Der Aufbau der Tabellen erfolgt über eine spezielle Methode des OO Control Frameworks
(control->set_registered_events). Bei der Registrierung des Ereignisses muß die
Applikation festlegen, ob das Ereignis als Systemereignis oder als Applikationsereignis
interpretiert werden soll:
• Systemereignis: Dieses Ereignis wird ausgelöst, bevor die automatische Feldprüfung (z.B.
Mußeingabe) und der Feldtransport durchgeführt werden. Auch PAI und PBO werden nicht
durchlaufen. Daher haben Sie keinerlei Zugriff auf aktuell auf dem Dynpro veränderte Werte.
Es findet auch nach dem Ereignis kein Feldtransport mehr zu dem Dynpro statt. Daher
werden Werte, die Sie aufgrund des Ereignisses verändert haben, nicht auf dem Dynpro
aktualisiert.
Die zum Ereignis definierte Behandlermethode wird automatisch vom System
aufgerufen. Mit der Methode set_new_ok_code [Seite 50] haben Sie allerdings die
Möglichkeit, PAI und PBO auszulösen und einen OK_CODE zu setzen, den Sie dann in
einem PAI-Modul interpretieren können.
• Applikationsereignis: Das Ereignis wird zum Zeitpunkt PAI verarbeitet. Daher wurden alle
Feldprüfungen durchgeführt, und auch der Feldtransport hat stattgefunden. Sofern Sie die
Behandlermethode an einer bestimmten Stelle Ihres Applikationsprogramms aufrufen wollen,
müssen Sie das Ereignis mit der statischen Methode CL_GUI_CFW=>DISPATCH auswerten.
Zum Festlegen der Behandlermethode eines Ereignisses muß das Applikationsprogramm über
das ABAP-Sprachelement SET HANDLER eine Behandlermethode registrieren. Die
Behandlermethode muß in dem Applikationsprogramm als Methode einer (lokalen) Klasse
angelegt werden. Es steht Ihnen frei, die Behandlermethode als Instanzmethode oder statische
Methode anzulegen.
10 April 2001
SAP AG SAP Control Framework
Ereignisbehandlung
SAPGUI
Automation Controller
Ereignisse:
Ereignis Control Control
DoppelKlick Control
Applikationsserver
Funktionsumfang
Wird auf einem Custom Control ein Ereignis ausgelöst, überprüft der Automation Controller, ob
dieses Ereignis in seiner Tabelle registriert wurde. Wurde das Ereignis nicht registriert, wird das
Ereignis vom Automation Controller ignoriert. Wurde es dagegen registriert, generiert der
Automation Controller einen OK_CODE, der an das OO Control Framework weitergeleitet wird.
Je nach Art des Ereignisses wird dann entweder direkt (bei einem Systemereignis) oder nach
Aufruf der statischen Methode CL_GUI_CFW=>DISPATCH (bei einem Applikationsereignis) die
zum Ereignis registrierte Behandlermethode aufgerufen. Dabei wird über den Ereignisparameter
sender die Objektreferenz des Controls, welches das Ereignis ausgelöst hat, an die
Behandlermethode übergeben.
Die statische Methode CL_GUI_CFW=>DISPATCH muß zur Auswertung von
Applikationsereignissen innerhalb der PAI-Module aufgerufen werden.
Der OK_CODE eines Ereignisses wird durch den Aufruf der Methode
CL_GUI_CFW=>DISPATCH "verbraucht". Daher führt ein zweiter Aufruf der Methode
nicht zu einem erneuten Anspringen der Behandlermethode.
Über den Parameter RC der Methode CL_GUI_CFW=>DISPATCH [Seite 47]
erhalten Sie Informationen, ob das Ereignis erfolgreich an eine Behandlermethode
weitergeleitet werden konnte.
April 2001 11
SAP Control Framework SAP AG
Ereignisbehandlung
SAPGUI
Ereignis
Automation Controller DoppelKlick
des Controls
Ereignisse: Control
Ereignis Control Control
DoppelKlick Control
Applikationsserver
12 April 2001
SAP AG SAP Control Framework
Registrieren und Verarbeiten von Ereignissen
Voraussetzungen
Der Ablauf wurde allgemeingültig für alle Custom Controls gehalten. Control-spezifische
Informationen finden Sie in der jeweiligen Dokumentation zu der Control-Verschalung.
Ablauf
1. Es wird davon ausgegangen, daß Sie mit einem Custom Control mit der Verschalung
cl_gui_xyz arbeiten:
DATA my_control TYPE REF TO cl_gui_xyz.
April 2001 13
SAP Control Framework SAP AG
Registrieren und Verarbeiten von Ereignissen
Verfügung gestellt. Der Parameter enthält die Referenz des Controls, das dieses Ereignis
ausgelöst hat.
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS Event_Handler
FOR EVENT event_name OF cl_gui_xyz
IMPORTING event_parameter
sender.
ENDCLASS.
6. Melden Sie jetzt noch für die registrierten Ereignisse Behandlermethoden beim OO Control
Framework an.
DATA event_receiver TYPE REF TO lcl_event_receiver.
CREATE OBJECT event_receiver.
SET HANDLER event_receiver->Event_Handler
FOR my_control.
14 April 2001
SAP AG SAP Control Framework
Kontextmenü
Kontextmenü
Verwendung
Das Kontextmenü (Rechte Maustaste, SHIFT F10) ermöglicht das Anzeigen von
kontextsensitiven Menüs. Der Kontext wird über den Ort definiert, an dem der Benutzer das
Kontextmenü aufgerufen hat
Der Benutzer kann über das Kontextmenü Funktionen auswählen, die für den aktuellen Kontext
relevant sind.
Funktionsumfang
Soll auf einem Custom Controls ein Kontextmenü implementiert werden, muß das Ereignis für
das Anfordern eines Kontextmenüs (Ereignis context_menu) registriert werden. Das Ereignis
für das Auswählen eines Eintrags des Kontextmenüs (Ereignis context_menu_selected) wird
entweder von der Control-Verschalung automatisch registriert (z.B. SAP Tree) oder muß explizit
registriert werden (z.B. SAP Picture).
Fordert der Benutzer auf einem Objekt ein Kontextmenü an, wird über den normalen
Ereignismechanismus [Seite 10] das Anwendungsprogramm aufgerufen. In der
Ereignisbehandlermethode zum Ereignis context_menu erhält das Programm als
Ereignisparameter eine Menüreferenz. Das Programm benutzt diese Menüreferenz, um das
anzuzeigende Menü aufzubauen. Dabei können mit dem Menu Painter definierte Menüs oder
dynamisch aufgebaute Menüs benutzt werden. Nach Verlassen der Ereignisbehandlermethode
wird das Kontextmenü automatisch angezeigt.
Das SAP Picture bildet eine Ausnahme. Hier bekommen Sie keine Menüreferenz als
Ereignisparameter übergeben.
Wird eine Menüfunktion des Kontextmenüs ausgewählt, wird wiederum ein Ereignis ausgelöst,
das an das Applikationsprogramm übergeben wird. Auch auf dieses Ereignis muß die Applikation
eine Behandlermethode registrieren. In der Behandlermethode wird der übergebene
Funktionscode ausgewertet, der über einen Ereignisparameter übergeben wird.
Aktivitäten
• Die Applikation registriert sich mit der Methode set_registered_events [Seite 59] auf das
Ereignis context_menu und auf das Ereignis context_menu_selected. Die
Identifikation des Ereignisses ist von der jeweiligen Control-Verschalung abhängig und wird
in der dazugehörigen Dokumentation beschrieben.
• Weiterhin muß die Applikation Methoden zur Ereignisbehandlung der beiden Ereignisse
definieren.
April 2001 15
SAP Control Framework SAP AG
Kontextmenü
Der SAP Tree bildet eine Ausnahme bei der Registrierung der Ereignisse. Hier muß
nur das Ereignis context_menu registriert werden. Das Ereignis
context_menu_selected wird automatisch von der Control-Verschalung
mitregistriert.
16 April 2001
SAP AG SAP Control Framework
Drag&Drop
Drag&Drop
Verwendung
Mit Drag&Drop kann der Anwender Objekte aus einem Bereich eines Custom Controls (Quelle)
markieren und auf einen anderen Bereich eines Custom Controls (Ziel) fallen lassen. Je nach
Objekt wird dann im zweiten Bereich eine Aktion ausgeführt. Quelle und Ziel können dabei das
gleiche Control oder zwei unterschiedliche Controls sein.
Voraussetzungen
Damit Controls Drag&Drop-fähig sind, muß die Control-Verschalung zusätzliche Drag&Drop-
Ereignisse anbieten. Das Anwendungsprogramm muß für diese Ereignisse Behandlerroutinen
implementieren. Die Registrierung auf die Ereignisse erfolgt automatisch über die jeweilige
Control-Verschalung.
Funktionsumfang
Für jedes beteiligte Custom Control wird das Drag&Drop-Verhalten festgelegt. Je nach Control
wird das Verhalten auf alle Elemente des Controls bezogen (z.B. Editor), oder man kann für
jedes Teilobjekt ein eigenes Verhalten definieren (z.B. Tree). Jedes Verhalten besteht aus einer
oder mehreren Beschreibungen.
Die Beschreibung hat folgende Attribute:
• DragSrc: Objekt ist Quelle eines Drag&Drop-Vorgangs
• DropTarget: Objekt ist Ziel eines Drag&Drop-Vorgangs
• Flavor: Der Flavor beschreibt den Typ einer Drag&Drop-Beschreibung. In einer Drag&Drop-
Situation können Objekte nur in andere fallengelassen werden, wenn sie mindestens eine
gemeinsame Beschreibung besitzen.
• Effect: Beschreibung, ob die Daten beim Drag&Drop-Vorgang kopiert und/oder verschoben
werden können
• Effect_In_Ctrl: Mit welchem Drop-Effekt können Daten innerhalb des gleichen Controls
verschoben oder kopiert werden.
Sobald ein Drag-Ereignis ausgelöst wird, muß die Applikation in der entsprechenden
Behandlermethode feststellen, welches Objekt von dem Ereignis betroffen ist.
Weiterhin muß für das Drop-Ereignis implementiert werden, welche Aktionen durchgeführt
werden sollen. Die Aktionen sind dabei in der Regel abhängig von dem Objekt, das in das
Control fallengelassen wurde.
Wurden einem Objekt mehrere Flavors zugeordnet, muß zu einem speziellen Ereignis festgelegt
werden, welcher Flavor benutzt werden soll.
Nachdem das Drop-Ereignis abgeschlossen ist, können in einem zusätzlichen Ereignis weitere
Aktionen durchgeführt werden. Dieses Ereignis bietet sich insbesondere beim Verschieben des
Quellobjekts an, um dieses aus der Quelle zu löschen.
April 2001 17
SAP Control Framework SAP AG
Drag&Drop
Aktivitäten
Wenn die Drag&Drop-Funktionalität benutzt wird, sollte auf jeden Fall auch eine UNDO-Funktion
bereitgestellt werden, sofern die Drag&Drop-Funktion zu einem Verschieben des Objekts führt.
Diese muß von der Anwendung implementiert werden.
18 April 2001
SAP AG SAP Control Framework
Ablauf einer Drag&Drop Operation
Ablauf
Applikationsserver
1. Sie erzeugen die Custom Controls [Seite 44].
2. Sie registrieren sich auf die Drag&Drop-Ereignisse [Seite 21].
3. Sie definieren das Drag&Drop-Verhalten für die einzelnen Custom Controls bzw. für deren
Teilobjekte. Dazu erzeugen Sie eines Instanz [Seite 70] der Klasse CL_DRAGDROP [Seite
69]. Dieser Instanz weisen Sie einen oder mehrere Flavors zu [Seite 71], die das Drag&Drop-
Verhalten des entsprechenden Custom Controls beschreiben. Sie können diese Flavors
während des Programmablaufs auch noch verändern [Seite 78], löschen [Seite 80], abfragen
[Seite 75] oder auch die gesamte Instanz initialisieren [Seite 73] oder zerstören [Seite 74].
4. Die Zuweisung der Flavors an das Custom Control erfolgt über control-spezifische
Methoden. Lesen Sie dazu die jeweilige Control-Dokumentation.
Frontend
Die nachfolgenden Schritte führt das System automatisch durch. Sie dienen nur zum Verständnis
des Drag&Drop-Vorgangs.
5. Nachdem der Benutzer mit der linken Maustaste ein Objekt ausgewählt hat, startet der
Drag&Drop-Service.
6. Der Drag&Drop-Service überprüft, ob für das Objekt ein Drag&Drop-Verhalten definiert
wurde und ob darin die Fähigkeit des Objekts für Drag definiert wurde (Attribut DragSource).
7. Wurde das Attribut DragSource entsprechend gesetzt, wird das Drag&Drop gestartet. Der
Mauszeiger verändert sich dann automatisch.
8. Während der Benutzer die linke Maustaste gedrückt hält, wird ständig unter dem Mauszeiger
nachgefragt, ob sich dort ein Objekt in einem Custom Control befindet, das Drop-fähig ist
(Attribut DropTarget), und ob der Flavor dieses Objekts mit dem Flavor der Quelle
übereinstimmt. Ist dies der Fall, wird dem Benutzer dies über eine Veränderung des
Mauszeigers signalisiert.
9. Läßt der Benutzer nun das Objekt fallen, wird dies über ein Ereignis an den
Applikationsserver gemeldet.
Für das Frontend ist damit die Drag&Drop Operation abgeschlossen. Bisher wurden
noch keinerlei Veränderungen an den Inhalten der Custom Controls vorgenommen.
April 2001 19
SAP Control Framework SAP AG
Ablauf einer Drag&Drop Operation
Applikationsserver
10. Der Drag&Drop-Service des Applikationsservers erzeugt eine Instanz der Klasse
CL_DRAGDROPOBJECT [Seite 81]. Diese Instanz (z.B. drag_drop_object) steht Ihnen
in allen Ereignissen des Drag&Drop-Vorgangs als Ereignisparameter zur Verfügung und
dient zum Übermitteln des Kontexts zwischen den Ereignissen.
11. Der Drag&Drop-Service prüft nach, ob das Drag-Objekt und das Drop-Objekt mehrere
Flavors gemeinsam besitzen. Ist dies der Fall, wird das Ereignis ONGETFLAVOR ausgelöst. In
der dazugehörigen Behandlerroutine muß nun die Applikation entscheiden, welcher Flavor
verwendet werden soll. Dazu steht die Methode set_flavor [Seite 82] zur Verfügung.
12. Nun wird das Drag&Drop-Ereignis ONDRAG ausgelöst. Über Ereignisparameter erhalten Sie
die relevanten Informationen, welches Objekt der Benutzer gezogen hat. Innerhalb der
Behandlerroutine müssen Sie jetzt die in 9. angelegte Instanz des Drag&Drop-Datenobjekts
mit dem Kontext (Informationen über das Quellobjekt) versorgen:
drag_drop_object->object = mydragobject.
13. Als nächstes wird das Ereignis ONDROP ausgelöst. Aufgabe dieser Methode ist das
Verarbeiten des Drag&Drop-Datenobjekts. Hier müssen Sie implementieren, welche
Änderungen in dem Zielobjekt aufgrund des Drag&Drop-Vorgangs vorgenommen werden
sollen.
14. Das letzte Ereignis des Drag&Drop-Vorgangs ist ONDROPCOMPLETE. Hier sollte eventuell
eine Nachbearbeitung des Drag&Drop-Datenobjekts erfolgen. Besonders für den Fall einer
Verschiebeoperation sollte zu diesem Zeitpunkt das Quellobjekt aus dem DragSource
Control und den entsprechenden Datenstrukturen entfernt werden.
In Beispiel für Drag&Drop-Programmierung [Seite 23] finden Sie ein Beispiel, das
einen Drag&Drop-Vorgang zwischen einem SAP Tree und einem SAP TextEdit
beschreibt.
20 April 2001
SAP AG SAP Control Framework
Ereignisse bei Drag&Drop
Verwendung
Im Umfeld des Drag&Drop gibt es vier Standardereignisse, bei denen Sie die Kontrolle in Ihrem
Applikationsprogramm bekommen können. In den Behandlerroutinen zu diesen Ereignissen
implementieren Sie, welche Aktionen bei einem Drag&Drop-Vorgang durchgeführt werden.
Voraussetzungen
Um auf die Ereignisse reagieren zu können, müssen Sie sich auf sie registrieren. Im Gegensatz
zu der normalen Ereignisbehandlung werden aber die Ereignisse nicht mit der Methode
set_registered_events [Seite 59] am Control Framework angemeldet. Die Registrierung erfolgt
automatisch über die Verschalung des eingesetzten Custom Controls.
Sie müssen aber weiterhin Behandlermethoden für die Ereignisse angeben:
DATA tree TYPE REF TO cl_gui_simple_tree.
SET HANDLER dragdrop=>on_drag FOR tree.
Die Ereignisse werden immer als Systemereignisse angemeldet.
Funktionsumfang
Das Control Framework reicht beim Drag&Drop erst zum Drop-Zeitpunkt ein Ereignis an den
Applikationsserver weiter. Dieses wird dann am Applikationsserver, wie in Ablauf einer
Drag&Drop-Operation [Seite 19] beschrieben, innerhalb eines Drag&Drop-Vorgangs in maximal
vier Standardereignisse auseinandergesteuert. Alle Ereignisse haben ein Drag&Drop-
Datenobjekt als Ereignisparameter. Über diesen Parameter müssen Sie den Kontext des
Drag&Drop-Vorgangs verwalten. Weiterhin übergibt Ihnen die jeweilige Control-Verschalung
weitere Informationen zu dem Drag&Drop-Kontext. Lesen Sie dazu die Dokumentation der
Control-Verschalung.
• ONGETFLAVOR: Dieses Ereignis wird nur dann ausgelöst, wenn das Quellobjekt und das
Zielobjekt über mehrere gemeinsame Flavors verfügen. Sie müssen dann in der
Behandlermethode einen der gemeinsamen Flavors auswählen. Wenden Sie dazu die
Methode set_flavor [Seite 82] auf das Drag&Drop-Datenobjekt an.
Das Ereignis wird von dem Zielobjekt des Drag&Drop-Vorgangs ausgelöst.
• ONDRAG: Dieses Ereignis wird immer dann ausgelöst, wenn der Drag&Drop-Vorgang am
Frontend beendet ist. In diesem Ereignis müssen Sie den Kontext des Quellobjekts
bestimmen. Diesen Kontext übergeben Sie dann an die als Ereignisparameter übergebene
Instanz der Klasse CL_DRAGDROPOBJECT.
Das Ereignis wird von dem Quellobjekt des Drag&Drop-Vorgangs ausgelöst.
April 2001 21
SAP Control Framework SAP AG
Ereignisse bei Drag&Drop
• ONDROP: Zu diesem Ereignis definieren Sie die Aktionen, die im Zielobjekt durchgeführt
werden sollen. Dabei nutzen Sie den Ereignisparameter für den Kontext, den Sie zum
Ereignis ONDRAG gefüllt haben. Bei diesem Ereignis ist folgendes zu beachten:
− Innerhalb des ONDROP-Ereignisses muß ein dynamischer TypeCast durchgeführt
werden. Die mögliche Ausnahme des TypeCast muß auf jeden Fall abgefangen werden.
Falls ein nicht passendes Objekt zugewiesen werden sollte, muß in der
Ausnahmebehandlung die Drag&Drop-Verarbeitung mit der Methode abort [Seite 83]
abgebrochen werden.
− Die verwendeten Flavors sollten so gewählt werden, daß eine Zuordnung des
Drag&Drop-Objekts zu dem richtigen TypeCast möglich ist.
Das Ereignis wird von dem Zielobjekt des Drag&Drop-Vorgangs ausgelöst.
• ONDROPCOMPLETE: Sofern Sie zum Abschluß des Drag&Drop-Vorgangs noch weitere
Aktionen durchführen wollen, können Sie dies in diesem Ereignis realisieren. Dies ist z.B. im
Falle einer Verschiebeoperation sinnvoll.
Das Ereignis wird von dem Quellobjekt des Drag&Drop-Vorgangs ausgelöst.
22 April 2001
SAP AG SAP Control Framework
Beispiel für Drag&Drop-Programmierung
April 2001 23
SAP Control Framework SAP AG
Beispiel für Drag&Drop-Programmierung
24 April 2001
SAP AG SAP Control Framework
Beispiel für Drag&Drop-Programmierung
April 2001 25
SAP Control Framework SAP AG
Beispiel für Drag&Drop-Programmierung
26 April 2001
SAP AG SAP Control Framework
Beispiel für Drag&Drop-Programmierung
April 2001 27
SAP Control Framework SAP AG
Drag&Drop im WAN-Umfeld
Drag&Drop im WAN-Umfeld
Beim Drag&Drop erzeugt jeder Flavor jeder Instanz der Klasse CL_DRAGDROP einen
Kommunikations-Overhead von 20..70 Byte. Solange die Anzahl der Instanzen der Klasse
CL_DRAGDROP nicht zu groß wird ( < 100), ist kein Problem zu erwarten. Der Kommunikations-
Overhead tritt zudem nur einmalig auf.
28 April 2001
SAP AG SAP Control Framework
Lifetime Management
Lifetime Management
Verwendung
Das Lifetime Management regelt die Lebensdauer eines Custom Controls am Frontend. Wenn
die Lebensdauer abgelaufen ist, wird das Custom Control automatisch vom SAP-System am
Frontend abgebaut. Dabei wird die Methode free [Seite 54] bzw. finalize [Seite 58] für das
Control vom System aufgerufen. Natürlich können Sie ein Control mit diesen Methoden auch
programmgesteuert abbauen.
Funktionsumfang
Es gibt zwei Einstellungen für die Lebensdauer eines Controls, die beim Instanzieren vergeben
werden:
• my_control->lifetime_imode: Das Control lebt, solange der interne Modus nicht
abgebaut wird (leave program. leave transaction.) Die Anweisung set screen
0, leave screen. baut den internen Modus nur dann ab, wenn keine andere
Dynproinstanz (erzeugt z.B. durch CALL SCREEN) mehr vorhanden ist. Danach wird die
Methode finalize [Seite 58] aufgerufen.
• my_control->lifetime_dynpro: Das Control lebt, solange die Instanz des Dynpros
existiert, d.h. sich noch im Dynprostapel befindet. Danach wird die Methode free [Seite 54]
aufgerufen.
Die Benutzung dieses Modus regelt automatisch die Sichtbarkeit von Controls. Controls
werden immer nur dann eingeblendet, wenn das Dynpro aktiv ist, auf dem sie erzeugt
wurden. Ist ein anderes Dynpro aktiv, werden sie automatisch unsichtbar geschaltet.
• my_control->lifetime_default: Wird das Control in einen Container eingebaut,
übernimmt es die Lebensdauer des Containers. Wird es nicht in einen Container eingebaut
(z.B. weil es selbst ein Container ist), dann wird die Lebensdauer auf my_control-
>lifetime_imode gesetzt.
Die Lebensdauer eines Controls darf nur kürzer, aber niemals länger sein als die
seines Containers.
April 2001 29
SAP Control Framework SAP AG
Lifetime Management
Mit der Methode is_alive [Seite 61] können Sie abfragen, ob ein instanziertes Control noch am
Frontend existiert. Die Methode get_living_dynpro_controls [Seite 49] liefert eine Liste aller
existierenden Controls zurück.
30 April 2001
SAP AG SAP Control Framework
Automation Queue
Automation Queue
Verwendung
Die Kommunikation zwischen Automation Controller und OO Control Framework wird über GUI-
RFC-Aufrufe abgewickelt:
SAPGUI
Automation
Custom Control 1
Controller
Custom Control 2
Automation Queue
OK_CODE GUI-RFC
Applikationsserver
Um die Netzlast zwischen dem Backend und dem Frontend gering zu halten, werden Aufrufe
vom Backend an das Frontend gepuffert und zu definierten Synchronisationspunkten an das
Frontend gesendet. Der Synchronisationspunkt wird durch nicht gepufferte Methodenaufrufe
oder durch expliziten Aufruf einer generischen Methode (CALL METHOD cl_gui_cfw=>flush)
erreicht (siehe Synchronisation der Automation Queue [Seite 33]).
Die Kommunikation basiert auf einem RFC-Aufruf. Der Aufruf erfolgt synchron, was bedeutet,
daß bei jedem Synchronisationspunkt ein RFC-Aufruf erfolgt. Aufgrund der Architektur des SAP-
Systems dürfen diese RFC-Aufrufe eine bestimmte Dauer nicht überschreiten, da sonst die
Verbindung zum Präsentationsserver vom Applikationsserver beendet wird.
Die Pufferung von Operationen erhöht die Performance erheblich, da jede ungepufferte
Operation eine RFC-Kommunikation mit dem Frontend auslöst. Allerdings sind insbesondere
gepufferte Lesezugriffe auf ein Control mit größter Vorsicht zu behandeln, da eine falsche
Verwendung zu einem Laufzeitfehler führen kann (siehe Fehlerbehandlung [Seite 35])!
Performance-Hinweise
Bei der Performance ist vor allem die Anzahl der Synchronisationspunkte zu beachten. In der
Dynproablauflogik wird auf jeden Fall nach PBO automatisch die Automation Queue
synchronisiert.
April 2001 31
SAP Control Framework SAP AG
Automation Queue
Voraussetzungen
Es gibt drei Arten von Methoden von Control-Schalen:
• Methoden, die immer vor der Rückkehr eine Synchronisation der Automation Queue
ausführen
• Methoden, bei denen nie eine Synchronisation der Automation Queue ausgeführt wird. Hier
ist der Anwender für die Übertragung des Puffers verantwortlich.
• Methoden, bei denen die Synchronisation über einen Parameter gesteuert werden kann.
Funktionsumfang
Gepufferte Operationen werden in der Automation Queue gesammelt. Ein interner Modus verfügt
über eine einzige Automation Queue für alle Custom Controls des internen Modus. Durch
Synchronisation der Automation Queue wird deren Inhalt zum Frontend gesendet und dort
ausgeführt. Das Ergebnis wird dann an das Backend zurückgemeldet:
Sie rufen eine Methode des SAP Tree Controls, um den selektierten Knoten zu
setzen (ohne Flush).
Die Methode stellt zwei Operationen in die Automation Queue: Op_Tree_1 und
Op_Tree_2.
Dann rufen Sie eine Methode eines TextEdit Controls, um den ausgewählten Text
anzuzeigen (ohne Flush). Die Methode stellt die Operation Op_TextEdit_1 in die
Queue.
Die Queue hat nun folgende Gestalt:
Op_Tree_1
Op_Tree_2
Op_TextEdit_1
Wenn Sie jetzt die Automation Queue synchronisieren, wird sie zum Frontend
übertragen und auf den Controls ausgeführt.
32 April 2001
SAP AG SAP Control Framework
Synchronisation der Automation Queue
Ablauf
Die Synchronisation der Automation Queue wird zu bestimmten Zeitpunkten automatisch vom
System durchgeführt:
• am Ende jedes PBO-Zeitpunkts:
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.
• nach dem Verlassen der Behandlermethode für Systemereignisse [Seite 10]
Weiterhin können Sie die Synchronisation auch explizit anstoßen. Dazu steht Ihnen die Methode
flush [Seite 48] der Klasse CL_GUI_CFW zur Verfügung.
April 2001 33
SAP Control Framework SAP AG
Synchronisation der Automation Queue
(Pseudo-Syntax): Der selektierte Knoten eines Tree Controls und der selektierte Text
eines TextEdit Controls sollen gelesen werden:
FORM GET_CONTROL_PROPERTIES.
DATA: tree_selected_node, combobox_selected_node.
CALL METHOD tree->GET_SELECTED_NODE
IMPORTING
NODE_KEY = tree_selected_node
<Fehlerbehandlung>
CALL METHOD textedit-> GET_SELECTION_POS
IMPORTING
FROM_LINE = from_line
FROM_POS = from_pos
TO_LINE = to_line
TO_POS = to_pos.
<Fehlerbehandlung>
CALL METHOD CL_GUI_CFW=>FLUSH
<Fehlerbehandlung>
ENDFORM.
34 April 2001
SAP AG SAP Control Framework
Fehlerbehandlung bei der Synchronisation
In diesem Fall sollten Sie den Debugger [Seite 37] benutzen und dabei die Option
Automation Controller: Aufträge immer synchron verarbeiten setzen. Dann wird der
Fehler bei der Methode add_nodes_and_items ausgelöst.
Besonders kritisch wirkt sich dieses Verhalten bei der Synchronisation der
Automation Queue durch das System aus. Um auch hier eine Fehlerbehandlung
durch die Anwendung zu ermöglichen, löst das System in diesem Fall das
Systemereignis flush_error aus. Auf dieses sollten Sie sich auf jeden Fall
registrieren. Versäumen Sie dies, wird ein Fehlerprotokoll ausgegeben.
Ablauf
Um sich auf das Ereignis flush_error zu registrieren, müssen Sie folgende Schritte
durchführen:
1. Legen Sie eine (lokale) Klasse für die Ereignisbehandlung an.
2. Definieren Sie eine Ereignisbehandlermethode für das Ereignis flush_error der Klasse
cl_gui_cfw. Als Ereignisparameter erhalten Sie Informationen über den Kontext, in dem
der Fehler aufgetreten ist.
Beispiel als statische Methode:
*------------------------------------------*
* CLASS lcl_event_handler DEFINITION
*------------------------------------------*
CLASS lcl_event_handler DEFINITION.
PUBLIC SECTION.
April 2001 35
SAP Control Framework SAP AG
Fehlerbehandlung bei der Synchronisation
class-METHODS
error FOR EVENT flush_error OF cl_gui_cfw
IMPORTING DYNPRO_PROGRAM DYNPRO_NUMBER SITUATION.
ENDCLASS.
Ereignisparameter
Parameter Bedeutung
DYNPRO_PROGRAM Programmname des Programms, in dem der Fehler aufgetreten ist
DYNPRO_NUMBER Dynpronummer, auf der der Fehler aufgetreten ist
SITUATION Fehler bei systemgesteuertem Synchronisieren der Automation Queue trat
auf bei
cl_gui_cfw=>flush_situation_pbo: Synchronisation nach PBO
cl_gui_cfw=>flush_situation_system_events: Synchronisation
nach einem Systemereignis
3. Implementieren Sie die Ereignisbehandlermethode. Werten Sie dabei die Informationen zum
Kontext des Fehlers aus:
*------------------------------------------*
* CLASS lcl_event_handler IMPLEMENTATION
*- ----------------------------------------*
CLASS lcl_event_handler IMPLEMENTATION.
METHOD error.
<do something>
ENDMETHOD.
ENDCLASS.
Registrieren Sie das Ereignis am OO Control Framework:
SET HANDLER lcl_event_handler=>error.
Nach dem Auslösen des Ereignisses sollte auf keinen Fall weiter mit Controls
gearbeitet werden, da dann weitere Fehler auftreten können. Sie sollten daher Ihre
Anwendung kontrolliert beenden.
36 April 2001
SAP AG SAP Control Framework
Services rund um die Automation Queue
Funktionsumfang
Debugger
Wenn Sie mit gepufferten Operationen bei der Kommunikation mit Controls arbeiten, werden
Fehler bei einem Methodenaufruf erst bei der Synchronisation der Automation Queue sichtbar.
Daher ist es sinnvoll, beim Debuggen nach jeder Methode die Automation Queue zu
synchronisieren. Dazu können Sie im Debugger die Einstellung Automation Controller: Aufträge
immer synchron verarbeiten setzen. Diese ruft dann nach jeder Automation Methode die
generische Methode CALL METHOD cl_gui_cfw=>flush auf.
Tritt bei direkter Ausführung der Operationen kein Fehler mehr auf, dann wurde die Methode
CL_GUI_CFW=>FLUSH zum falschen Zeitpunkt gerufen.
April 2001 37
SAP Control Framework SAP AG
Services rund um die Automation Queue
Performance-Anzeige
Wenn Sie die Anzahl der Roundtrips innerhalb Ihres Programms überprüfen wollen, haben Sie
zwei Möglichkeiten:
• Schalten Sie die Anzeige der Roundtrips in der Statuszeile ein:
38 April 2001
SAP AG SAP Control Framework
Services rund um die Automation Queue
Automation Trace
Sie können einen Trace über die Automation Queue erstellen. Dazu wird in den SAP-GUI-
Einstellungen in der Gruppe Trace das Ankreuzfeld Automation ausgewählt. Danach werden alle
Aufrufe mit ihren Parametern (create object, call method, set/get property,
free object) der Automation Queue in einer Tracedatei protokolliert.
Tritt ein Fehler auf, wird dieser in der Trace-Datei protokolliert (HRESULT error_code).
Zusätzlich kann verfolgt werden, wie viele Flushes von der Applikation pro PBO/PAI benötigt
werden. Überflüssige Flushes können dadurch eliminiert werden.
April 2001 39
SAP Control Framework SAP AG
Services rund um die Automation Queue
Bei Mitverfolgung der Methodenaufrufe der Control-Verschalung im Trace ist zu beachten, daß
die ABAP-Methodennamen in der Regel nicht mit den Methodennamen im Trace
übereinstimmen. Die Methodennamen im Trace entsprechen nämlich den Automation-Aufrufen
an das Control. Weiterhin ist zu beachten, daß der Aufruf einer ABAP-Methode den Aufruf
mehrerer Automation-Methoden nach sich ziehen kann.
Das Laden eines Bildes in das SAP Picture hat im ABAP-Programm folgende Form:
CALL METHOD picture->load_picture_from_url
EXPORTING url = 'http://www.sap-ag.de/germany/images/sapag.gif'
Im Automation Trace entspricht dies folgenden Zeilen:
40 April 2001
SAP AG SAP Control Framework
Services rund um die Automation Queue
April 2001 41
SAP Control Framework SAP AG
Verwendung von Controls im WAN
42 April 2001
SAP AG SAP Control Framework
Verwendung von Controls im WAN
erzeugt, wenn der Benutzer die Seite aktiviert. Das gleiche trifft für die Datenversorgung dieser
Controls auf TabStrip-Seiten zu.
Muß bei der Datenversorgung eine Unterscheidung zwischen einer WAN- und einer LAN-
Anmeldung vorgenommen werden, steht der Funktionsbaustein SAPGUI_GET_WANFLAG zur
Verfügung. In manchen Fällen kann es notwendig werden, daß eine Anwendung andere
Datenmengen oder ganze Fallbacks für die WAN-Anmeldung zur Verfügung stellen sollte. Ein
Beispiel, wann die WAN- bzw. LAN- Anmeldung einen Einfluß haben kann, ist die Anzahl von
Geschwistern in einem Tree Control, die ohne künstliche Zwischenebenen übertragen werden
können.
Im Gegensatz zu Dynproelementen werden die Controls nur einmalig erzeugt und mit Daten
versorgt. Controls werden unter Performance-Aspekten dann immer preiswerter, je länger diese
leben. In Anwendungen, die ständig neu aufgerufen und damit neu initialisiert werden, kann dies
zu einem erheblichen Performance-Nachteil werden; in Anwendungen, die sehr lange auf den
gleichen Bildern arbeiten, kann daraus sogar ein Performance-Vorteil entstehen.
Im Einzelfall kann über entsprechende Performance-Werkzeuge [Seite 37] überprüft werden,
welche Nachteile oder Vorteile die Verwendung eines Controls unter dem Aspekt der
Netzwerkauslastung bringt.
April 2001 43
SAP Control Framework SAP AG
Anlegen eines Controls am Beispiel des SAP Picture
Ablauf
Instanz anlegen
1. Definieren Sie eine Referenzvariable für den Custom Container, in dem das Custom Control
angezeigt werden soll (Siehe SAP Container [Extern])
DATA container TYPE REF TO cl_gui_custom_container.
2. Definieren Sie eine Referenzvariable für das Picture Control:
DATA picture TYPE REF TO cl_gui_picture.
3. Erzeugen Sie den Custom Container. Den Bereich 'CUSTOM' für den Custom Container
müssen Sie vorher im Screen Painter angelegt haben. Beim Erzeugen des Containers legen
Sie auch seine Lebensdauer [Seite 29] fest (siehe constructor [Seite 56]).
CREATE OBJECT container
EXPORTING container_name = 'CUSTOM'
lifetime = lifetime.
4. Erzeugen Sie das Picture Control. Für dieses können Sie auch eine Lebensdauer festlegen.
Allerdings darf die Lebensdauer nicht größer sein als die seines Containers.
CREATE OBJECT picture
EXPORTING parent = container
lifetime = lifetime.
Ereignis anmelden
5. Das Anmelden von Ereignissen gliedert sich in das Registrieren des Ereignisses am Control
Framework, das Definieren einer Behandlermethode und das Anmelden der
Behandlermethode. Diese Schritte finden Sie in Registrieren und Verarbeiten von
Ereignissen [Seite 13].
44 April 2001
SAP AG SAP Control Framework
Anlegen eines Controls am Beispiel des SAP Picture
7. Bauen Sie das Custom Control mit der Methode free [Seite 54] am Frontend ab. Sofern Sie
den Control Container nicht mehr benötigen, bauen Sie auch diesen ab:
CALL METHOD picture->free
EXCEPTIONS cntl_error = 1
cntl_system_error = 2.
CALL METHOD container->free
EXCEPTIONS cntl_error = 1
cntl_system_error = 2.
Beachten Sie die Reihenfolge, in der Sie die Controls am Frontend abbauen. Wenn
Sie einen Container abbauen, werden nämlich automatisch alle in dem Container
eingebundenen Controls auch abgebaut. Der Versuch, ein bereits abgebautes
Control erneut abzubauen, führt zu einem Fehler. Mit der Methode is_alive [Seite 61]
kann nachgeprüft werden, ob das Control schon abgebaut wurde.
8. Löschen Sie die Referenzvariablen des Custom Controls und des Control Containers:
FREE PICTURE.
FREE CONTAINER.
April 2001 45
SAP Control Framework SAP AG
Methoden der Klasse CL_GUI_CFW
46 April 2001
SAP AG SAP Control Framework
dispatch
dispatch
Die Methode dispatch verteilt Applikationsereignisse (siehe Ereignisbehandlung [Seite 10]) an
die für das Ereignis angemeldeten Ereignisbehandler. Wenn diese Methode nicht im
Applikationsprogramm innerhalb von PAI aufgerufen wird, dann wird sie automatisch vom
System nach dem Abarbeiten von PAI aufgerufen. Die Methode liefert einen Returncode zurück,
über den der Erfolg des Aufrufs abzulesen ist.
CALL METHOD cl_gui_cfw=>dispatch
IMPORTING return_code = return_code.
Parameter Bedeutung
return_code cl_gui_cfw=>rc_found: Das Ereignis konnte erfolgreich an eine
Behandlermethode übergeben werden.
cl_gui_cfw=>rc_unknown: Das Ereignis wurde nicht in der Ereignisliste
registriert.
cl_gui_cfw=>rc_noevent: Es wurde kein Ereignis auf einem Control
ausgelöst. Der OK_CODE war daher ein normaler OK_CODE (z.B. von
einem Menüeintrag).
cl_gui_cfw=>rc_nodispatch: Dem Ereignis konnte keine
Behandlermethode zugeordnet werden.
Das Ereignis kann nur einmalig verteilt werden. Danach ist das Ereignis verbraucht.
Daher wird ein zweiter Aufruf der Methode nicht nochmals zu einem Sprung in den
Ereignisbehandler führen.
April 2001 47
SAP Control Framework SAP AG
flush
flush
Mit dieser Methode synchronisieren Sie explizit die Automation Queue [Seite 31]. Die gepufferten
Operationen werden dann zum Frontend per GUI-RFC geschickt. Dort wird die Automation
Queue in der Reihenfolge abgearbeitet, wie Sie sie gefüllt haben.
Im Fehlerfall wird eine Ausnahme ausgelöst, die Sie auf jeden Fall abfragen und behandeln
sollten. Da eine Zuordnung des Fehlers in der Regel nicht mehr möglich ist, stehen Ihnen sowohl
im Debugger als auch im SAP GUI Werkzeuge zur Verfügung, um den Fehler zu lokalisieren:
Debugger: Markieren Sie in den Einstellungen das Ankreuzfeld Automation Controller: Aufträge
immer synchron verarbeiten. Dies führt dazu, daß nach jeder Methode, die den Automation
Controller ruft, die Methode cl_gui_cfw=>flush automatisch aufgerufen wird.
SAP GUI: In den Einstellungen zum SAP GUI können Sie auf der Karteikarte Trace das
Ankreuzfeld Automation wählen. Dadurch wird die Kommunikation zwischen Applikationsserver
und Automation Controller in einer Trace-Datei mitgeschrieben. Diese kann dann ausgewertet
werden.
CALL METHOD cl_gui_cfw=>flush
EXCEPTIONS CNTL_SYSTEM_ERROR = 1
CNTL_ERROR = 2.
Führen Sie nur so viele Synchronisationspunkte in Ihr Programm ein, wie wirklich
nötig sind. Bei jeder Synchronisation wird nämlich eine RFC-Verbindung zum SAP
GUI geöffnet.
48 April 2001
SAP AG SAP Control Framework
get_living_dynpro_controls
get_living_dynpro_controls
Mit dieser Methode können Sie sich eine Liste von Referenzvariablen zu allen noch aktiven
Custom Controls besorgen.
CALL METHOD cl_gui_cfw=>get_living_dynpro_controls
IMPORTING control_list = control_list.
Parameter Bedeutung
control_list Liste der Referenzvariablen zu aktiven Custom Controls.
Liste ist vom Typ CNTO_CONTROL_LIST (in der Klasse CL_GUI_CFW
definiert)
April 2001 49
SAP Control Framework SAP AG
set_new_ok_code
set_new_ok_code
Diese Methode darf nur in Behandlermethoden zu Systemereignissen eingesetzt werden. Sie
setzt einen OK_CODE, der ein Ausführen von PAI nach sich zieht. Dadurch können Sie nach dem
Feldtransport nochmals die Kontrolle in Ihren PAI-Modulen bekommen.
CALL METHOD cl_gui_cfw=>set_new_ok_code
EXPORTING new_code = new_code
IMPORTING rc = rc.
Parameter Bedeutung
new_code Funktionscode, der in das OK_CODE-Feld (SY-UCOMM) gestellt werden soll.
return_code cl_gui_cfw=>rc_posted: Der OK_CODE wurde mit Erfolg gesetzt, und
die Verarbeitung wird nach Abschluß der Behandlermethode mit PAI
fortgesetzt (vorher wird noch die automatische Feldprüfung des Dynpros
durchgeführt).
cl_gui_cfw=>rc_wrong_state: Die Methode wurde nicht bei einem
Systemereignis aufgerufen.
cl_gui_cfw=>rc_invalid: Der gesetzte OK_CODE ist kein erlaubter
OK_CODE.
50 April 2001
SAP AG SAP Control Framework
update_view
update_view
Die Automation Queue wird durch den Aufruf der Methode flush [Seite 48] nur dann
synchronisiert, wenn in der Automation Queue Returnwerte enthalten sind.
Für alle Fälle, in denen auch im Fall einer Returnwert-freien Queue gewünscht wird, daß die
Automation Queue synchron versendet wird, gibt es im Control Framework die Methode
CL_GUI_CFW=>UPDATE_VIEW. Diese Methode darf nur dann verwendet werden, wenn es
zwingend notwendig ist, ein Update des SAP GUI zu erreichen. Beispiele hierfür sind sehr lange
laufende Anwendungen, die in regelmäßigen Abständen dem Benutzer ein Feedback über den
Fortschritt der Aktion anzeigen möchten.
CALL METHOD cl_gui_cfw=>update_view
EXCEPTIONS CNTL_SYSTEM_ERROR = 1
CNTL_ERROR = 2.
April 2001 51
SAP Control Framework SAP AG
Methoden der Klasse CL_GUI_OBJECT
52 April 2001
SAP AG SAP Control Framework
is_valid
is_valid
Diese Methode liefert als Ergebnis, ob ein Custom Control zu einer Objektreferenz noch am
Frontend vorhanden ist.
CALL METHOD my_control->is_valid
IMPORTING result = result.
Parameter Bedeutung
result 0: Custom Control ist nicht mehr am Frontend aktiv
1: Custom Control ist noch aktiv
April 2001 53
SAP Control Framework SAP AG
free
free
Diese Methode baut ein Custom Control am Frontend ab. Nach Aufruf dieser Methode sollten Sie
auch die Objektreferenz initialisieren (FREE my_control).
CALL METHOD my_control->free
EXCEPTIONS cntl_error = 1
cntl_system_error = 2.
54 April 2001
SAP AG SAP Control Framework
Methoden der Klasse CL_GUI_CONTROL
April 2001 55
SAP Control Framework SAP AG
constructor
constructor
Diese Methode wird von der Control-Verschalung des verwendeten Controls aufgerufen, um ein
Control am Frontend zu instanzieren.
Um ein SAP Control zu instanzieren, rufen Sie immer den Konstruktor der
dazugehörenden Klasse auf.
CREATE OBJECT my_control
EXPORTING clsid = clsid
lifetime = lifetime
shellstyle = shellstyle
parent = parent
autoalign = autoalign
EXCEPTIONS cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4.
Parameter Bedeutung
clsid ID der Klasse
lifetime Parameter für das Lifetime Management. Folgende Werte sind möglich:
my_control->lifetime_imode: Das Control lebt, solange der interne
Modus nicht abgebaut wird (z.B.: leave program. leave
transaction. set screen 0, leave screen.). Danach wird die
Methode finalize [Seite 58] aufgerufen.
my_control->lifetime_dynpro: Das Control lebt, solange die Instanz des
Dynpros existiert, d.h. sich noch im Dynprostapel befindet. Danach wird die
Methode free [Seite 54] aufgerufen.
Die Benutzung dieses Modus regelt automatisch die Sichtbarkeit von
Controls. Controls werden immer nur dann eingeblendet, wenn das Dynpro
aktiv ist, auf dem sie erzeugt wurden. Ist ein anderes Dynpro aktiv, werden
sie automatisch unsichtbar geschaltet.
my_control->lifetime_default: Wird das Control in einen Container
eingebaut, übernimmt es die Lebensdauer des Containers. Wird es nicht in
einen Container eingebaut (z.B. weil es selbst ein Container ist), dann wird
die Lebensdauer auf my_control->lifetime_imode gesetzt.
shellstyle Steuerung des Erscheinungsbilds und des Verhaltens des Controls
Konstanten aus dem ABAP-Include <CTLDEF>, die mit WS beginnen, können
Sie übergeben. Kombinationen von mehreren Styles können Sie durch
Addieren der Konstanten erreichen. Der Vorschlagswert führt intern zum
Setzen einer ausreichenden Kombination von Style-Konstanten.
parent Container, in dem das SAP Picture Control angezeigt werden kann (siehe SAP
Container [Extern])
56 April 2001
SAP AG SAP Control Framework
constructor
April 2001 57
SAP Control Framework SAP AG
finalize
finalize
Diese Methode wird von der verwendeten Controlverschalung überdefiniert. In ihr werden
control-spezifische Funktionen zum Abbau des Controls aufgerufen. Diese Methode wird
automatisch von der Methode free [Seite 54] aufgerufen, bevor das Control am Frontend
abgebaut wird.
CALL METHOD my_control->finalize.
58 April 2001
SAP AG SAP Control Framework
set_registered_events
set_registered_events
Mit dieser Methode registrieren Sie sich auf Ereignisse des Controls (siehe auch:
Ereignisbehandlung [Seite 10]).
CALL METHOD my_control->set_registered_events
EXPORTING events = events
EXCEPTIONS cntl_error = 1
cntl_system_error = 2
illegal_event_combination = 3.
Parameter Bedeutung
events Tabelle der zu registrierenden Ereignisse für das Custom Control my_control
Die Tabelle events ist eine Liste mit Ereignissen, auf die Sie sich registrieren wollen. Die
Tabelle wird mit Bezug auf den Tabellentyp CNTL_SIMPLE_EVENTS definiert. Dem Tabellentyp
liegt die Struktur CNTL_SIMPLE_EVENT zugrunde. Dieser besteht aus folgenden Feldern:
Feld Bedeutung
EVENTID Name des Ereignisses
APPL_EVENT Unterscheidung, ob es sich um ein Systemereignis (initial) oder ein
Applikationsereignis (X) handeln soll.
Die Werte, die dem Feld EVENTID zuzuordnen sind, sind control-spezifisch und werden daher
bei den entsprechenden Controls beschrieben.
April 2001 59
SAP Control Framework SAP AG
get_registered_events
get_registered_events
Diese Methode liefert eine Liste aller für das Custom Control my_control registrierten
Ereignisse zurück.
CALL METHOD my_control->get_registered_events
IMPORTING events = events
EXCEPTIONS cntl_error = 1.
Parameter Bedeutung
events Tabelle der zu registrierenden Ereignisse für das Custom Control my_control
Die Tabelle events ist eine Liste mit Ereignissen, auf die Sie sich registriert haben. Die Tabelle
wird mit Bezug auf den Tabellentyp CNTL_SIMPLE_EVENTS definiert. Dem Tabellentyp liegt die
Struktur CNTL_SIMPLE_EVENT zugrunde. Dieser besteht aus folgenden Feldern:
Feld Bedeutung
EVENTID Name des Ereignisses
APPL_EVENT Unterscheidung, ob es sich um ein Systemereignis (initial) oder ein
Applikationsereignis (X) handeln soll.
Die Werte, die dem Feld EVENTID zuzuordnen sind, sind control-spezifisch und werden daher
bei den entsprechenden Controls beschrieben.
60 April 2001
SAP AG SAP Control Framework
is_alive
is_alive
Diese Methode liefert als Ergebnis, ob ein Custom Control zu einer Objektreferenz noch am
Frontend vorhanden ist.
CALL METHOD my_control->is_alive
RETURNING state = state.
Parameter Bedeutung
state my_control->state_dead: Custom Control ist nicht mehr am Frontend aktiv
my_control->state_alive: Custom Control ist auf aktuellem Dynpro aktiv
my_control->state_alive_on_other_dynpro: Custom Control ist auf dem
aktuellen Dynpro nicht aktiv, aber am Frontend noch aktiv (d.h. unsichtbar)
April 2001 61
SAP Control Framework SAP AG
set_alignment
set_alignment
Diese Methode richtet das Custom Control innerhalb seines Containers aus:
CALL METHOD my_control->set_alignment
EXPORTING alignment = alignment
EXCEPTIONS cntl_error = 1
cntl_system_error = 2.
Parameter Bedeutung
alignment Ausrichtung des Controls
Der Parameter alignment kann aus Kombinationen folgender Ausrichtungen bestehen:
Name Bedeutung
my_control->align_at_left Ausrichtung am linken Rand
my_control->align_at_right Ausrichtung am rechten Rand
my_control->align_at_top Ausrichtung am oberen Rand
my_control->align_at_bottom Ausrichtung am unteren Rand
Kombinationen erhält man durch Aufaddieren der Komponenten:
alignment = my_control->alingn_at_left + my_control->alingn_at_top.
62 April 2001
SAP AG SAP Control Framework
set_position
set_position
Diese Methode plaziert das Control an eine bestimmte Stelle des Dynpros.
In der Regel wird die Position des Controls über seinen Container geregelt.
CALL METHOD my_control->set_position
EXPORTING height = height
left = left
top = top
width = width
EXCEPTIONS cntl_error = 1
cntl_system_error = 2.
Parameter Bedeutung
height Höhe des Controls
left Linker Rand des Controls
top Oberer Rand des Controls
width Breite des Controls
April 2001 63
SAP Control Framework SAP AG
set_visible
set_visible
Mit dieser Methode können Sie die Sichtbarkeit eines Custom Controls verändern.
CALL METHOD my_control->set_visible
EXPORTING visible = visible
EXCEPTIONS cntl_error = 1
cntl_system_error = 2.
Parameter Bedeutung
visible X: Custom Control ist sichtbar
' ': Custom Control ist nicht sichtbar
64 April 2001
SAP AG SAP Control Framework
get_focus
get_focus
Diese statische Methode liefert die Objektreferenz des Custom Controls zurück, welches den
Fokus hat.
CALL METHOD cl_gui_control=>get_focus
IMPORTING control = control
EXCEPTIONS cntl_error = 1
cntl_system_error = 2.
Parameter Bedeutung
control Objektreferenz (TYPE REF TO cl_gui_control) auf das Control, das den
Fokus hat
April 2001 65
SAP Control Framework SAP AG
set_focus
set_focus
Mit dieser statischen Methode können Sie den Fokus auf ein Custom Control setzen.
CALL METHOD cl_gui_control=>set_focus
EXPORTING control = control
EXCEPTIONS cntl_error = 1
cntl_system_error = 2.
Parameter Bedeutung
control Objektreferenz (TYPE REF TO cl_gui_control) auf das Control, das den
Fokus bekommen soll
66 April 2001
SAP AG SAP Control Framework
get_height
get_height
Diese Methode liefert die Höhe des Controls zurück.
CALL METHOD control->get_height
IMPORTING height = height
EXCEPTIONS cntl_error = 1.
Parameter Bedeutung
height Aktuelle Höhe des Controls
April 2001 67
SAP Control Framework SAP AG
get_width
get_width
Diese Methode liefert die Breite des Controls zurück.
CALL METHOD control->get_width
IMPORTING width = width
EXCEPTIONS cntl_error = 1.
Parameter Bedeutung
width Aktuelle Breite des Controls
68 April 2001
SAP AG SAP Control Framework
Methoden der Klasse CL_DRAGDROP
April 2001 69
SAP Control Framework SAP AG
constructor
constructor
Der Konstruktor erzeugt eine Instanz für die Beschreibung des Drag&Drop-Verhaltens eines
Controls.
CREATE OBJECT dragdrop.
70 April 2001
SAP AG SAP Control Framework
add
add
Diese Methode fügt eine weitere Beschreibung zu dem Drag&Drop-Verhalten hinzu. Es können
beliebig viele Beschreibungen hinterlegt werden. Allerdings darf die gleiche Beschreibung nicht
mehrmals hinzugefügt werden.
CALL METHOD dragdrop->add
EXPORTING flavor = flavor
dragsrc = dragsrc
droptarget = droptarget
effect = effect
effect_in_ctrl = effect_in_ctrl
EXCEPTIONS allready_defined = 1
obj_invalid = 2.
Parameter Bedeutung
flavor Bezeichnung des neuen Flavors
dragsrc 'X': Beschreibung ist eine Drag-Quelle
droptarget 'X': Beschreibung ist ein Drop-Ziel
effect Drop-Effekt der Beschreibung zwischen verschiedenen Custom Controls.
Folgende Effekte werden unterstützt:
dragdrop->copy: Darstellung der Maus beim Drag&Drop als
Kopiervorgang
dragdrop->move: Darstellung der Maus beim Drag&Drop als
Verschiebevorgang
dragdrop->none: Es ist kein Drag&Drop möglich
effect_in_ctrl Drop-Effekt der Beschreibung im gleichen Custom Controls. Folgende
Effekte werden unterstützt:
dragdrop->copy: Darstellung der Maus beim Drag&Drop als
Kopiervorgang
dragdrop->move: Darstellung der Maus beim Drag&Drop als
Verschiebevorgang
dragdrop->none: Es ist kein Drag&Drop möglich
dragdrop->use_default_effect: Es wird der gleiche Effekt benutzt,
der durch den Parmeter effect spezifiziert wurde
Ausnahmen Bedeutung
allready_defined Der angegebene Flavor wurde bereits definiert.
obj_invalid Das Objekt wurde bereits mit der Methode destroy [Seite 74] zerstört
April 2001 71
SAP Control Framework SAP AG
add
Wird bei der Definition des Flavors sowohl der Effekt copy als auch move benutzt,
werden beim Drag&Drop-Vorgang bei normalem Drag die Flavors mit Effekt Move
und beim Drag in Verbindung mit Drücken der Steuerungstaste die Flavors mit Effekt
Copy verwendet.
72 April 2001
SAP AG SAP Control Framework
clear
clear
Der Inhalt der Instanz wird gelöscht. Nach Aufruf dieser Methode können keine Drag&Drop-
Vorgänge mehr auf dem betroffenen Custom Control durchgeführt werden.
CALL METHOD dragdrop->clear
EXCEPTIONS obj_invalid = 1.
Ausnahmen Bedeutung
obj_invalid Das Objekt wurde bereits mit der Methode destroy [Seite 74] zerstört
April 2001 73
SAP Control Framework SAP AG
destroy
destroy
Der Inhalt der Instanz wird gelöscht. Weiterhin wird die Instanz zerstört. Nach Aufruf der Methode
sind keine Drag&Drop-Vorgänge mehr auf dem betroffenen Custom Control möglich.
CALL METHOD dragdrop->destroy.
74 April 2001
SAP AG SAP Control Framework
get
get
Diese Methode liefert die komplette Beschreibung zu einem Flavor zurück.
CALL METHOD dragdrop->get
EXPORTING flavor = flavor
IMPORTING isdragsrc = isdragsrc
isdroptarget = isdroptarget
effect = effect
effect_in_ctrl = effect_in_ctrl
EXCEPTIONS not_found = 1
obj_invalid = 2.
Parameter Bedeutung
flavor Bezeichnung des Flavors
dragsrc 'X': Beschreibung ist eine Drag-Quelle
droptarget 'X': Beschreibung ist ein Drop-Ziel
effect Drop-Effekt der Beschreibung zwischen verschiedenen Custom Controls.
Folgende Effekte werden unterstützt:
dragdrop->copy: Darstellung der Maus beim Drag&Drop als
Kopiervorgang
dragdrop->move: Darstellung der Maus beim Drag&Drop als
Verschiebevorgang
dragdrop->none: Es ist kein Drag&Drop möglich
effect_in_ctrl Drop-Effekt der Beschreibung im gleichen Custom Controls. Folgende
Effekte werden unterstützt:
dragdrop->copy: Darstellung der Maus beim Drag&Drop als
Kopiervorgang
dragdrop->move: Darstellung der Maus beim Drag&Drop als
Verschiebevorgang
dragdrop->none: Es ist kein Drag&Drop möglich
dragdrop->use_default_effect: Es wird der gleiche Effekt benutzt,
der durch den Parmeter effect spezifiziert wurde
Ausnahmen Bedeutung
allready_defined Der angegebene Flavor wurde bereits definiert.
Wird bei der Definition des Flavors sowohl der Effekt copy als auch move benutzt,
wird beim Drag&Drop-Vorgang bei normalem Drag die Flavors mit Effekt Move und
beim Drag in Verbindung mit Drücken der Steuerungstaste die Flavors mit Effekt
Copy verwendet.
April 2001 75
SAP Control Framework SAP AG
get
76 April 2001
SAP AG SAP Control Framework
get_handle
get_handle
Die Methode liefert das Handle auf die Drag&Drop-Beschreibung. In den meisten Fällen ist ein
Aufruf dieser Methode nicht nötig. Für tabellarische Massendatenschnittstellen (z.B. SAP Tree
Control) muß dieses Handle aber vom Verwender des Controls in die Schnittstellentabelle kopiert
werden.
CALL METHOD dragdrop->get_handle
IMPORTING handle = handle
EXCEPTIONS obj_invalid = 1.
Parameter Bedeutung
handle Handle auf die Drag&Drop-Beschreibung
Ausnahmen Bedeutung
obj_invalid Das Objekt wurde bereits mit der Methode destroy [Seite 74] zerstört
April 2001 77
SAP Control Framework SAP AG
modify
modify
Mit dieser Methode können Sie einen bestehenden Flavor verändern.
CALL METHOD dragdrop->modify
EXPORTING flavor = flavor
dragsrc = dragsrc
droptarget = droptarget
effect = effect
effect_in_ctrl = effect_in_ctrl
EXCEPTIONS not_found = 1
obj_invalid = 2.
Parameter Bedeutung
flavor Bezeichnung des Flavors
dragsrc 'X': Beschreibung ist eine Drag-Quelle
droptarget 'X': Beschreibung ist ein Drop-Ziel
effect Drop-Effekt der Beschreibung zwischen verschiedenen Custom Controls.
Folgende Effekte werden unterstützt:
dragdrop->copy: Darstellung der Maus beim Drag&Drop als Kopiervorgang
dragdrop->move: Darstellung der Maus beim Drag&Drop als
Verschiebevorgang
dragdrop->none: Es ist kein Drag&Drop möglich
effect_in_ctrl Drop-Effekt der Beschreibung im gleichen Custom Controls. Folgende Effekte
werden unterstützt:
dragdrop->copy: Darstellung der Maus beim Drag&Drop als Kopiervorgang
dragdrop->move: Darstellung der Maus beim Drag&Drop als
Verschiebevorgang
dragdrop->none: Es ist kein Drag&Drop möglich
dragdrop->use_default_effect: Es wird der gleiche Effekt benutzt, der
durch den Parmeter effect spezifiziert wurde
Ausnahmen Bedeutung
not_found Der angegebene Flavor existiert nicht
obj_invalid Das Objekt wurde bereits mit der Methode destroy [Seite 74] zerstört
Wird bei der Definition des Flavors sowohl der Effekt copy als auch move benutzt,
wird beim Drag&Drop-Vorgang bei normalem Drag die Flavors mit Effekt Move und
beim Drag in Verbindung mit Drücken der Steuerungstaste die Flavors mit Effekt
Copy verwendet.
78 April 2001
SAP AG SAP Control Framework
modify
April 2001 79
SAP Control Framework SAP AG
remove
remove
Mit dieser Methode löschen Sie einen bestimmten Flavor.
CALL METHOD dragdrop->remove
EXPORTING flavor = flavor
EXCEPTIONS not_found = 1
obj_invalid = 2.
Parameter Bedeutung
flavor Bezeichnung des Flavors
Ausnahmen Bedeutung
not_found Der angegebene Flavor existiert nicht
obj_invalid Das Objekt wurde bereits mit der Methode destroy [Seite 74] zerstört
80 April 2001
SAP AG SAP Control Framework
Methoden der Klasse CL_DRAGDROPOBJECT
April 2001 81
SAP Control Framework SAP AG
set_flavor
set_flavor
Diese Methode verwenden Sie nur innerhalb der Ereignisbehandlung zu ONGETFLAVOR. Über
den Parameter newflavor bestimmen Sie, welcher Flavor innerhalb des Drag&Drop-Vorgangs
verwendet werden soll. Eine Liste der verfügbaren Flavors wird Ihnen als Ereignisparameter
übergeben.
CALL METHOD dragdropobject->set_flavor
EXPORTING newflavor = newflavor
EXCEPTIONS illegal_state = 1
illegal_flavor = 2.
Parameter Bedeutung
newflavor Bezeichnung des Flavors
Ausnahmen Bedeutung
invalid_state Die Methode wurde nicht innerhalb der Ereignisbehandlung ONGETFLAVOR
aufgerufen.
obj_invalid Es wurde ein Flavor verwendet, der nicht von der aktuellen Drag&Drop-
Situation unterstützt wird.
82 April 2001
SAP AG SAP Control Framework
abort
abort
Der Drag&Drop-Vorgang wird sofort abgebrochen. Es werden keine weiteren Ereignisse
ausgelöst.
CALL METHOD dragdropobject->abort.
April 2001 83