Klasse CL_SALV_TABLE

Dies ist der erste Beitrag zu einer neuen Beitragsreihe mit einer Sammlung diverser Methoden und Lösungen zu der neuen ALV Grid Klasse CL_SALV_TABLE. Überweigend werden die Themen der Ausgabegestaltung angesprochen, aber auch das Verarbeiten von Events. Die gezeigten Beispiele werden als Methoden definiert mit dem Ziel, schnell zu implementierende Kopiervorlagen zu bieten.

CL_SALV_TABLE

Die Klasse CL_SALV_TABLE dient zur Ausgabe von Tabellen als Grid.

In dieser Klasse hat SAP die REUSE_ALV_GRID* Funktionsbausteine sowie die Klasse CL_ALV_GRID zusammen gefasst. Die so entstandene Klasse CL_SALV_TABLE bildet nur die Schnittmenge der bisherigen Grid Arten ab. Sie bietet folglich weniger Funktionen als die bisherigen Grids, vereinfacht dafür aber die Handhabung enorm. Der gebotene Funktionsumfang ist für die meisten Anwendungsfälle ausreichend.

 

Der Vorteil der Klasse ist, dass zur einfachen Ausgabe weder ein Feldkatalog, noch ein Dynpro definiert werden muss. Die Klasse bietet eine statische FACTORY Methode. Wie jede FACTORY Methode erzeugt auch diese eine neue Instanz der Klasse CL_SALV_TABLE und liefert das neue Objekt an den Aufrufer zurück. Die Methode kümmert sich um das anlegen evtl. notwendiger Container, das Bereitstellen der Daten, Feldkataloge usw.

 

Beispiel

Das folgende Beispiel zeigt die Verwendung der FACTORY Methode. Außerdem zeigt das Beispiel, wie die Range Tabellen von SELECT-OPTIONS an eine Methode übergeben werden können. Die Datenbeschaffung findet in einer separaten (lokalen) Klasse Z_TEST_MODEL statt (in Anlehnung an das Model-View-Controller Design Pattern, MVC). Die Klasse beinhaltet die gesamte Business Logik und somit auch (in diesem Beispiel ausschließlich) eine Methode zur Datenbeschaffung (GET_FLIGHTS). Dieser Methode werden die SELECT-OPTIONS übergeben.

 

*&---------------------------------------------------------------------*
*& Report  Z_TEST_CL_SALV_TABLE
*&
*&---------------------------------------------------------------------*
*& Report zeigt die Verwendung der Klasse CL_SALV_TABLE
*& Außerdem wird demonstriert, wie man Select-Options an
*& Methoden übergibt.
*&---------------------------------------------------------------------*

 REPORT z_test_cl_salv_table.

*&---------------------------------------------------------------------*
*&       Class z_test_model
*&---------------------------------------------------------------------*
*        Deklaration der Modell Klasse
*        Die Modellklasse enthält die Business Logik
*----------------------------------------------------------------------*

CLASS z_test_model DEFINITION.
   PUBLIC SECTION.
    DATA: gt_flights TYPE STANDARD TABLE OF sflight.

     METHODS get_flights
      IMPORTING it_r_carrid TYPE STANDARD TABLE
                it_r_connid TYPE STANDARD TABLE. 

ENDCLASS.               "z_test_model

*&---------------------------------------------------------------------*
*&       Class (Implementation)  z_test_model
*&---------------------------------------------------------------------*
*        Implementierng der Modell Klasse
*----------------------------------------------------------------------*

CLASS z_test_model IMPLEMENTATION.
  METHOD get_flights.

    SELECT * FROM sflight INTO TABLE gt_flights
      WHERE carrid IN it_r_carrid
        AND connid IN it_r_connid.

  ENDMETHOD.
ENDCLASS.               "z_test_model

*&---------------------------------------------------------------------*
*&       Report
*&---------------------------------------------------------------------*

DATA: gcl_alv TYPE REF TO cl_salv_table,    " Objektreferenz für ALV Grid
      gcl_model TYPE REF TO z_test_model,   " Objektreferenz für Business Objekt
      lv_carrid TYPE sflight-carrid,        " für Select-Option
      lv_connid TYPE sflight-connid.        " für Select-Option 

SELECT-OPTIONS: so_scarr FOR lv_carrid,
                so_con FOR lv_connid. 

START-OF-SELECTION.

  " Erzeugen des Modells
  CREATE OBJECT gcl_model.

  " Daten beschaffen, Übergeben von Select-Options an Methode
  gcl_model->get_flights( it_r_carrid = so_scarr[]
                          it_r_connid = so_con[] ). 

  " 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

   " Ausgabe der Tabelle
   gcl_alv->display( ).

Ergebnis

SALV Factory
Ausgabe per ALV