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( ).