ALV-Vorlage CL SALV* (Factory)
Siehe Reporting.
Siehe Report-Vorlage mit Form-Routinen.
Siehe Report-Vorlage mit Lokaler Klasse.
Siehe ALV-Vorlage CL GUI ALV GRID.
Siehe ALV-Vorlage REUSE ALV GRID DISPLAY LVC.
Siehe ALV-Vorlage CL SALV* (Factory).
Siehe Vorlage Upload/Download Datei Frontend.
Siehe Vorlage Upload CSV-Datei mit Job-Steps und Suche nach Stichwort in Programmen.
Siehe Klassen SALV*.
Siehe Kategorie: ABAP-Vorlagen.
Siehe Kategorie: ALV.
Mit der Klasse CL_SALV und seinen Unterklassen hat SAP ein vollständig objektorientes ALV-Modell herausgebracht, mit dem schnell eine ALV-Liste auf den Bildschirm gebracht werden kann, wenn man weiß, welche Klassen und Methoden zu nutzen sind. Hier sollte man eine Mustervorlage/Report haben, von dem man ausgehend die Anpassungen schnell erfolgen können.
In vielen Reporten hat sich die Nutzung vom Funktionsbaustein REUSE_ALV_GRID_DISPLAY_LVC bewährt. Aber dieser Funktionsbaustein setzt die Nutzung von Form-Routinen voraus. Form-Routinen sind jedoch in Klassen in der Transktion SE24 nicht erlaubt. Daher bietet sich hier u. a. als Alternative die Nutzung der CL_SALV*-Klassen an. Man muss sich jedoch bewußt sein, dass die CL_SALV*-Methoden keine eingabefähigen ALV-Listen zulassen.
Screenshot
SAP-Testprogramme
- Siehe https://tricktresor.de/blog/beispielprogramme/
- SALV_DEMO_TREE_DATA_UPDATE = Demo Datenänderungen
- SALV_DEMO_TREE_EVENTS = Demo Ereignisse
- SALV_DEMO_TREE_FUNCTIONS = Demo Funktionen
- SALV_DEMO_TREE_METADATA = Demo Metadaten
- SALV_DEMO_TREE_SELECTIONS = Demo Selektionen
- SALV_DEMO_TREE_SETTINGS = Demo Einstellungen
- SALV_DEMO_TREE_SIMPLE = Demo Simple Tree
Codevorlage
REPORT zrebalvom_demo1. DATA: gt_spfli TYPE TABLE OF spfli. "Flugdaten DATA: go_functions TYPE REF TO cl_salv_functions. "Symbolleiste DATA: go_table TYPE REF TO cl_salv_table. "Klasse DATA: go_display TYPE REF TO cl_salv_display_settings. "Displayeinstellungen DATA: go_columns TYPE REF TO cl_salv_columns_table. "Spaltenmanipulation DATA: go_column TYPE REF TO cl_salv_column_table. DATA: color TYPE lvc_t_scol. "Farbe (Feld in Ausgabetabelle) DATA: go_sorts TYPE REF TO cl_salv_sorts. "Sortierung DATA: go_agg TYPE REF TO cl_salv_aggregations. "Aggregation DATA: go_filter TYPE REF TO cl_salv_filters. "Filter DATA: go_layout TYPE REF TO cl_salv_layout. "Layout DATA: key TYPE salv_s_layout_key. ********************** * Start-Of-Selection * ********************** START-OF-SELECTION. * Selektion Flugdaten SELECT * INTO TABLE gt_spfli FROM spfli. * Entscheidung welche Darstellung erfolgen soll, hier Vollscreen Dynpro cl_salv_table=>factory( IMPORTING r_salv_table = go_table CHANGING t_table = gt_spfli ). * Symbolleiste wird eingeblendet go_functions = go_table->get_functions( ). go_functions->set_all( abap_true ). go_display = go_table->get_display_settings( ). go_display->set_striped_pattern( cl_salv_display_settings=>true ). * Titel setzen go_display->set_list_header( 'Flugdatenmodell' ). * Eine Spalte ALV besorgen go_columns = go_table->get_columns( ). * Eine Spalte als Key-Feld definieren go_column ?= go_columns->get_column( 'CARRID' ). go_column->set_key( abap_true ). * Überschriftenbezeichnung ändern go_column ?= go_columns->get_column( 'CITYTO' ). go_column->set_long_text( 'Lange Überschrifte' ). "max. 40 Zeichen go_column->set_medium_text( 'Mittlere Überschrift' ). "max. 20 Zeichen go_column->set_short_text( 'Überschr.' ). "max. 10 Zeichen * Eine Spalte wird ausgeblendet go_column ?= go_columns->get_column( 'CITYTO' ). go_column->set_visible( abap_false ). * Mengeneinheitfeld einem Mengenfeld zuordnen (Keine Nachkommastellen von der Stückmenge) "go_column = go_columns->get_column( 'MENGE' ). "go_column->set_quantity_column( 'MEINS' ). * Währungseinheit einem Währungsfeld zuordnen "go_column = go_columns->get_column( 'BETRAG' ). "go_column->SET_CURRENCY_COLUMN( 'WAERS' ). * Tooltip (Popup-Text bei Maus über Überschrift) zuordnen "go_column = go_columns->get_column( 'VBELN' ). "go_column->set_tooltip( 'VBELN: VBAK-VBELN' ). * Eine Spalte farbig formatieren "siehe https://weberpatrick.de/alv-farbe-einer-spalte-setzen/ * Sortierung ALV ändern go_sorts = go_table->get_sorts( ). "gr_sorts->add_sort( 'CITYTO' ). * Filter definieren go_filter = go_table->get_filters( ). go_filter->add_filter( columnname = 'CARRID' low = 'LH' ). * Layout (Layoutänderungen abspeicherbar) go_layout = go_table->get_layout( ). key-report = sy-repid. go_layout->set_key( key ). go_layout->set_save_restriction( cl_salv_layout=>restrict_none ). * Farben für Zeilen/Zellen "Loop .. assigning <ausgabezeile>. " <ausgabezeile>-color = value #( ( color-col = 5 "grün " color-int = 0 " color-inv = 0 ) ). "ENDLOOP. * Vor dem Aufruf der DISPLAY-Methode wird das Color-Feld dem ALV bekannt gemacht. "lo_alv->get_columns( )->set_color_column( 'COLOR' ). ******************* * Anzeige Tabelle * ******************* go_table->display( ).
Abwägung Nutzung SALV*-Klassen
Vorteile
- Mit wenigen Zeilen Coding lässt sich eine ALV-Ausgabe programmieren
- Es ist nicht nötig im Layout eines Screens einen Container anzulegen
- Die SALV-Klassen und Methoden sind auch sehr flexibel, um weitergehende Funktionen einer ALV-Ausgabe zu implementieren, so wie Spaltenfarben, Umbenennen von Spaltenüberschriften etc.
Nachteile
- Die SALV-Klasse ist standardmäßig nicht fähig Felder editierbar zu machen. Allerdings wird das bei ALV-Reporten auch selten benötigt und insofern schränkt dies den Praxisnutzen nur wenig ein.
- Jakob Mainka beschreibt in Xing einen Workaround, wie man einen SALV doch eingabefähig bekommen kann. Ich habe es nicht ausprobiert. Das Coding erscheint jedoch recht umfangreich und dann verliert die ansonsten schlanke ALV-Ausgabe über die CL_SALV*-Klassen doch deutlich seinen Charme.
ALV-Liste im Vollbildmodus
- Es ist nicht nötig bei den SALV*-Klassen Dynpros manuell anzulegen. Die ALV-Liste kann im Vollbild, aber auch als Container im Dynpro als Teilbild dargestellt werden.
Zeilen-/Zellenfarbe in Abhängigkeit von Outputabelle ausgeben
- Zur internen Tabelle wird ein Feld hinzugefügt vom Typ LVC_T_SCOL (ein Tabellentyp).
TYPES: BEGIN OF ts_msg_output_with_color,
zaehler type SCMGINDEX,
receipt_type TYPE string,
receipt_number TYPE string,
psting_attempt TYPE string,
bapi_result TYPE string,
psting_status TYPE string,
color type lvc_t_scol,
END OF ts_msg_output_with_color.
- Die Zeilenfarbe wird in der internen Tabelle angepasst. Hier in Abhängigkeit von einem Fehlerstatusfeld "PSTING_STATUS".
- Das Feld "FNAME" kann leer bleiben, da die gesamte Zeile die gleiche Farbe haben soll. Ansonsten könnte man hier bei der Angabe des Feld-/Spaltennamens einzelne Zellen farbig markieren.
- Bei den Farben könnte man noch beeinflussen INT = Intensität und INV = Kursive Darstellung. Hier bleiben sie beim Initialwert 0 und könnten auch weggelassen werden.
LOOP AT gt_display_messages ASSIGNING FIELD-SYMBOL(<fs_display_messages>). CASE <fs_display_messages>-psting_status. WHEN 'S'. <fs_display_messages>-color = value #( ( color-col = 5 "grün color-int = 0 color-inv = 0 ) ). WHEN 'W'. <fs_display_messages>-color = value #( ( color-col = 7 "beige color-int = 0 color-inv = 0 ) ). WHEN 'E'. <fs_display_messages>-color = value #( ( color-col = 6 "rot color-int = 0 color-inv = 0 ) ). ENDCASE. ENDLOOP.
- Vor dem Aufruf der DISPLAY-Methode wird das Color-Feld dem ALV bekannt gemacht.
lo_alv->get_columns( )->set_color_column( 'COLOR' ). lo_alv->display( ).
- In der ALV-Ausgabe sind nun Zeilenfarben zu sehen.
YouTube
SALV-Tutorial am Beispiel SFLIGHT-Tabelle von Sonikro Coding (EN).