Splitting Container
Siehe Kategorie: ALV.
- Wenn in einem Dynpro mehrere Einzelfenster sind, ist es sinnvoll, die Einzelfenster mit Splitting Containern zu realisieren
- Mit Splitting Containern sind die Grenzen zwischen den Einzelfenstern variabel und können von den Usern verschoben werden.
- Es macht Sinn die verschobenen Grenzen in einer Customizingtabelle pro User zu speichern und beim Start des Programms automatisch zu laden. Das spart dem User sich bei jedem Programmstart erneut die für ihn optimalen Breiten/Höhen zu setzen.
Screenshot Splittingcontainer
Definition Dynpro
Der Dynpro wird mit lediglich einem Container gefüllt. Hier mit dem Namen "ALV_CONT1".
Coding Splittingcontainer
In diesem Fall gibt es 3 ALV-Screens und 2 Splitting-Container (für die Trennung horizontal und vertikal)
data: go_cont1 type ref to cl_gui_custom_container, go_alv_cont1 type ref to cl_gui_alv_grid, go_alv_cont2 type ref to cl_gui_alv_grid, go_alv_cont3 type ref to cl_gui_alv_grid. data: go_split_1 type ref to cl_gui_splitter_container, go_split_2 type ref to cl_gui_splitter_container.
Das Objekt zum Container wird ganz normal erzeugt.
create object go_cont1 exporting container_name = 'ALV_CONT1' 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 id sy-msgid type sy-msgty number sy-msgno with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. endif.
Der erste Splitting Container wird erzeugt, mit Referenz zum Gesamtcontainer
create object go_split_1 exporting parent = go_cont1 rows = 1 columns = 2 exceptions cntl_error = 1 cntl_system_error = 2 others = 3. if sy-subrc <> 0. message id sy-msgid type sy-msgty number sy-msgno with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. endif.
Der zweite Splitting Container wird erzeugt, mit Referenz zum ersten Splitting Container, hier in der zweiten Spalte.
create object go_split_2 exporting parent = go_split_1->get_container( row = 1 column = 2 ) rows = 2 columns = 1 exceptions cntl_error = 1 cntl_system_error = 2 others = 3. if sy-subrc <> 0. message id sy-msgid type sy-msgty number sy-msgno with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. endif.
Breite des ersten Splitting Containers und Höhe des zweiten Splitting Containers werden festgesetzt
go_split_1->set_column_width( id = 1 width = ls_cols-c1_left ). "ls_cols-c1_left über eine Customizingtabelle go_split_2->set_row_height( id = 1 height = ls_cols-c2_top ). "ls_cols-c2_top über die Customizingtabelle
Die erste ALV-Liste wird in den ersten Splitting Container links platziert
create object go_alv_cont1 exporting i_parent = go_split_1->get_container( row = 1 column = 1 ). call method go_alv_cont1->set_table_for_first_display ...
Die zweite ALV-Liste wird in den zweiten Splitting Container oben platziert
create object go_alv_cont2 exporting i_parent = go_split_2->get_container( row = 1 column = 1 ). call method go_alv_cont2->set_table_for_first_display ...
Die dritte ALV-Liste wird in den zweiten Splitting Container unten platziert
create object go_alv_cont3 exporting i_parent = go_split_2->get_container( row = 2 column = 1 ). call method go_alv_cont3->set_table_for_first_display ...
Coding Customizingtabelle
In Abhängigkeit vom User werden die Breite und Höhe der Container festgelegt. So kann sich jeder User seine für ihn optimalen Einstellungen speichern.
Tabelle
Aufruf Einstellungen bei Anzeige Dynpro (PAI)
perform set_heights.
*&---------------------------------------------------------------------* *& Form SET_HEIGHTS *&---------------------------------------------------------------------* * Lese und Setze die Breite der Splitter *----------------------------------------------------------------------* form set_heights . data: ls_cols type z_serie_cols. select single * into ls_cols from z_serie_cols where uname = sy-uname. if sy-subrc <> 0. select single * into ls_cols from z_serie_cols where uname = 'DEFAULT'. if sy-subrc <> 0. ls_cols-uname = 'DEFAULT'. ls_cols-c1_left = 50. ls_cols-c2_top = 20. insert into z_serie_cols values ls_cols. endif. endif. go_split_1->set_column_width( id = 1 width = ls_cols-c1_left ). go_split_2->set_row_height( id = 1 height = ls_cols-c2_top ). endform.
Speichern Einstellungen im User-Command
Beim Verlassen des Dynpros im User-Command werden die aktuellen Einstellungen gespeichert.
perform save_heights.
*&---------------------------------------------------------------------* *& Form SAVE_HEIGHTS *&---------------------------------------------------------------------* * Speichere veränderten Splitter *----------------------------------------------------------------------* FORM save_heights. DATA: ls_cols TYPE z_serie_cols. ls_cols-uname = sy-uname. * In ls_cols-c1_left wird die Spaltenbreite des ersten ALVs zurückgeliefert nach dem Flush go_split_1->get_column_width( EXPORTING id = 1 IMPORTING result = ls_cols-c1_left ). go_split_2->get_row_height( exporting id = 1 importing result = ls_cols-c2_top ). cl_gui_cfw=>flush( EXCEPTIONS cntl_system_error = 1 cntl_error = 2 OTHERS = 3 ). IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. MODIFY z_serie_cols FROM ls_cols. ENDFORM. " SAVE_HEIGHTS