ALV benutzerspezifische Layouts aktivieren

Damit ein Benutzer die erstellen Layouts (Spalten, Filter etc.) sichern kann, muss dies im ALV aktiviert werden. Der folgende Code Abschnitt beschreibt die Vorgehensweise. Die Layout Funktion wird in der Methode ENABLE_USER_LAYOUT der Klasse Z_TEST_VIEW implementiert.

Deklaration

 CLASS z_test_view DEFINITION.
   PUBLIC SECTION.
 
     METHODS enable_user_layout
          IMPORTING icl_alv TYPE REF TO cl_salv_table.
 
 ENDCLASS.

Implementation

 CLASS z_test_view IMPLEMENTATION. 
 *----------------------------------------------------------------------*
 *        Benuterspezifische Layouts aktivieren
 *----------------------------------------------------------------------*

   METHOD enable_user_layout.
     DATA:
           lc_alv_layout TYPE REF TO cl_salv_layout,
           ls_layout_key TYPE salv_s_layout_key,
           lv_variant type slis_vari.              " Optional wenn Layout vorbelegt werden soll

 * Benutzerspezifische Layouts aktivieren
     lc_alv_layout = icl_alv->get_layout( ).
     ls_layout_key-report = sy-repid.
     lc_alv_layout->set_key( ls_layout_key ).
     lc_alv_layout->set_save_restriction( if_salv_c_layout=>restrict_none ).

* Optional Vorbelegen des Layouts (wenn es nicht existiert, wird kein Layout gezogen)
*       lv_variant = 'DEFAULT'.
*       lc_alv_layout->set_initial_layout( lv_variant ). 

   ENDMETHOD. 
 ENDCLASS.

Aufruf

 DATA: gcl_alv TYPE REF TO cl_salv_table,    " Objektreferenz für ALV Grid
       gcl_view type ref to z_test_view,     " Objektreferenz auf View Objekt 

...

   create OBJECT gcl_view. 

...

   " erzeugen des ALV Objekts
   cl_salv_table=>factory(
      IMPORTING
        r_salv_table = gcl_alv       " Referenz auf ALV Grid
       CHANGING
         t_table = gcl_model->gt_flights ).  " Tabelle mit Daten für Ausgabe 

...

   " Aktivieren der User Layouts
     gcl_view->enable_user_layout( icl_alv = >gcl_alv ).

   " Ausgabe der Tabelle
   gcl_alv->display(  ).

Ergebnis

ALV Grid ohne bentuzerspezifische Layouts
ALV Grid ohne bentuzerspezifische Layouts
ALV Grid mit benutzerspezifischen Layouts
ALV Grid mit benutzerspezifischen Layouts