Anforderung
Es sollen auf einem Dynpro mehrere ALV ausgegeben werden. Die Grids sollen sich automatisch an die Fenstergröße anpassen.
Dies gelingt nur, wenn keine Custom Container verwendet werden. Auf der folgenden Seite wird eine schlanke Lösung vorgestellt. Es werden zwei ALV Grids untereinander ausgegeben. Das Beispiel beschreibt nur die erforderlichen Komponenten und Vorgehensweise. Es stellt keine vollständige Implementation dar. Es fehlen die Programmteile zur Datenbeschaffung (GO_MODEL) sowie zum Aufruf und verarbeiten des Dynpros. Die Programmteile müssen entsprechend angepasst/ergänzt werden.
Umsetzung
Dynpro
Um mehrere ALV Grids ausgeben zu können, wird immer ein Dynpro benötigt. Es müssen keine Elemente auf dem Dynpro definiert werden, es muss lediglich existieren:
View Klasse
Für die Anzeige der Grids verwende ich im Beispiel das MVC Design Pattern. Es gibt eine Klasse lcl_view, welche die Anzeige der Grids, deren Events usw übernimmt. Die Grids werden als Attribute go_alv1 und go_alv2 in der Klasse definiert.
Die Methode DISPLAY der Klasse LCL_VIEW dient zur Ausgabe der Daten
CLASS lcl_view DEFINITION. PUBLIC SECTION. METHODS constructor importing io_model type zc_model. METHODS display. PRIVATE SECTION. DATA: go_alv1 TYPE REF TO cl_salv_table, go_alv2 TYPE REF TO cl_salv_table, go_model TYPE REF TO zc_model. ENDCLASS. "lcl_m42_view CLASS lcl_m42_view IMPLEMENTATION. METHOD constructor. go_model = io_model. ENDMETHOD. *&-------------------------------------------------------* * Ausgabe der Daten *--------------------------------------------------------* METHOD display. DATA: lcx_root TYPE REF TO cx_root, lo_splitter TYPE REF TO cl_gui_splitter_container, lo_alv1_container TYPE REF TO cl_gui_container, lo_alv2_container TYPE REF TO cl_gui_container. TRY. CREATE OBJECT lo_splitter EXPORTING parent = cl_gui_custom_container=>default_screen rows = 2 columns = 1. lo_alv1_container = lo_splitter->get_container( EXPORTING row = 1 column = 1 ). lo_alv2_container = lo_splitter->get_container( EXPORTING row = 2 column = 1 ). cl_salv_table=>factory( EXPORTING r_container = lo_alv1_container IMPORTING r_salv_table = go_alv1 CHANGING t_table = go_model->gt_table1 ). cl_salv_table=>factory( EXPORTING r_container = lo_alv2_container IMPORTING r_salv_table = go_alv2 CHANGING t_table = go_model->gt_table2 ). CATCH cx_salv_msg INTO lcx_root. MESSAGE lcx_root TYPE 'E'. ENDTRY. go_alv1->display( ). go_alv2->display( ). ENDMETHOD. ENDCLASS.
PBO Modul STATUS_0100
MODULE status_0100 OUTPUT. SET PF-STATUS 'STATUS_0100'. * SET TITLEBAR 'xxx'. go_view->display( ). " Instanz von LCL_VIEW ENDMODULE.