Um eine Sortierung oder Summen in der ALV Ausgabe per Code zu setzen, gibt es zwei Möglichkeiten.
- Vorherige Definition eines Benutzerlayouts und anschließendes Setzen des Layouts im Code (siehe diesen Beitrag)
- Setzen der Sortierung und der Summen per Code
Hier wird beschrieben, wie die Sortierung und die Summe per Code vorbelegt werden kann. Der Benutzer kann anschließend wie gewohnt die Ausgabe verändern. Das Setzen der Sortierung erfolgt in der Methode ADD_SORT, das Setzen der Summe in der Methode ADD_AGGREGATION der Klasse Z_TEST_VIEW.
Die Methode ADD_SORT erhält neben dem ALV die zu sortierende Spalte und eine Angabe, ob Zwischensummen gebildet werden sollen. Die Methode ADD_AGGREGATION erhält neben dem ALV die zu summierende Spalte. Die Angabe der Zwischensumme in ADD_SORT hat nur Wirkung in Kombination mit einer (per Code oder vom Benutzer) hinzugefügten Summe.
Deklaration
CLASS z_test_view DEFINITION. PUBLIC SECTION. METHODS add_sort IMPORTING icl_alv TYPE REF TO cl_salv_table iv_columnname TYPE lvc_fname iv_subtotal TYPE boolean. METHODS add_aggregation IMPORTING icl_alv TYPE REF TO cl_salv_table iv_columnname TYPE lvc_fname. ENDCLASS.
Implementation
CLASS z_test_view IMPLEMENTATION. *---------------------------------------------------------------------* * Sortierung festlegen *---------------------------------------------------------------------* METHOD add_sort. DATA: lcl_sort TYPE REF TO cl_salv_sorts. IF icl_alv IS NOT INITIAL. TRY. lcl_sort = icl_al->get_sorts( ). lcl_sort->add_sort( columnname = iv_columnname subtotal = iv_subtotal ). CATCH cx_salv_not_found cx_salv_existing cx_salv_data_error. ENDTRY. ENDIF. ENDMETHOD. *---------------------------------------------------------------------* * Summe festlegen *---------------------------------------------------------------------* METHOD add_aggregation. DATA: lcl_aggregat TYPE REF TO cl_salv_aggregations. IF icl_alv IS NOT INITIAL. TRY. lcl_aggregat = icl_alv->get_aggregations( ). lcl_aggregat->add_aggregation( columnname = iv_columnname aggregation = if_salv_c_aggregation=>total ). CATCH cx_salv_not_found cx_salv_existing cx_salv_data_error. ENDTRY. ENDIF. 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 ... " Setzen der Sortierung der Spalte CARRID mit Zwischensumme gcl_view->add_sort( icl_alv = gcl_alv iv_columnname = 'CARRID' iv_subtotal = abap_true). " Setzen der Summe für den Preis gcl_view->add_aggregation( icl_alv = gcl_alv iv_columnname = 'PRICE' ). " Ausgabe der Tabelle gcl_alv->display( ).