ajanzen.com Aufruf eines Pop-Up-Containers
ajanzen.com 1 Einleitung Der Fokus des vorliegenden Dokumentes liegt auf dem Aufruf eines Pop-Up- Containers. Die Funktion ist klassenbasiert und erfordert keine Neuanlage eines Dynpros vom Typ Modales Dialogfenster für den Container. Allerdings ist ein Trägerdynpro notwendig, sodass sich das Vorgehen nicht zur Pop-Up-Anzeige mitten während der Verarbeitung eignet! Allerdings lässt sich damit eine Datenanzeige in einem bereits aufgerufenen Dynpro (z.b. aus einem ALV, oder Tree) problemfrei realisieren. Das komplette Beispielcoding ist in Kapitel 3 enthalten. Nähere Informationen zum Ablauf können Kapitel 2 entnommen werden. 1
ajanzen.com 2 Informationen zur Programmlogik Im vorliegenden Beispiel werden vorbereitend die Informationen aus Tabelle SFLIGHT in eine interne Tabelle zur Anzeige im ALV selektiert. Anschließend wird auf den Aufruf des Pop-Ups eingegangen. Das Ergebnis ist in Abbildung 1 dargestellt. Aus Gründen der Übersichtlichkeit sind Hauptprogramm und das INCLUDE zur Ereignisbehandlung in eigenständigen Kapiteln enthalten. 2.1 Hauptprogramm Im ersten Schritt des Pop-Up-Aufrufes wird eine Instanz der Klasse CL_GUI_ DIALOGBOX_CONTAINER erstellt. Beim Instanziieren werden neben der Fenstergröße und dem Abstand von der linken oberen Ecke, ein Titel und der Parameter NO_AUTODEF_PROGID_DYNNR mitgegeben. Das Setzen von Parameter NO_AUTODEF_PROGID_DYNNR auf X bewirkt, dass das Pop-Up bei jedem Dynpro angezeigt wird. Abbildung 1: Aufruf des Pop-Up-Containers mit ALV-Anzeige Da es sich um ein klassenbasiertes Vorgehen handelt, wird beim Schließen des Pop- Ups (Klick auf das X in der rechten oberen Ecke) das Ereignis aus Abbildung 2 2
ajanzen.com ausgelöst. Die Ereignisbehandlung findet in einer lokalen Klasse statt und wird in Kapitel 2.2 behandelt. In dem Rahmenprogramm wird die Behandlerklasse instanziiert und mit der Dialogbox-Instanz verbunden. Abbildung 2: Ereignis CLOSE der Klasse CL_GUI_DIALOGBOX_CONTAINER Das Coding zum Aufruf des ALV-Grid dient nur der Visualisierung der Daten und wird in diesem Dokument nicht näher behandelt. Als Trägerdynpro für den Docking-Container kommt in diesem Beispiel das SAP Standard-Ausgabedypnro zum Einsatz. Der Aufruf erfolgt über die Anweisung WRITE. Stattdessen kann auch jedes beliebige Dynpro über die Anweisung CALL SCREEN verwendet werden. Der Aufruf des Pop-Ups kann natürlich auch aus einem bereits angezeigten Dynpro erfolgen. 2.2 INCLUDE zur Ereignisbehandlung Die Behandlerklasse besteht lediglich aus der Constructor-Methode und der Methode zur Ereignisbehandlung für das Ereignis CLOSE der Klasse CL_GUI_DIALOGBOX_ CONTAINER. Die ereignisbehandelnde Methode ruft Ihrerseits lediglich die FREE( )- Methode der ereignisauslösenden Klasse (SENDER) auf. In diesem Fall handelt es sich um die Instanz der Dialogbox-Klasse. 3
3 Coding Wie aus der Überschrift ersichtlich ist, enthält Kapitel 3 das komplette Beispielcoding. Genau wie beim Aufbau von Kapitel 2 sind Hauptprogramm und das INCLUDE zur Ereignisbehandlung in eigenständigen Unterkapiteln enthalten. 3.1 Hauptprogramm *--------------------------------------------------------------------* * Das vorliegende Programm demonstriert das Vorgehen zum Erzeugen * eines Container-Pop-Ups unter Verwendung von Klasse * CL_GUI_DIALOGBOX_CONTAINER * * Date: 23.05.2015 *--------------------------------------------------------------------* * Änderungen *--------------------------------------------------------------------* REPORT zaj_gui_dialogbox_container. INCLUDE zaj_gui_dialogbox_container_cl. DATA: gt_sflight DATA: gr_dialogbox DATA: gr_alv_grid DATA: gr_event_handler TYPE STANDARD TABLE OF sflight. TYPE REF TO cl_gui_dialogbox_container. TYPE REF TO cl_gui_alv_grid. TYPE REF TO gcl_event_handler. START-OF-SELECTION. * Selektion der anzuzeigenden Daten SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE gt_sflight. IF sy-subrc NE 0. * In diesem Fall wird eine leere Tabelle angezeigt
* Erstellen des Pop-Up Containers CREATE OBJECT gr_dialogbox EXPORTING width = 800 "Breite height = 300 "Höhe top = 50 "Abstand von oben left = 100 "Abstand von links caption = 'Datenanzeige im Pop-Up' no_autodef_progid_dynnr = abap_true 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 ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. * Schließen des Pop-Up durch Ereignisregistrierung ermöglichen * Instanz der behandelnden Klasse erstellen CREATE OBJECT gr_event_handler EXPORTING ir_dialog_box = gr_dialogbox. * Ereignisbehandlung für das schließende Ereignis registrieren SET HANDLER gr_event_handler->dialogbox_close FOR gr_dialogbox. * ALV-Anzeige anstoßen CREATE OBJECT gr_alv_grid EXPORTING
i_parent = gr_dialogbox EXCEPTIONS error_cntl_create = 1 error_cntl_init = 2 error_cntl_link = 3 error_dp_create = 4 OTHERS = 5. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. gr_alv_grid->set_table_for_first_display( EXPORTING i_structure_name = 'SFLIGHT' CHANGING it_outtab = gt_sflight EXCEPTIONS invalid_parameter_combination = 1 program_error = 2 too_many_lines = 3 OTHERS = 4 ). IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. * Aufruf des Trägerdynpros WRITE: space. 3.2 INCLUDE zur Ereignisbehandlung *&---------------------------------------------------------------------* *& Include ZAJ_GUI_DIALOGBOX_CONTAINER_CL *&---------------------------------------------------------------------* CLASS gcl_event_handler DEFINITION.
PUBLIC SECTION. METHODS: constructor IMPORTING ir_dialog_box TYPE REF TO cl_gui_dialogbox_container, dialogbox_close FOR EVENT close OF cl_gui_dialogbox_container IMPORTING sender. PROTECTED SECTION. DATA: gr_dialogbox_cl TYPE REF TO cl_gui_dialogbox_container. ENDCLASS. "gcl_event_handler DEFINITION *----------------------------------------------------------------------* * CLASS gcl_event_handler IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS gcl_event_handler IMPLEMENTATION. METHOD constructor. * Dialogboxinstanz global in der Klasse ablegen gr_dialogbox_cl = ir_dialog_box. ENDMETHOD. "constructor METHOD dialogbox_close. * Der sender enthält in diesem Fall eine Instanz des Dalogbox-Containers sender->free( EXCEPTIONS OTHERS = 1 ). IF sy-subrc NE 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* Speicher der Instanz freigeben FREE: gr_dialogbox_cl. ENDMETHOD. "dialogbox_close ENDCLASS. "gcl_event_handler DEFINITION