ALV-Vorlage CL SALV* (Factory)

Aus SAP-Wiki
(Weitergeleitet von ALV-Vorlage CL SALV*)
Zur Navigation springenZur Suche springen

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

SALV1.jpg

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.

SALV3.jpg


SALV4.jpg


SALV5.jpg

  • 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.

SALV2.jpg

YouTube

SALV-Tutorial am Beispiel SFLIGHT-Tabelle von Sonikro Coding (EN).

Web-Links