ALV Layout vorbelegen

Damit ein ALV Grid direkt mit einem bestimmten Layout ausgegeben wird muss das Initiale Layout des Grid vor der Ausgabe gesetzt werden. Der folgende Code Abschnitt beschreibt die Vorgehensweise. Die Layout Funktion wird in der Methode SET_USER_LAYOUT der Klasse Z_TEST_VIEW implementiert.

Hinweis: Wenn das Layout nicht existiert, werden alle Spalten ausgegeben.

Wie man gespeicherte Layouts per Matchcode auf dem Selektionsbild anzeigen kann, beschreibt dieser Beitrag.

Deklaration

CLASS z_test_view DEFINITION.
  PUBLIC SECTION. 

   METHODS set_user_layout
      IMPORTING icl_alv   TYPE REF TO cl_salv_table
                iv_layout TYPE slis_vari
                iv_repid  TYPE sy-repid.

ENDCLASS.

Implementation

CLASS z_test_view IMPLEMENTATION. 
*&----------------------------------------------*
*        Layout für Ausgabe vorbelegen
*-----------------------------------------------*
  METHOD set_user_layout. 

    DATA: lcl_alv_layout TYPE REF TO cl_salv_layout,
          ls_layout_key  TYPE salv_s_layout_key. 

    IF icl_alv IS NOT INITIAL AND
        iv_layout IS NOT INITIAL. 

      lcl_alv_layout = icl_alv->get_layout( ).
      ls_layout_key-report = iv_repid.
      lcl_alv_layout->set_key( ls_layout_key ).
      lcl_alv_layout->set_initial_layout( iv_layout ). 
    ENDIF. 
  ENDMETHOD. 
ENDCLASS.

Aufruf

*-----------------------------------------------------
* SELECTION SCREEN
*-----------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
SELECT-OPTIONS: so_scarr FOR lv_carrid,
                so_con FOR lv_connid. 
PARAMETERS: pm_alv TYPE slis_vari.
SELECTION-SCREEN END OF BLOCK b1.

...

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 

...

  " Vorbelegen des Layouts
  gcl_view->set_user_layout( icl_alv = gcl_alv
                             iv_layout = pm_alv
                             iv_repid = sy-repid ). 

  " Ausgabe der Tabelle
  gcl_alv->display( ).