Splitting Container

Aus SAP-Wiki
Wechseln zu: Navigation, Suche
  • 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

Splittingcontainer1.jpg


Definition Dynpro

Der Dynpro wird mit lediglich einem Container gefüllt. Hier mit dem Namen "ALV_CONT1".

Splittingcontainer2.jpg

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

Splittingcontainer3.jpg


Splittingcontainer4.jpg

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

Web-Links