Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener...

34
Bonn Boston Harald Röser Praxisworkshop SAP-Controls und SAP List Viewer

Transcript of Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener...

Page 1: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Bonn � Boston

Harald Röser

Praxisworkshop SAP-Controls und SAP List Viewer

1558.book Seite 3 Montag, 3. Mai 2010 10:37 10

Page 2: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

5

Inhalt

9

1 Einleitung ............................................................................ 9

15

2 Klassische Controls ............................................................. 15

2.1 Tabstrip Control .................................................................... 162.2 Table Control ......................................................................... 19

23

3 SAP Control Framework ...................................................... 23

3.1 Architektur ............................................................................ 233.2 Automation Queue ................................................................ 243.3 Ereignisbehandlung ............................................................... 283.4 Lifetime Management ............................................................ 303.5 Klassenhierarchie ................................................................... 303.6 Testen einer Applikation ........................................................ 31

35

4 Custom Container mit Picture Controls .............................. 35

4.1 Grundprogramm .................................................................... 364.2 Controls für Container und Picture ........................................ 414.3 Methodenaufruf .................................................................... 474.4 Ereignisbehandlung ............................................................... 51

4.4.1 Systemereignis ......................................................... 594.4.2 Applikationsereignis ................................................. 614.4.3 Empfehlung ............................................................. 63

65

5 Container Controls .............................................................. 65

5.1 Custom Container Control ..................................................... 665.2 Dialogbox-Container-Control ................................................. 705.3 Docking Container Control .................................................... 755.4 Splitter Container Control ...................................................... 795.5 Easy Splitter Container Control .............................................. 84

91

6 SAP HTML Viewer ............................................................... 91

103

7 SAP TextEdit ........................................................................ 103

1558.book Seite 5 Montag, 3. Mai 2010 10:37 10

Page 3: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Inhalt

6

111

8 SAP Toolbar ......................................................................... 111

123

9 SAP Tree und Tree Model .................................................... 123

9.1 SAP Simple Tree .................................................................... 1259.2 SAP Column Tree ................................................................... 1409.3 SAP List Tree ......................................................................... 1519.4 SAP Tree Model .................................................................... 158

167

10 SAP ALV Grid ....................................................................... 167

10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ...... 16810.2 ALV Grid mit Anzeigevariante ................................................ 17510.3 ALV Grid mit wählbarem Layout zum Datenbereich ............... 17810.4 ALV Grid mit Toolbar ............................................................. 18310.5 ALV Grid mit Feldkatalog ....................................................... 19310.6 ALV Grid mit Doppelklick-Ereignis und Hotspot .................... 199

205

11 Kontextmenü ...................................................................... 205

11.1 Kontextmenü zum Picture Control ......................................... 20611.2 Kontextmenü zum Tree Control und Tree Model ................... 21211.3 Kontextmenü zum ALV Grid Control ...................................... 215

221

12 Drag & Drop ........................................................................ 221

12.1 Ablauf des Drag&Drop-Vorgangs ........................................... 22312.2 Ereignisse zum Drag&Drop-Vorgang ...................................... 22312.3 Erstellen einer Beispiel-Applikation ........................................ 224

239

13 Desktop-Office-Integration ................................................ 239

13.1 Integration von Office-Applikationen ..................................... 24213.2 Integration von MS Excel-Funktionen .................................... 258

269

14 SAP List Viewer ................................................................... 269

14.1 ALV-Objektmodell ................................................................. 26914.2 Einfache, zweidimensionale Tabellenausgabe ......................... 272

14.2.1 Darstellungsarten ..................................................... 27314.2.2 Tabellenobjekte ....................................................... 276

1558.book Seite 6 Montag, 3. Mai 2010 10:37 10

Page 4: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Inhalt

7

14.2.3 Layouteigenschaften ................................................ 27614.2.4 Spalteneigenschaften ............................................... 27814.2.5 Ausnahmespalten .................................................... 28214.2.6 Icon-Spalte .............................................................. 28314.2.7 Steuerspalte für Währung, Mengeneinheit und

Dezimalstellen ......................................................... 28514.2.8 Steuerspalte für Farben ............................................ 28614.2.9 Funktionen .............................................................. 28814.2.10 Ereignisse ................................................................. 29314.2.11 Markierungsspalte ................................................... 29714.2.12 Layoutverwaltung .................................................... 29914.2.13 Kopf- und Fußzeilen ................................................ 302

14.3 Hierarchisch-sequenzielle ALV-Liste ...................................... 30514.4 ALV-Liste mit Baumstruktur ................................................... 307

313

Anhang ................................................................................ 313

A Beispielprogramme .......................................................................... 315B Testdaten am Frontend-PC ............................................................... 319C Online-Dokumentation .................................................................... 321D Der Autor ........................................................................................ 323

Index ........................................................................................................ 325

1558.book Seite 7 Montag, 3. Mai 2010 10:37 10

Page 5: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

65

5 Container Controls

Wie bereits gezeigt, kann das GUI-Control nicht direkt auf einem Dynproplatziert werden. Es wird vielmehr innerhalb eines sogenannten Containersdargestellt, der für die Visualisierung des GUI-Controls sorgt. Nur ContainerControls können auf dem Dynpro angeordnet werden. Da Container selbstControls sind, können Container auch ineinander geschachtelt werden. DieContainer Controls sind in eine Klassenhierarchie gemäß Abbildung 5.1 ein-gebunden.

Abbildung 5.1 Klassenhierarchie der Container Controls

Es werden folgende Container Controls unterschieden, die sich alle aus derKlasse CL_GUI_CONTROL ableiten:

� Custom Container (Klasse CL_GUI_CUSTOM_CONTAINER)Der Custom Container wird innerhalb eines Dynpros angezeigt. Auf demDynpro ist hierfür ein Bereich mit dem Screen Painter zu definieren unddieser an den Custom Container zu binden.

CL_GUI_CONTROL

CL_GUI_DOCKING_CONTAINER

CL_GUI_DIALOGBOX_CONTAINER

CL_GUI_SPLITTER_CONTAINER

CL_GUI_EASY_SPLITTER_CONTAINER

CL_GUI_CUSTOM_CONTAINER

CL_GUI_CONTAINER

1558.book Seite 65 Montag, 3. Mai 2010 10:37 10

Page 6: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Container Controls5

66

� Dialogbox-Container (Klasse CL_GUI_DIALOGBOX_CONTAINER)Der Dialogbox-Container wird in einem eigenen amodalen Dialogfensterdargestellt und ohne eigenen Bereich direkt an das Dynpro gebunden.

� Docking Container (Klasse CL_GUI_DOCKING_CONTAINER)Der Docking Container wird an einem der vier Ränder des Dynpros ange-bunden. Das Dynpro wird dabei zugunsten des Containers verkleinert.

� Splitter Container (Klasse CL_GUI_SPLITTER_CONTAINER)Der Splitter Container stellt mehrere Bereiche für GUI-Controls zur Verfü-gung. Er kann nicht direkt an ein Dynpro gebunden werden, sondernbenötigt einen Custom oder Docking Container, d.h. eine Schachtelungvon Containern.

� Easy Splitter Container (Klasse CL_GUI_EASY_SPLITTER_CONTAINER)Der Easy Splitter Container stellt als Sonderfall des Splitter Containerszwei Bereiche für GUI-Controls zur Verfügung, die durch einen verschieb-baren Trennbalken getrennt sind.

Die Container Controls sind mit Ausnahme der Splitter Container fest einemDynpro zugeordnet. Möchte man dasselbe GUI-Control auch zu einem ande-ren Dynpro anzeigen, wäre es sehr ungeschickt, den Container samt inklu-diertem Control komplett abzubauen und mit dem folgenden Dynpro wie-der aufzubauen. Hierfür stellt die Klasse die Methode link bereit, die eserlaubt, einen Container samt Control an ein anderes Dynpro zu binden.Man spricht hier auch von Re-Link.

5.1 Custom Container Control

Zunächst legen wir den Modulpool ZCFW_20_CUSTOM_CONTAINER alsKopie des Modulpools ZCFW_10_PICTURE inklusive aller Includes an undbenennen diese entsprechend um. Vergeben Sie als GUI-Titel einen passen-den Namen für das Beispielprogramm. Legen Sie jetzt noch für die Kopieeinen Transaktionscode ZCFW_20 an und geben Sie als Startdynpro 100 vor.Das Programm sollte sich jetzt mittels Transaktionscode starten lassen unddas Bild aus dem lokalen Laufwerk am Dynpro anzeigen.

Achten Sie darauf, dass der Bereich auf dem Dynpro resize-fähig ist. DieAnbindung der Instanz ist über diesen Bereich, die Dynpronummer und denProgrammnamen eindeutig zugeordnet. Werden die Parameter für Dynpro-nummer und Programmnamen nicht vorgegeben, werden die zur Laufzeitaktuellen Werte verwendet:

1558.book Seite 66 Montag, 3. Mai 2010 10:37 10

Page 7: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Custom Container Control 5.1

67

*---------------------------------------** Instanz zum Custom Container anlegen*---------------------------------------* CREATE OBJECT obj_custom_container EXPORTING* PARENT = CONTAINER_NAME = 'DYNPRO_CONTAINER'* STYLE =* LIFETIME = * lifetime_default* REPID =* DYNNR =* NO_AUTODEF_PROGID_DYNNR = EXCEPTIONS CNTL_ERROR = 1 CNTL_SYSTEM_ERROR = 2 CREATE_ERROR = 3 LIFETIME_ERROR = 4 LIFETIME_DYNPRO_DYNPRO_LINK = 5 others = 6. IF SY-SUBRC <> 0. MESSAGE i398(00) WITH 'Fehler' sy-subrc 'beim Anlegen des' 'Custom Container Controls'. ENDIF.

Um die Instanz erzeugen zu können, müssen Sie im TOP-Include noch eineObjekt-Referenzvariable deklarieren:

*---------------------------------------** Objekt-Referenzvariable (Custom* Container Control)*---------------------------------------*DATA: obj_custom_container TYPE REF TO cl_gui_custom_container.

Häufig ist es notwendig, das Control auch auf dem Folgedynpro anzuzeigen.Meistens betrifft dies zwar eher den Docking Container, aber die Vorgehens-weise ist bei allen Container Controls die gleiche.

Für unser Beispiel brauchen wir ein weiteres Dynpro. Legen Sie ein Dynpro200 an, mit einem Dynprobereich wie bereits auf dem Dynpro 100. Damitwir die Dynpros zur Laufzeit unterscheiden können, platzieren Sie auf beideDynpros einen statischen Text, der sie identifiziert. Den Dynprobereichen

1558.book Seite 67 Montag, 3. Mai 2010 10:37 10

Page 8: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Container Controls5

68

geben Sie jetzt noch eindeutige Namen und legen in den Dynproeigenschaf-ten ein statisches Folgedynpro fest (Tabelle 5.1).

Passen Sie jetzt noch den Containernamen bei der Instanzierung des CustomContainer Controls an. Geben Sie hier den Namen DYNPRO_CONTAINER_1vor. Aktivieren Sie das Programm und die Dynpros und starten Sie es.

Nach dem Start wird das Dynpro 100 mit dem Bild angezeigt. Wenn nicht,prüfen Sie noch einmal die Namen der Dynprobereiche und den verwende-ten Containernamen bei der Instanzierung. Mit der Enter-Taste ((¢)) startenSie das Dynpro 200, allerdings ohne Anzeige eines Bildes. Dies ist verständ-lich, da es nur ein Containerobjekt gibt und dieses an das Dynpro 100 gebun-den ist. Mit erneutem Drücken der Enter-Taste starten Sie erneut das Dynpro100 mit Anzeige des Bildes.

Wir möchten durch einen Re-Link des Containers erreichen, dass das Bildsowohl auf dem Dynpro 100 als auch auf dem Dynpro 200 angezeigt wird.Was ist zu tun? Die Funktion zum Re-Link des Containers werden wir alsPBO-Modul realisieren und, abhängig von der aktuellen Dynpronummer,den Container immer an das jeweils aktuelle Dynpro anbinden. Erstellen Siehierzu im PBO-Include folgendes PBO-Modul RELINK_CONTAINER:

*&--------------------------------------**& Module relink_container OUTPUT*&--------------------------------------** Vorhandenen Container auf Dynpro linkenMODULE relink_container OUTPUT. DATA l_container(128) TYPE c. CLEAR l_container. CASE sy-dynnr. WHEN 0100. l_container = 'DYNPRO_CONTAINER_1'. WHEN 0200. l_container = 'DYNPRO_CONTAINER_2'. ENDCASE. CALL METHOD obj_custom_container->link EXPORTING* REPID =

Dynpro Dynprobereich Folgedynpro

100 DYNPRO_CONTAINER_1 200

200 DYNPRO_CONTAINER_2 100

Tabelle 5.1 Dynpros und Folgedynpros

1558.book Seite 68 Montag, 3. Mai 2010 10:37 10

Page 9: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Custom Container Control 5.1

69

* DYNNR = CONTAINER = l_container EXCEPTIONS CNTL_ERROR = 1 CNTL_SYSTEM_ERROR = 2 LIFETIME_DYNPRO_DYNPRO_LINK = 3 others = 4. IF SY-SUBRC <> 0. MESSAGE i398(00) WITH 'Fehler' sy-subrc 'beim Re-Link zum Container'. ENDIF.ENDMODULE. " relink_container OUTPUT

Nun ist das PBO-Modul noch in die Ablauflogik zu den beiden Dynpros auf-zunehmen (Listings 5.1 und 5.2).

PROCESS BEFORE OUTPUT. MODULE status_0100. MODULE create_objects. MODULE show_picture. MODULE relink_container. * PROCESS AFTER INPUT. MODULE user_command_0100. MODULE exit_command_0100 AT EXIT-COMMAND.

Listing 5.1 Ablauflogik zum Dynpro 100

PROCESS BEFORE OUTPUT. * MODULE status_0200. MODULE relink_container. * PROCESS AFTER INPUT. * MODULE user_command_0200.

Listing 5.2 Ablauflogik zum Dynpro 200

Wenn Sie jetzt das Programm mittels Transaktionscode starten, wird das Bildsowohl auf dem Dynpro 100 als auch auf dem Dynpro 200 angezeigt,obwohl es nur einen Container mit dem Picture Control gibt. Weitere Infor-mationen zu diesem und allen weiteren Containern finden Sie in der Online-Dokumentation unter SAP-Bibliothek � Basis � Controls_&_Control_

Framework_(BC-CI) � SAP_Container.

1558.book Seite 69 Montag, 3. Mai 2010 10:37 10

Page 10: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Container Controls5

70

5.2 Dialogbox-Container-Control

Der Dialogbox-Container ist ein eigenes, amodales Dialogfenster, das Sie freiam Bildschirm bewegen können. Im Gegensatz zum Custom Container gibtes dabei keinen festen Bereich auf dem Dynpro. Bei der Instanzierung kön-nen Sie einen Fenstertitel und die Größe des Fensters festlegen. Das Controlbesitzt das Ereignis Close. Damit können Sie auf das Auslösen des Close-But-tons reagieren und in der Behandlermethode das Control abbauen und dieObjekt-Referenzvariable initialisieren.

Für das Beispielprogramm ZCFW_21_DIALOGBOX erstellen Sie zunächstwieder ein Dialog-Grundprogramm, wie in Abschnitt 4.1 beschrieben. Die-ses besteht zunächst aus dem Transaktionscode ZCFW_21, dem Modulpoolmit dem TOP-Include und den PBO- und PAI-Include, einem GUI-Status und-Titel sowie dem Startdynpro mit dem OK-Feld. Das Grundprogramm mit allseinen Objekten wird aktiviert und kann für einen ersten Test auch schongestartet werden. Beendet wird es über die Icons in der Symbolleiste.

In unserem Beispielprogramm wollen wir nun nach Drücken einer Taste inder Drucktastenleiste ein Fenster mit Anzeige eines Bildes ausgeben. Für diebenötigten Funktionen zum Instanzieren, Registrieren des Ereignisses,Laden und Anzeigen des Bildes sowie den Abbau der Controls legen wir eineigenes Include für diese Unterprogramme an. Zeigen Sie mit dem ObjectNavigator (Transaktion SE80) das Programm an. Wählen Sie den Objektna-men durch Anklicken aus. Rufen Sie mit der rechten Maustaste das Kontext-menü auf und wählen Sie die Menüpunkte Anlegen � Include zum Anlegendes Includes aus. Nennen Sie das Include ZCFW_21_DIALOGBOX_UP. Indem Programm wird eine entsprechende Include-Anweisung eingefügt.Damit ergibt sich nun folgende Implementierung für das Programm:

*&--------------------------------------**& Modulpool ZCFW_21_DIALOGBOX*&--------------------------------------*INCLUDE ZCFW_21_DIALOGBOX_TOP.INCLUDE ZCFW_21_DIALOGBOX_PBO.INCLUDE ZCFW_21_DIALOGBOX_PAI.INCLUDE ZCFW_21_DIALOGBOX_UP.

Als Nächstes ergänzen wird den GUI-Status um den Funktionscode SHOWund legen einen Button auf der Drucktastenleiste an. Im PAI-Modul USER_COMMAND_0100 sehen wir den Aufruf folgender Unterprogramme vor:

1558.book Seite 70 Montag, 3. Mai 2010 10:37 10

Page 11: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Dialogbox-Container-Control 5.2

71

*&--------------------------------------**& Module USER_COMMAND_0100 INPUT*&--------------------------------------** Benutzeraktion abfragen*---------------------------------------*MODULE user_command_0100 INPUT. save_okcode = okcode. CLEAR okcode. CASE sy-dynnr. WHEN 0100. CASE save_okcode. WHEN 'EXIT'. LEAVE PROGRAM. WHEN 'BACK'. LEAVE TO SCREEN 100. WHEN 'SHOW'. PERFORM create_objects. PERFORM register_events. PERFORM show_picture. ENDCASE. ENDCASE.ENDMODULE. " USER_COMMAND_0100 INPUT

Durch Doppelklick auf die Namen der Unterprogramme können wir dieseganz einfach im UP-Include nacheinander anlegen.

Bevor wir nun die Unterprogramme implementieren, müssen wir im TOP-Include noch die benötigten Objekt-Referenzvariablen definieren. Darüberhinaus wollen wir für die Ereignisbehandlung schon einmal die lokale Klassemit der Behandlermethode und die Objekt-Referenzvariable für die Instanzzu dieser lokalen Klasse vorsehen. Damit ergibt sich für das TOP-Include zuunserem Beispiel folgende Codierung:

*&--------------------------------------**& Include ZCFW_21_DIALOGBOX_TOP **& **&--------------------------------------*PROGRAM ZCFW_21_DIALOGBOX.

*---------------------------------------** Definition zum Control Framework*---------------------------------------*CLASS cl_gui_cfw DEFINITION LOAD.

*---------------------------------------** Objekt-Referenzvariablen (Anwender-* Control)*---------------------------------------*

1558.book Seite 71 Montag, 3. Mai 2010 10:37 10

Page 12: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Container Controls5

72

DATA: obj_dialogbox_container TYPE REF TO cl_gui_dialogbox_container, obj_picture TYPE REF TO cl_gui_picture.

*---------------------------------------** Klasse zum Event Handler und * Objektreferenz definieren*---------------------------------------*INCLUDE ZCFW_21_DIALOGBOX_CL.DATA: obj_event_receiver TYPE REF TO cl_event_receiver.

*---------------------------------------** Benutzeraktion*---------------------------------------*DATA: okcode TYPE sy-ucomm, save_okcode TYPE sy-ucomm.

Mit einem Doppelklick auf das Include ZCFW_21_DIALOGBOX_CL werdenwir dieses für die lokale Klasse mit der Behandlermethode zum Close-Ereig-nis schon einmal anlegen. Auf die Realisierung dieser lokalen Klasse kom-men wir später noch.

Als Nächstes werden wir nun im Unterprogramm CREATE_OBJECTS eineInstanz zur Klasse CL_GUI_DIALOGBOX_CONTAINER sowie zur Klasse CL_GUI_PICTURE anlegen. Wir werden zwar beide Controls über das Close-Ereignisjeweils immer komplett abbauen, aber trotzdem sicherheitshalber abfragen,ob es bereits ein Objekt zu diesen Klassen gibt. Über Parameter lässt sich beider Instanzierung festlegen, an welcher Position und in welcher Größe dasFenster dargestellt und welcher Titel im Fenster ausgegeben werden soll:

*&--------------------------------------**& Form create_objects*&--------------------------------------** Instanz anlegen*---------------------------------------*FORM create_objects. IF NOT obj_dialogbox_container IS INITIAL. EXIT. ENDIF.*---------------------------------------** Instanz zum Dialogbox-Container-* Control anlegen*---------------------------------------*

1558.book Seite 72 Montag, 3. Mai 2010 10:37 10

Page 13: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Dialogbox-Container-Control 5.2

73

CREATE OBJECT obj_dialogbox_container EXPORTING* PARENT = WIDTH = 400 "Breite HEIGHT = 160 "Höhe* STYLE =* REPID =* DYNNR =* LIFETIME = lifetime_default TOP = 80 "Abstand nach oben LEFT = 300 "Abstand von links CAPTION = 'Bild anzeigen'* NO_AUTODEF_PROGID_DYNNR =* METRIC = 0* NAME = EXCEPTIONS CNTL_ERROR = 1 CNTL_SYSTEM_ERROR = 2 CREATE_ERROR = 3 LIFETIME_ERROR = 4 LIFETIME_DYNPRO_DYNPRO_LINK = 5 EVENT_ALREADY_REGISTERED = 6 ERROR_REGIST_EVENT = 7 others = 8. IF SY-SUBRC <> 0. MESSAGE i398(00) WITH 'Fehler' sy-subrc 'beim Anlegen des' 'Dialogbox-Container-Controls'. ENDIF.*---------------------------------------** Instanz zum Picture Control anlegen*---------------------------------------* CREATE OBJECT obj_picture EXPORTING* LIFETIME =* SHELLSTYLE = PARENT = obj_dialogbox_container* NAME = EXCEPTIONS ERROR = 1 others = 2. IF SY-SUBRC <> 0. MESSAGE i398(00) WITH 'Fehler' sy-subrc 'beim Anlegen des 'Picture Controls'.

1558.book Seite 73 Montag, 3. Mai 2010 10:37 10

Page 14: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Container Controls5

74

ENDIF.ENDFORM. " create_objects

Das Close-Ereignis zur Klasse CL_GUI_DIALOGBOX_CONTAINER muss nicht amFrontend angemeldet werden. Es ist aber notwendig, das Ereignis über dieRegistrierung einer Behandlermethode zuzuordnen. Da wir die Instanzimmer wieder komplett abbauen, registrieren wir das Close-Ereignis für alleInstanzen der Klasse. Dies realisieren wir im Unterprogramm REGISTER_EVENTS:

FORM register_events.*---------------------------------------** Events als Systemereignis beim * CFW anmelden*---------------------------------------** nicht notwendig*---------------------------------------** Event Handler anlegen und Ereignisse * registrieren*---------------------------------------* IF obj_event_receiver IS INITIAL. CREATE OBJECT obj_event_receiver. SET HANDLER obj_event_receiver->on_dialogbox_close FOR ALL INSTANCES. ENDIF.ENDFORM. " register_events

Als letztes Unterprogramm in der PAI-Bearbeitung haben wir das Unterpro-gramm SHOW_PICTURE vorgesehen. Dieses Unterprogramm entspricht inder Codierung dem gleichnamigen PBO-Modul aus dem BeispielprogrammZCFW_20_CUSTOM_CONTAINER.

Zum Schluss sehen wir noch eine lokale Klasse mit einer Behandlermethodefür das Close-Ereignis in dem bereits angelegten CL-Include vor. In dieserwerden wir wie immer die Instanzen komplett abbauen:

****************************************** CLASS cl_event_receiver* DEFINITION*****************************************CLASS cl_event_receiver DEFINITION. PUBLIC SECTION. METHODS on_dialogbox_close FOR EVENT CLOSE OF cl_gui_dialogbox_container IMPORTING SENDER.ENDCLASS.

1558.book Seite 74 Montag, 3. Mai 2010 10:37 10

Page 15: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Docking Container Control 5.3

75

****************************************** CLASS cl_event_receiver* IMPLEMENTATION*****************************************CLASS cl_event_receiver IMPLEMENTATION.*---------------------------------------** METHOD on_dialogbox_close*---------------------------------------* METHOD on_dialogbox_close. IF NOT obj_picture IS INITIAL. CALL METHOD obj_picture->free. FREE obj_picture. ENDIF. IF NOT obj_dialogbox_container IS INITIAL. CALL METHOD obj_dialogbox_container->free. FREE obj_dialogbox_container. ENDIF.* Synchronisieren der Automation Queue CALL METHOD cl_gui_cfw=>flush EXCEPTIONS CNTL_SYSTEM_ERROR = 1 CNTL_ERROR = 2 others = 3. IF SY-SUBRC <> 0. MESSAGE i398(00) WITH 'Fehler' sy-subrc 'bei FLUSH'. ENDIF. ENDMETHOD.ENDCLASS.

Da wir in der Behandlermethode kein PAI-Ereignis auslösen, kommt es auchnicht zu einer automatischen Synchronisation der Automation Queue. Mitder Methode flush stoßen wir deshalb die Synchronisation explizit an.

5.3 Docking Container Control

Mit dem Docking Container haben Sie die Möglichkeit, den Dynprobereichfür das GUI-Control an eine der vier Seiten des Dynpros anzubinden (sieheAbbildung 5.2). Das Dynpro wird hierbei um die Größe des Docking Contai-ners verkleinert. Prinzipiell ist es möglich, mehrere Docking Container andas Dynpro anzubinden und dies sogar auf der gleichen Seite. Allerdings ver-liert man dann sehr schnell die Übersicht.

1558.book Seite 75 Montag, 3. Mai 2010 10:37 10

Page 16: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Container Controls5

76

Abbildung 5.2 Anbindung des Docking Containers

Für unser Beispielprogramm nehmen wir das Programm ZCFW_10_PIC-TURE als Vorlage. Kopieren Sie das komplette Programm, und benennen Siedie Objekte in ZCFW_22_DOCKING_CONTAINER um. Legen Sie nun fürIhre Kopie noch den Transaktionscode an. Geben Sie dem Programm schoneinmal einen passenden GUI-Titel und testen Sie es, um sicherzustellen, dassalles richtig kopiert und umbenannt wurde.

Nun werden wir Schritt für Schritt den Custom Container durch einenDocking Container ersetzen. Als Erstes können wir den Bereich für das Cus-tom Control auf dem Dynpro löschen. Im TOP-Include passen wir dieObjekt-Referenzvariable für das Container Control mit folgender Typisie-rung an:

DATA: obj_docking_container TYPE REF TO cl_gui_docking_container.

Im Unterprogramm FREE_OBJECTS ist die Methode free zum Abbauen derInstanz auf das Objekt zum Docking Container anzuwenden:

CALL METHOD obj_docking_container->free.FREE obj_docking_container.

Im PBO-Modul CREATE_OBJECTS werden wir die Objekte wie folgt anle-gen:

*&--------------------------------------**& Module create_objects OUTPUT*&--------------------------------------** Instanzen anlegen*---------------------------------------*MODULE create_objects OUTPUT. IF NOT obj_docking_container IS INITIAL.

dock

_at_

left

dock

_at_

righ

t

dock_at_top

dock_at_bottom

Dynpro

Docking Container

1558.book Seite 76 Montag, 3. Mai 2010 10:37 10

Page 17: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Docking Container Control 5.3

77

EXIT. ENDIF.*---------------------------------------** Instanz zum Docking Container Control * anlegen*---------------------------------------* CREATE OBJECT obj_docking_container EXPORTING* PARENT =* REPID =* DYNNR = SIDE = obj_docking_container->dock_at_left EXTENSION = 200* STYLE =* LIFETIME = lifetime_default* CAPTION =* METRIC = 0* RATIO =* NO_AUTODEF_PROGID_DYNNR =* NAME = EXCEPTIONS CNTL_ERROR = 1 CNTL_SYSTEM_ERROR = 2 CREATE_ERROR = 3 LIFETIME_ERROR = 4 LIFETIME_DYNPRO_DYNPRO_LINK = 5 others = 6. IF SY-SUBRC <> 0. MESSAGE i398(00) WITH 'Fehler' sy-subrc 'beim Anlegen des 'Docking Container Controls'. ENDIF.*---------------------------------------** Instanz zum Picture Control anlegen*---------------------------------------* CREATE OBJECT obj_picture EXPORTING* LIFETIME =* SHELLSTYLE = PARENT = obj_docking_container* NAME = EXCEPTIONS ERROR = 1 others = 2.

1558.book Seite 77 Montag, 3. Mai 2010 10:37 10

Page 18: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Container Controls5

78

IF SY-SUBRC <> 0. MESSAGE i398(00) WITH 'Fehler' sy-subrc 'beim Anlegen des' 'Picture Controls'. ENDIF.ENDMODULE. " create_objects OUTPUT

An den anderen beiden PBO-Modulen und den PAI-Modulen sind keineAnpassungen vorzunehmen. Sie können jetzt das Programm aktivieren undmittels Transaktionscode starten. Sie sollten jetzt links neben dem eigentli-chen Dynpro den Docking Container sehen, in dem das Bild mittels des Pic-ture Controls ausgegeben wird (siehe Abbildung 5.3). Die Breite des DockingControls können Sie durch einfaches Ziehen des Trennbalkens beliebig ver-ändern, sie kann aber auch über Parameter bei der Instanzierung mit einerbeliebigen Voreinstellung ausgegeben werden.

Abbildung 5.3 Breite des Docking Containers anpassen

Für das Andocken des Containers an das Dynpro stehen die in Tabelle 5.2aufgeführten Parameterwerte zur Verfügung.

Verschieben der Trennlinie

1558.book Seite 78 Montag, 3. Mai 2010 10:37 10

Page 19: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Splitter Container Control 5.4

79

Gerade den Docking Container möchte man häufig mit unverändertemInhalt an ein Folgedynpro anbinden. Benutzen Sie hierfür die beim CustomControl Container beschriebene Relink-Funktion. Ebenfalls zur Laufzeit lässtsich über die Methode dock_at die Seite festlegen, an die der Containergeknüpft wird.

5.4 Splitter Container Control

Der Splitter Container wird nicht an ein Dynpro gebunden. Er kann nur ineinem anderen Container, zum Beispiel dem Docking Container, angezeigtwerden. Die Zellen eines Splitter Containers dienen als Container-Bereichefür andere Controls. Dies können wiederum Container Controls oder GUI-Controls sein. Die Zellen sind in Zeilen und Spalten angeordnet und durcheine Trennlinie horizontal und vertikal voneinander getrennt. Durch Ver-schieben dieser Trennlinie kann man die Größe der Controls zur Laufzeitändern. Diese Möglichkeit kann zu- und abgeschaltet werden, ebenso wiedie Sichtbarkeit der Trennlinie. Das Gitter des Splitter Containers ist initialauf 0 × 0 eingestellt und lässt sich auf maximal 16 × 16 einstellen.

Wir werden für unser Beispiel als Kopiervorlage das Programm ZCFW_10_PICTURE verwenden. Erstellen Sie hiervon eine Kopie ZCFW_23_SPLITTER_CONTAINER, und benennen Sie die Komponenten entsprechend in ZCFW_23_... um. Legen Sie für die Programmkopie eine Transaktion ZCFW_23 anund geben Sie einen passenden GUI-Titel vor. Nachdem alle Komponentenaktiviert wurden, sollte das neue Beispiel lauffähig sein.

Den Splitter Container werden wir in den Custom Container einbinden. Wirsehen vier Zellen in zwei Zeilen und zwei Spalten vor. In jeder der Zellenwerden wir wieder unser Bild ausgeben. Damit soll unser Beispielprogrammam Bildschirm eine Darstellung anzeigen wie in Abbildung 5.4.

Parameterwert Bedeutung

dock_at_left Anbindung an den linken Rand

dock_at_top Anbindung an den oberen Rand

dock_at_right Anbindung an den rechten Rand

dock_at_bottom Anbindung an den unteren Rand

Tabelle 5.2 Klassenkonstante für Parameter SIDE zum Konstruktor

1558.book Seite 79 Montag, 3. Mai 2010 10:37 10

Page 20: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Container Controls5

80

Abbildung 5.4 Beispiel für Splitter Container

Für die Zuweisung der Instanzen des Picture Controls zu den Zellen des Split-ter Containers benötigen wir ebenfalls für jede Zelle eine Objekt-Referenzva-riable. Für jedes dieser vier Bilder werden wir eine eigene Instanz zur KlasseCL_GUI_PICTURE anlegen und benötigen im TOP-Include hierfür vier Objekt-Referenzvariablen. Ferner brauchen wir natürlich eine Objekt-Referenzvari-able für den Custom Container und eine für den Splitter Container. Damitergibt sich folgendes TOP-Include:

*&--------------------------------------**& Include ZCFW_23_SPLITTER_CONTAINER_TOP*&--------------------------------------*

PROGRAM ZCFW_23_SPLITTER_CONTAINER.

*---------------------------------------** Definition zum Control Framework*---------------------------------------*CLASS cl_gui_cfw DEFINITION LOAD.

1558.book Seite 80 Montag, 3. Mai 2010 10:37 10

Page 21: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Splitter Container Control 5.4

81

*---------------------------------------** Objekt-Referenzvariablen (Anwender-* Control)*---------------------------------------*DATA: obj_custom_container TYPE REF TO cl_gui_custom_container, obj_splitter_container TYPE REF TO cl_gui_splitter_container, obj_picture_1 TYPE REF TO cl_gui_picture, obj_picture_2 TYPE REF TO cl_gui_picture, obj_picture_3 TYPE REF TO cl_gui_picture, obj_picture_4 TYPE REF TO cl_gui_picture.

*---------------------------------------** Objekt-Referenzvariablen für Zellen des * Splitter Containers werden implizit vom * Splitter Control instanziert*---------------------------------------*DATA: obj_container_1 TYPE REF TO cl_gui_container, obj_container_2 TYPE REF TO cl_gui_container, obj_container_3 TYPE REF TO cl_gui_container, obj_container_4 TYPE REF TO cl_gui_container.

*---------------------------------------** Benutzeraktion*---------------------------------------*DATA: okcode TYPE sy-ucomm, save_okcode TYPE sy-ucomm.

Als Nächstes werden wir die benötigten Instanzen im PBO-Modul CREATE_OBJECTS anlegen. In unserer Kopie können wir die Instanzierung zum Cus-tom Control unverändert übernehmen. Die Instanzierung zum Picture Con-trol ersetzen wir durch eine Instanzierung zum Splitter Container Controlund binden diesen an den Custom Container an. Mit den Parametern ROWSund COLUMNS legen wir die Anzahl der Zeilen und Spalten für das Gitterfest:

1558.book Seite 81 Montag, 3. Mai 2010 10:37 10

Page 22: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Container Controls5

82

*---------------------------------------** Instanz zum Splitter Container Control * anlegen*---------------------------------------* CREATE OBJECT obj_splitter_container EXPORTING* LINK_DYNNR =* LINK_REPID =* SHELLSTYLE =* LEFT =* TOP =* WIDTH =* HEIGHT =* METRIC = * cntl_metric_dynpro* ALIGN = 15 PARENT = obj_custom_container ROWS = 2 COLUMNS = 2* NO_AUTODEF_PROGID_DYNNR =* NAME = EXCEPTIONS CNTL_ERROR = 1 CNTL_SYSTEM_ERROR = 2 others = 3. IF SY-SUBRC <> 0. MESSAGE i398(00) WITH 'Fehler' sy-subrc 'beim Anlegen des' 'Splitter Container Controls'. ENDIF.

Jede dieser vier Zellen stellt einen weiteren Bereich für ein Control dar. Fürdie Zuweisung weiterer Controls zu den einzelnen Zellen des Splitter Contai-ners benötigen wir eine Objektreferenz auf diese Zellen. Mit der Methodeget_container werden wir für jede Zelle eine solche Objektreferenz anle-gen. Den folgenden Code fügen wir an die Instanzierung des Splitter Contai-ners an:

*---------------------------------------** Objektreferenzen des Splitter* Containers zuweisen*---------------------------------------* CALL METHOD obj_splitter_container->get_container EXPORTING ROW = 1

1558.book Seite 82 Montag, 3. Mai 2010 10:37 10

Page 23: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Splitter Container Control 5.4

83

COLUMN = 1 RECEIVING CONTAINER = obj_container_1. CALL METHOD obj_splitter_container->get_container EXPORTING ROW = 1 COLUMN = 2 RECEIVING CONTAINER = obj_container_2. CALL METHOD obj_splitter_container->get_container EXPORTING ROW = 2 COLUMN = 1 RECEIVING CONTAINER = obj_container_3. CALL METHOD obj_splitter_container->get_container EXPORTING ROW = 2 COLUMN = 2 RECEIVING CONTAINER = obj_container_4.

Nun können wir das Stellvertreterobjekt für das Picture Control anlegen. Ins-gesamt benötigen wir vier Instanzen, die wir den einzelnen Zellen zuordnen:

*---------------------------------------** Instanzen zum Picture Control anlegen*---------------------------------------* CREATE OBJECT obj_picture_1 EXPORTING* LIFETIME =* SHELLSTYLE = PARENT = obj_container_1* NAME = EXCEPTIONS ERROR = 1 others = 2. IF SY-SUBRC <> 0. MESSAGE i398(00) WITH 'Fehler' sy-subrc 'beim Anlegen des' '1. Picture Controls'. ENDIF.

Das Gleiche wiederholen wir für die Bilder 2 bis 4. Damit haben wir jetzt allebenötigten Instanzen angelegt. Aufgrund unserer Kopie ist bereits ein PBO-

1558.book Seite 83 Montag, 3. Mai 2010 10:37 10

Page 24: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Container Controls5

84

Modul SHOW_PICTURE vorhanden. Wir benennen dieses in SHOW_PICTURE_1 um und ersetzen im Code den Namen OBJ_PICTURE durch OBJ_PICTURE_1. Durch Kopieren legen wir nun für die Anzeige des zweiten bisvierten Bildes ein PBO-Modul SHOW_PICTURE_<nr> mit den ObjektnamenOBJ_PICTURE_<nr> an. In der PBO-Ablauflogik rufen wir die angelegtenModule der Reihe nach auf:

PROCESS BEFORE OUTPUT. MODULE status_0100. MODULE create_objects. MODULE show_picture_1. MODULE show_picture_2. MODULE show_picture_3. MODULE show_picture_4.*PROCESS AFTER INPUT. MODULE user_command_0100. MODULE exit_command_0100 AT EXIT-COMMAND.

Bitte denken Sie daran, im Unterprogramm FREE_OBJECTS alle Instanzen zuden vier Picture Controls, dem Splitter Container und dem Custom Contai-ner abzubauen. Aktivieren Sie nun alle Programmobjekte, und starten Sie dieTransaktion. Sie sollten jetzt auf dem Dynpro vier Bilder sehen.

5.5 Easy Splitter Container Control

Der Easy Splitter Container ist ein Sonderfall des Splitter Containers mit ein-geschränkter Funktionalität. Mit dem Easy Splitter Container stellen Siegenau zwei Zellen in horizontaler oder vertikaler Anordnung dar.

Als Beispiel werden wir eine Applikation erstellen, in der wir einen DockingContainer in zwei vertikale Bereiche unterteilen und in jedem dieser Berei-che ein Bild ausgeben (siehe Abbildung 5.5). Hierfür verwenden wir das Pro-gramm ZCFW_22_DOCKING_CONTAINER als Kopiervorlage. Erstellen Siedamit ein Programm ZCFW_24_EASY_SPLITTER und benennen Sie die ein-zelnen Komponenten entsprechend in ZCFW_24_<...> um. Legen Sie für dieProgrammkopie eine Transaktion ZCFW_24 an, und geben Sie einen passen-den GUI-Titel vor. Nachdem alle Komponenten aktiviert wurden, sollte dasneue Beispiel bereits lauffähig sein.

1558.book Seite 84 Montag, 3. Mai 2010 10:37 10

Page 25: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Easy Splitter Container Control 5.5

85

Abbildung 5.5 Beispiel für Easy Splitter Container

Den Easy Splitter Container werden wir in den Custom Container einbinden.Wir sehen eine vertikale Aufteilung in zwei Zellen vor. In jeder der Zellenwerden wir wieder unser Bild ausgeben. Für die Zuweisung der Instanzenzum Picture Control zu den Zellen des Easy Splitter Containers benötigen wirebenfalls für jede Zelle eine Objekt-Referenzvariable. Für jedes dieser beidenBilder werden wir eine eigene Instanz zur Klasse CL_GUI_PICTURE anlegenund benötigen im TOP-Include hierfür zwei Objekt-Referenzvariablen. Fer-ner brauchen wir natürlich wieder eine Objekt-Referenzvariable für den Cus-tom Container und eine für den Easy Splitter Container. Damit ergibt sichfolgendes TOP-Include:

1558.book Seite 85 Montag, 3. Mai 2010 10:37 10

Page 26: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Container Controls5

86

*&--------------------------------------**& Include ZCFW_24_EASY_SPLITTER_TOP **&--------------------------------------*

PROGRAM ZCFW_24_EASY_SPLITTER.

*---------------------------------------** Definition zum Control Framework*---------------------------------------*CLASS cl_gui_cfw DEFINITION LOAD.

*---------------------------------------** Objekt-Referenzvariablen (Anwender-* Control)*---------------------------------------*DATA: obj_docking_container

TYPE REF TO cl_gui_docking_container, obj_easy_splitter_container TYPE REF TO cl_gui_easy_splitter_container, obj_picture_1 TYPE REF TO cl_gui_picture, obj_picture_2 TYPE REF TO cl_gui_picture.*---------------------------------------** Objekt-Referenzvariablen für Easy * Splitter Container werden vom Splitter * Control instanziert*---------------------------------------*DATA: obj_container_1 TYPE REF TO cl_gui_container, obj_container_2 TYPE REF TO cl_gui_container.

*---------------------------------------** Benutzeraktion*---------------------------------------*DATA: okcode TYPE sy-ucomm, save_okcode TYPE sy-ucomm.

Als Nächstes werden wir die benötigten Instanzen im PBO-Modul CREATE_OBJECTS anlegen. In unserer Kopie können wir die Instanzierung zumDocking Control unverändert übernehmen. Zusätzlich benötigen wir eineInstanzierung zum Easy Splitter Container Control und binden diesen an denDocking Container an. Mit den Parametern ORIENTATION legen wir dieAnordnung der beiden Zellen wie in Tabelle 5.3 zu sehen fest.

1558.book Seite 86 Montag, 3. Mai 2010 10:37 10

Page 27: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Easy Splitter Container Control 5.5

87

Damit ergibt sich der Aufruf des Konstruktors zur Instanzierung des EasySplitter Container Controls wie folgt:

*----------------------------------------------------------** Instanz zum Easy Splitter Container Control anlegen*----------------------------------------------------------* CREATE OBJECT obj_easy_splitter_container EXPORTING* LINK_DYNNR =* LINK_REPID =* METRIC = cntl_metric_dynpro PARENT = obj_docking_container ORIENTATION = CL_GUI_EASY_SPLITTER_CONTAINER=> orientation_vertical* SASH_POSITION = 50* WITH_BORDER = 1* NAME = EXCEPTIONS CNTL_ERROR = 1 CNTL_SYSTEM_ERROR = 2 others = 3. IF SY-SUBRC <> 0. MESSAGE i398(00) WITH 'Fehler' sy-subrc 'beim Anlegen des Easy Splitter Containers'. ENDIF.

Bevor wir jetzt noch die beiden Instanzen zum Picture Control anlegen, sinddie Objektreferenzen zu den beiden Zellen zu erzeugen. Für die erste Zelleverwenden Sie hierfür, je nach Anordnung, die obere oder die linke Zelle,das Instanzattribut TOP_LEFT_CONTAINER, für die andere Zelle das Instanz-attribut BOTTOM_RIGHT_CONTAINER:

*------------------------------------------------------------** Objektreferenzen zum Easy Splitter Container*------------------------------------------------------------* obj_container_1 = obj_easy_splitter_container->top_left_container. obj_container_2 = obj_easy_splitter_container->bottom_right_ container.

Parameterwert Bedeutung

orientation_vertical Vertikale Anordnung der beiden Zellen

orientation_horizontal Horizontale Anordnung der beiden Zellen

Tabelle 5.3 Werte für die Parameter ORIENTATION zum Konstruktor

1558.book Seite 87 Montag, 3. Mai 2010 10:37 10

Page 28: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Container Controls5

88

Nun können wir die Stellvertreterobjekte für die Picture Controls anle-gen. Insgesamt benötigen wir zwei Instanzen, OBJ_PICTURE_1 und OBJ_PICTURE_2, die wir den einzelnen Zellen des Easy Splitter Containerszuordnen:

*---------------------------------------** Instanzen zum Picture Control anlegen*---------------------------------------* CREATE OBJECT obj_picture_1 EXPORTING* LIFETIME =* SHELLSTYLE = PARENT = obj_container_1* NAME = EXCEPTIONS ERROR = 1 others = 2. IF SY-SUBRC <> 0. MESSAGE i398(00) WITH 'Fehler' sy-subrc 'beim Anlegen des' '1. Picture Controls'. ENDIF. CREATE OBJECT obj_picture_2 EXPORTING* LIFETIME =* SHELLSTYLE = PARENT = obj_container_2* NAME = EXCEPTIONS ERROR = 1 others = 2. IF SY-SUBRC <> 0. MESSAGE i398(00) WITH 'Fehler' sy-subrc 'beim Anlegen des' '2. Picture Controls'. ENDIF.

Damit haben wir jetzt alle benötigten Instanzen angelegt. Aufgrund unsererKopie ist bereits ein PBO-Modul SHOW_PICTURE vorhanden. Wir benen-nen dieses wieder in SHOW_PICTURE_1 um und ersetzen im Code denNamen OBJ_PICTURE durch OBJ_PICTURE_1. Durch Kopieren legen wirnun für die Anzeige des zweiten Bildes ein weiteres PBO-Modul SHOW_PICTURE_2 mit dem Objektnamen OBJ_PICTURE_2 an. In der PBO-Ablauf-logik rufen wir die angelegten Module der Reihe nach auf:

1558.book Seite 88 Montag, 3. Mai 2010 10:37 10

Page 29: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

Easy Splitter Container Control 5.5

89

PROCESS BEFORE OUTPUT. MODULE status_0100. MODULE create_objects. MODULE show_picture_1. MODULE show_picture_2.*PROCESS AFTER INPUT. MODULE user_command_0100. MODULE exit_command_0100 AT EXIT-COMMAND.

Bitte denken Sie daran, im Unterprogramm FREE_OBJECTS alle Instanzen zuden beiden Picture Controls, den Easy Splitter Container und den DockingContainer abzubauen. Aktivieren Sie nun alle Programmobjekte, und startenSie die Transaktion. Sie sollten jetzt neben dem Dynpro den Docking Contai-ner sehen, in dem übereinander die beiden Bilder angezeigt werden. DurchAnklicken und Verschieben der Trennlinien können Sie die Größe der Zellendes Easy Splitter Containers sowie die Breite des Docking Containers ändern.

1558.book Seite 89 Montag, 3. Mai 2010 10:37 10

Page 30: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

325

Index

A

ABAP List Viewer 167, 269ABAP-Anweisung SET HANDLER 28Ablauflogik 15ActiveX Control 23ALV

Ereignisobjekt 293, 294Funktion, generische 288Hauptklasse 269Liste, hierarchisch-sequenzielle 270, 305Objektmodell 269Tabellenobjekt 272

ALV Grid 167Control 167, 215Toolbar 183

Amodales Dialogfenster 70Anweisung CALL SUBSCREEN 18Anweisungsmuster 44Anzeigevariante 175Applikationsereignis 30, 61Ausgabetabelle 168Ausnahme CNTL_ERROR 26Ausnahmespalte 282Automation

Controller 23Queue 24Trace 32, 33

B

Baumstruktur 123, 270, 307Behandlermethode 29, 294Blatt 124, 308Business Document Server 50

C

C_OI_CONTAINER_CONTROL_CREATOR 240, 246

CALL SUBSCREEN 18CFW 23CL_COLUMN_TREE_MODEL 158

CL_CTMENU 205CL_DRAGDROP 221, 222CL_DRAGDROPOBJECT 222CL_GUI_ALV_GRID 167, 184CL_GUI_CFW 26, 30, 31CL_GUI_COLUMN_TREE 144CL_GUI_CONTROL 30, 31CL_GUI_CUSTOM_CONTAINER 239CL_GUI_DIALOGBOX_CONTAINER 72CL_GUI_HTML_VIEWER 91CL_GUI_LIST_TREE 151CL_GUI_OBJECT 30, 31CL_GUI_PICTURE 72CL_GUI_SIMPLE_TREE 125CL_GUI_TEXTEDIT 103CL_LIST_TREE_MODEL 158CL_SALV_FUNCTIONS 290CL_SALV_HIERSEQ_TABLE 306CL_SALV_TABLE 272CL_SALV_TREE 307CL_SIMPLE_TREE_MODEL 158, 159Class Builder 47CNTL 54CNTL_ERROR 26Container Control 65Control Framework 23Control-Ereignis 61Custom Container Control 66

D

Darstellungsart 273Dateninfo 168Debugging 31Desktop-Office-Integration � DOIDialogbox-Container-Control 70Dialogfenster, amodales 70Dialogtransaktion 36DISPLAY 272Docking Container Control 75DOI 239

Container Control 243Document Proxy Control 243

Doppelklick 296Ereignis 199

1558.book Seite 325 Montag, 3. Mai 2010 10:37 10

Page 31: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

326

Index

Drag & Drop 221Handler 228Vorgang 223

E

Easy Splitter Container Control 84Eingabeprüfung 39Ereignis 293

Behandlung 28FLUSH_ERROR 26NODE_CONTEXT_MENU_REQUEST

212Objekt 293, 294Tabelle 28

Ergebnisparameter 26Excel 242

Integration 240, 258EXIT_COMMAND_0100 40Expandersymbol 134

F

FACTORY 272Farbenspalte 286Feld ON_CTMENU 205Feldkatalog 168, 193Filterbedingung 299Flavor 222Flow-Layoutelement 303Flush 25FLUSH_ERROR 26Folgedynpro 68Formularfeld 241Funktionenobjekt 288Funktionstyp 39

G

Gestaltungsobjekt 302Grid-Layoutelement 303Grundprogramm 36GUI

Status 37, 289Titel 37

H

Hierarchiebereich 125, 140Hierarchiespalte 307Hierarchische Liste 123Hierarchisch-sequenzielle Liste 270, 305Hotspot 199HTML Viewer Control 91

I

i_oi_container_control 239, 246i_oi_document_proxy 240I_OI_ERROR 242i_oi_spreadsheet 241, 258Icon-Spalte 283Initialtabelle 307Interface

i_oi_container_control 239, 246i_oi_document_proxy 240i_oi_spreadsheet 241, 258

Internetbrowser 91Item 307

Tabelle 141

J

JavaBean 23

K

KlasseC_OI_CONTAINER_CONTROL_

CREATOR 240, 246CL_COLUMN_TREE_MODEL 158CL_CTMENU 205CL_DRAGDROP 221, 222CL_DRAGDROPOBJECT 222CL_GUI_ALV_GRID 167, 184CL_GUI_CFW 26, 30, 31CL_GUI_COLUMN_TREE 144CL_GUI_CONTROL 30, 31CL_GUI_CUSTOM_CONTAINER 239CL_GUI_DIALOGBOX_CONTAINER 72CL_GUI_HTML_VIEWER 91CL_GUI_LIST_TREE 151

1558.book Seite 326 Montag, 3. Mai 2010 10:37 10

Page 32: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

327

Index

CL_GUI_OBJECT 30, 31CL_GUI_PICTURE 72CL_GUI_SIMPLE_TREE 125CL_GUI_TEXTEDIT 103CL_LIST_TREE_MODEL 158CL_SALV_FUNCTIONS 290CL_SALV_HIERSEQ_TABLE 306CL_SALV_TABLE 272CL_SALV_TREE 307CL_SIMPLE_TREE_MODEL 158, 159I_OI_ERROR 242

Klassenhierarchie 30, 65Knoten 123, 124, 270, 307

Tabelle 127Kommunikation 25Kontextmenü 205, 209Kopieren 51

L

LayoutEigenschaften 276Element 303Info 168Objekt 277Verwaltung 299

Lifetime Management 30List Tree Control 151Liste

hierarchische 123hierarchisch-sequenzielle 270, 305

LVC_S_FCAT 193LVC_S_LAYO 178, 180LVC_T_FCAT 193

M

Markierungsobjekt 297Markierungsspalte 297Mengeneinheit 285Methode

DISPLAY 272FACTORY 272set_new_ok_code 30set_registered_events 28

MIME-Dokument 91

MTREEITM 141, 152MTREESNODE 126

N

NO_FLUSH 241NODE_CONTEXT_MENU_REQUEST

212

O

Object Navigator 36Office-Applikation 242OK-Code 15OK-Feld 28OLE2 239ON_CTMENU 205Online-Dokumentation 21, 47, 69Ordner 124

P

PAI 15Modul 40

Parameter NO_FLUSH 241Parent-Child-Beziehung 270Parent-Parameter 44PBO 15

Verarbeitung 25Performanceoptimierung 25Picture Control 35, 206Pivot-Tabelle 241PowerPoint 242Process After Input � PAIProcess Before Output � PBO

R

Re-Link 66, 68Report SHOWICON 119, 283REUSE-Bibliothek 269RFC

Aufruf 25Verbindung 24

1558.book Seite 327 Montag, 3. Mai 2010 10:37 10

Page 33: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

328

Index

S

SAP ALV Grid 167SAP Column Tree 140SAP Control Framework 23SAP Document Container Control 239SAP HTML Viewer 91SAP List Tree 151SAP List Viewer 167, 269SAP Simple Tree 125SAP TextEdit 103SAP Toolbar 111, 183SAP Tree 123SAP Tree Control 123, 212SAP Tree Model 123, 124, 158, 212Screen Painter 15, 41SENDER 58Serienbrieffunktion 241SET HANDLER 28set_new_ok_code 30set_registered_events 28SHOWICON 119, 283Simple Tree Control 125SOI 243Sortierkriterium 299Spalteneigenschaften 278Spaltenobjekt 278Splitter Container Control 79Startdynpro 36STB_BUTTON 184Stellvertreter

Klasse 23Objekt 23, 30

Steploop-Technik 19Steuerspalte 285, 286Struktur

LVC_S_LAYO 178, 180MTREEITM 141, 152MTREESNODE 126STB_BUTTON 184TREEV_HHDR 142TREEV_ITEM 141, 152TREEV_LHDR 152TREEV_NODE 126, 140, 152

Subscreen 16Synchronisation 25

Systemereignis 29, 59Systemfeld 28sy-ucomm 28

T

Tabelle CL_SALV_TABLE 272Tabellenkalkulationsschnittstelle 241Tabellenobjekt 276Table Control 19, 167Tabstrip Control 16Testen 31Testtool 242TextEdit Control 103Textverarbeitungsprogramm 241Titelzeile 302Toolbar 111, 183Tooltip-Text 142TOP-Include 36Tracedatei 32Tree Control 123, 212Tree Model 123, 124, 158, 212TREEV_HHDR 142TREEV_ITEM 141, 152TREEV_LHDR 152TREEV_NODE 126, 140, 152Type-Pool 112

SOI 243Typgruppe 54

U

Unterknoten 123UP-Include 37URL 95, 239USER_COMMAND_0100 40

V

VB-Applikation 241Verschalung 23Visual Basic 241

1558.book Seite 328 Montag, 3. Mai 2010 10:37 10

Page 34: Praxisworkshop SAP-Controls und SAP List Viewer · PDF file10.1 ALV Grid mit vorgegebener Struktur im ABAP Dictionary ... 11.3 Kontextmenü zum ALV Grid Control ... MODULE create_objects

329

Index

W

Währung 285Wizard 19, 21Word 242WORDWRAP 107

Z

Zweig 308

1558.book Seite 329 Montag, 3. Mai 2010 10:37 10