Vorgehen zum Erstellen eines Dynpro- Splitters
1 Einleitung Dem vorliegenden Beispiel kann das Vorgehen zum Erstellen eines Dynpro-Splitters entnommen werden. Im Gegensatz zur Verwendung von Splitter-Containern, die ausschließlich das Einbinden objektorientierter Elemente erlauben (z.b. ALV, Tree ) bietet das hier beschriebene Verfahren die Möglichkeit, Dynpros in Form von Sub- Screens über einen Split Bar (Trennlinie zwischen Screen-Elementen) größenvariabel zu gestalten. Das komplette Beispielcoding ist in Kapitel 3 enthalten. Nähere Informationen zum Vorgehen können Kapitel 2 entnommen werden. 1
2 Informationen zur Programmlogik Zum Aufbau eines Splitters mit zwei Bereichen (in diesem Beispiel links und rechts) sind drei Dynpros notwendig: 1. Das eigentliche Träger-Dynpro beherbergt das Splitter-Control 2. Ein Subscreen für die linke Seite 3. Ein Subscreen für die rechte Seite Die im vorliegenden Beispiel verwendeten Dynpro-Nummern lauten 9000, 9010 und 9020. Der Dynpro-Einsatz entspricht der oberen Aufzählung. Zu Beginn der Verarbeitung werden drei Dynpros angelegt. Bei Dynpro 9000 ist zu beachten, dass dieses vom Typ Normal erstellt wird: Abbildung 1: Dynprotyp von Dynpro 9000 Die Dynpros 9010 und 9020 werden vom Typ Subscreen angelegt: Abbildung 2: Dynprotyp der beiden Subscreens Außer dem Setzen des Dynprotyps und der Vergabe einer aussagekräftigen Kurzbeschreibung sind beim Anlegen der Dynpros keine weiteren Aktivitäten vorzunehmen. Als nächstes wird auf dem Trägerdynpro der Bereich für den Splitter definiert. Das ist allerdings nur über den Vorgänger des bekannten Screen Painters möglich. Der Wechsel zum Zeilenbasierten Screen Painter kann wie folgt vorgenommen werden: 2
Abbildung 3: Ändern des Layout-Editors Nach dem Entfernen des Häkchens bei Grafischer Layout Editor und dem anschließenden Bestätigen der Eingabe wird über den Button Modus aufgerufen. der Layout- Das Einfügen des Splitter Controls findet anschließend über den, in Abbildung 4, dargestellten Menü-Pfad statt. Abbildung 4: Einfügen eines Splitter Controls Die gewünschte Stelle für das Ende des Splitter Controls kann per Doppelklick angegeben werden. In dem vorliegenden Beispiel wurde das gesamte Dynpro ausgenutzt (die Größe kann bei Bedarf angepasst werden!). Nach dem Doppelklick wird automatisch ein Pop-Up mit weiterführenden Splitter-Informationen visualisiert, wobei der rote Bereich im Hintergrund das eigentliche Splitter Control im Änderungsmodus darstellt (siehe Abbildung 5). 3
Abbildung 5: Eigenschaften des Splitter-Controls Wie aus Abbildung 5 ersichtlich, sind einige Elemente des angezeigten Pop-Ups mit Nummern versehen. Im Folgenden wird auf diese Nummer näher eingegangen. Dabei entspricht die Aufzählungsnummer der Nummer aus der Abbildung: 1. Bezeichnung des Splitter Controls 2. Das Markieren der Optionen bewirkt, dass sich das Control an die Größe des Inhaltes anpasst. Dadurch werden unnötige Scrollbars vermieden. 3. Vergeben von Bezeichnungen für die Splitter-Bereiche. Diese werden anschließend für den Aufruf der Subscreens benötigt. In dem vorliegenden Beispiel sind es der linke und rechte Bereich 4. Festlegen, ob die Anordnung der Elemente horizontal oder vertikal erfolgt 5. Initials Splitter-Aufteilung in Prozent Nach Setzen der gewünschten Eigenschaften und Betätigen des Buttons Übernehmen, kann der Bearbeitungsmodus des Splitter Control über den Button (F3) verlassen werden. Nach dem anschließenden Aktiviren des Dynpros sind alle relevanten Splitter-Einstellungen erfolgt. Hinweis: Nicht vergessen des Screen Painter wieder auf Grafischer Layout Editor umzustellen. 4
Für die programminterne Handhabung des Splitters kommt die Klasse CL_DYNPRO _SPLITTER zum Einsatz. Aus diesem Grund wird die Klasse zu Beginn der Verarbeitung instanziiert. Der Parameter SPLITTER_NAME wird mit der Bezeichnung des Splitter Controls versorgt (siehe Abbildung 5 Nr. 1). Durch die Anweisung CALL SCREEN 9000 erfolgt der Aufruf des Träger-Dynpros. Über Aufruf der Methoden SET_SASH() und GET_GUISASH() der Splitter-Instanz im PBO- und PAI-Modul des 9000er Dynpros wird die Positionsänderung der Split Bar festgehalten. Außerdem wird im PBO-Modul der GUI-Status aus Abbildung 6 gesetzt. Die Abfrage des entsprechenden Kommandos führt im PAI-Modul zum Verlassen des Programms. Abbildung 6: GUI-Status des Träger-Dynpros Die Ablauflogik des Trägerdynpro ist relativ einfach uns sieht wie folgt aus: PROCESS BEFORE OUTPUT. MODULE status_9000. CALL SUBSCREEN bereich_links INCLUDING sy-repid gv_dnypro_links. CALL SUBSCREEN bereich_rechts INCLUDING sy-repid gv_dnypro_rechts. PROCESS AFTER INPUT. MODULE user_command_9000. CALL SUBSCREEN bereich_links. CALL SUBSCREEN bereich_rechts. Zu beachten ist, dass die Subscreens dieselben Bezeichnungen tragen, wie sie in den Splitter-Eigenschaften festgelegt wurden (siehe Abbildung 5 Nr. 3). Zusätzlich ist aus dem oberen Coding-Abschnitt ersichtlich, dass für die Angabe der Dynpro-Nummern Variablen verwendet werden. Diese sollen die grundsätzliche Möglichkeit eines dynamischen Subscreen-Aufrufes demonstrieren und werden bei Programmstart entsprechend gefüllt. 5
In dem vorliegenden Beispiel wurde auf eine Ablauflogik der Subscreens verzichtet. Das Ergebnis des Vorgehens ist in Abbildung 7 visualisiert. Die einzelnen Elemente der Subscreens sollen zum einen verdeutlichen, dass es sich um Dynpro-Elemente handelt. Zum anderen sind diese notwendig, damit überhaupt eine Ausgabe erfolgt. Abbildung 7: Ergebnis des Dynpro-Splitters 6
3 Coding Das Coding besteht aus den Teilen Rahmenprogramm und Ablauflogik des Träger- Dynpros. Beide sind in eigenständigen Kapiteln enthalten. 3.1 Rahmenprogramm *--------------------------------------------------------------------* * Das vorliegende Programm demonstriert das Vorgehen zum Erstellen * eines Dynpro-Splitter-Controls * * Date: 27.04.2015 *--------------------------------------------------------------------* * Änderungen *--------------------------------------------------------------------* REPORT zaj_dynpro_splitter. DATA: gr_dyn_splitter TYPE REF TO cl_dynpro_splitter. DATA: gv_dnypro_links TYPE scradnum. DATA: gv_dnypro_rechts TYPE scradnum. INITIALIZATION. MOVE '9010' TO gv_dnypro_links. MOVE '9020' TO gv_dnypro_rechts. START-OF-SELECTION. * Instanz des Splitter-Containers erstellen CREATE OBJECT gr_dyn_splitter EXPORTING splitter_name = 'SPLITTER'. CALL SCREEN 9000. *&---------------------------------------------------------------------* *& Module STATUS_9000 OUTPUT *&---------------------------------------------------------------------* MODULE status_9000 OUTPUT. SET PF-STATUS 'STATUS_9000'. * Neue Position der Split Bar setzen
gr_dyn_splitter->set_sash( ). ENDMODULE. " STATUS_9000 OUTPUT *&---------------------------------------------------------------------* *& Module USER_COMMAND_9000 INPUT *&---------------------------------------------------------------------* MODULE user_command_9000 INPUT. * Positionsänderung der Split Bar an die Instanz übergeben gr_dyn_splitter->get_guisash( ). CASE sy-ucomm. WHEN 'EXIT'. LEAVE TO SCREEN 0. WHEN OTHERS. * Sonst sind keine Aktivitäten notwendig ENDCASE. ENDMODULE. " USER_COMMAND_9000 INPUT 3.2 Ablauflogik des Träger-Dynpros PROCESS BEFORE OUTPUT. MODULE status_9000. CALL SUBSCREEN bereich_links INCLUDING sy-repid gv_dnypro_links. CALL SUBSCREEN bereich_rechts INCLUDING sy-repid gv_dnypro_rechts. PROCESS AFTER INPUT. MODULE user_command_9000. CALL SUBSCREEN bereich_links. CALL SUBSCREEN bereich_rechts.