Verwendung des SALV zum Generieren eines Feldkatalog für das ALV

Hinweise, Tips und Tricks, FAQs - keine Anfragen!!
2 Beiträge • Seite 1 von 1
2 Beiträge Seite 1 von 1

Verwendung des SALV zum Generieren eines Feldkatalog für das ALV

Beitrag von a-dead-trousers (Top Expert / 3539 / 115 / 918 ) » 13.05.2020 08:30
Hallo zusammen.

Nachdem ich nun schon des Öfteren über Programme gestolpert bin, in denen versucht wird die Vorteile des SALV (einfaches Handling) mit denen des ALV (Editierbarkeit) zu verbinden, die aber nach meinem Verständnis eher schlecht als recht implementiert wurden, hier eine kurze Hilfestellung wie man es besser machen kann.

Ein Hauptproblem beim ALV, zumindest für mich, ist das möglichst effiziente Generieren des Feldkatalogs. Als ein Entwickler der von der Pieke auf mit Klassen gearbeitet hat, war mir die Verwendung von Funktionsbausteinen schon immer sehr suspekt. Von daher ist meine Abneigung zu LVC_FIELDCATALOG_MERGE oder wie die ganzen Funktionsbausteine zu dem Thema auch heißen mögen, die intern noch dazu mit GENERATE SUBROUTINE POOL arbeiten, hoffentlich verständlich.

Was also tun?
Der Dreh- und Angelpunkt der Spalten im SALV generell ist die Klasse CL_SALV_COLUMNS und für den SALV-Table im Speziellen ist es die Klasse CL_SALV_COLUMNS_LIST. Die kann man auch außerhalb der FACTORY-Methode instanzieren und so für eigene Zwecke verwenden. Bleiben noch die Fragen wie man die Instanz möglichst effizient mit Daten befüllen kann und wie man daraus einen Feldkatalog kreiert bekommt. Bei ersterer hilft die FACTORY-Methode des SALV bzw. die dort aufgerufene Methode SET_DATA sehr gut weiter. Die kleine, unscheinbare aber nicht minder mächtige Klasse CL_SALV_DATA_DESCR wird dort für die Erzeugung der Spalten verwendet. Bleibt noch die Frage wie man im Anschluss daraus den Feldkatalog erzeugen kann. Nun, der SALV verwendet intern zur Darstellung der Daten ein gewöhnliches ALV. Von daher muss es doch irgendwo eine Methode geben die den Feldkatalog für das ALV generiert, oder? Bingo. CL_SALV_CONTROLLER_METADATA.

Wenn man nun diese drei Klassen kombiniert erhällt man einen brauchbaren Feldkatalog:

Code: Alles auswählen.

FORM get_fieldcat USING    ut_table    TYPE ANY TABLE
                  CHANGING ct_fieldcat TYPE lvc_t_fcat.

  DATA:
    lr_table        TYPE REF TO data,
    lr_aggregations TYPE REF TO cl_salv_aggregations,
    lr_columns      TYPE REF TO cl_salv_columns_list.

  GET REFERENCE OF ut_table INTO lr_table.
  CREATE OBJECT lr_columns EXPORTING r_data = lr_table.
  cl_salv_data_descr=>describe_table( r_columns = lr_columns
                                      r_table   = lr_table ).
  ct_fieldcat = cl_salv_controller_metadata=>get_lvc_fieldcatalog( r_columns      = lr_columns
                                                                   r_aggregations = lr_aggregations ).

ENDFORM.
Zum allgemeinen Verständnis hab ich die Implementierung in einer FORM-Routine und in der "klassischen" Syntax ausgeführt. Natürlich spricht nichts dagegen, aus dem Codeschnippsel eine Methode zu machen und mit weiteren Goodies anzureichern.
Die Instanz von CL_SALV_AGGREGATIONS wird hier nur als Platzhalter verwendet, weil die Schnittstelle von GET_LVC_FIELDCATALOG den Parameter zwingend verlangt.

so long.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag (Insgesamt 4):
ewxtm987456Oscar WildeTron

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40


Re: Verwendung des SALV zum Generieren eines Feldkatalog für das ALV

Beitrag von Oscar Wilde (ForumUser / 2 / 1 / 0 ) » 13.05.2020 10:30
Hi,
Danke ! Gerade mache ich Amateurforschungen auf dem Gebiet ALV, SALV als "Berater in contemplation".
Ich dachte Feldkatalog im DDIC war praktischer als endlos - fieldcat - coding.
Das muß ich mal ausprobieren an Tagen wie Diesen...
Cheers und Danke Olaf
Olaf (aka 'Archibald Tuttle')

Seite 1 von 1

Vergleichbare Themen

ALV Feldkatalog automatisch generieren
von Pinguincommander » 04.12.2012 14:48
Verwendung von Loop at
von bob_sheknowdas » 08.09.2014 17:54
Verwendung von RC1SDDIS?
von bapimueller » 09.08.2018 20:41
Verwendung von includes
von 1337 » 05.12.2013 09:11
Verwendung von Report Varianten
von Dele » 20.05.2016 10:47