ABAP - Corresponding und Value
Die beiden Ausdrücke fokussieren vor allem auf das Erstellen von Strukturen und verschieben von Dateninhalten im Zusammenhang von Tabellen. Beide wollen wir dir heute zeigen und welche Befehle sie ablösen.
Inhaltsverzeichnis
Heute wollen wir die die beiden Befehle Corresponding und Value etwas näher bringen. Wie im letzten Artikel auch, handelt es sich bei den Ausdrücken um sogenannte Konstruktor-Ausdrücke, wenn du nicht weißt, was das bedeutet, dann kannst du dies in unserem letzten Artikel nachlesen.
Corresponding
Der neue Befehl löst das Move-Corresponding ab, wie du dir sicherlich schon gedacht hast. Dabei kann ein neuer Typ direkt bei der Übergabe definiert werden. Mit dem Befehl wurden auch einige Zusätze definiert, die dir das Leben um einiges einfacher machen.
Dazu erst einmal ein Beispiel, wie einfach der neue Befehl funktioniert:
" einfacher Move
DATA(ls_t001) = CORRESPONDING t001( ls_data ).
Für ein einfaches Verschieben ist keine komplexe Verwendung nötig, hier kann der Befehl einfach "platt" heruntergeschrieben werden.
Anders sieht es aus, wenn du mehrere Strukturen zusammenführen willst, hier benötigst du einen Zusatz, da sonst die vorher gemappten Werte wieder aus deiner Zielstruktur gelöscht werden. Dies ist die sogenannte Basis (BASE) für das Verschieben der Daten. Im folgenden Beispiel führen wir drei Strukturen in eine Zielstruktur zusammen:
" Move mit Basis
ls_data = CORRESPONDING #( ls_t001 ).
ls_data = CORRESPONDING #( BASE( ls_data ) ls_bkpf ).
ls_data = CORRESPONDING #( BASE( ls_data ) ls_skb1 ).
Durch den Zusatz werden die bereits gefüllten Felder aus ls_data übernommen und dann mit den Feldern der Zusatzstruktur, in diesem Fall Buchungskreis und Sachkonto, ergänzt.
Ein weiterer, sehr interessanter, Zusatz ist das Mapping für Felder die vom Namen her nicht passen. Bisher musstest du dafür ein Move-Corresponding einsetzen und im Anschluss alle abweichenden Felder mappen. Dies kann als Zusatz nun hinter dem Befehl "Mapping" gemacht werden.
" Move mit Mapping
ls_data = CORRESPONDING #( ls_t001 MAPPING company_code = bukrs description = butxt ).
Die Zuweisung erfolgt im Prinzip "Zielfeld = Quellfeld aus der Struktur". Hier kann eine beliebige Anzahl an Feldern ergänzt werden, die zusätzlich gemappt werden sollen.
Value
Der "Value"-Befehl wird vor allem zur Erzeugung von Strukturen und Tabellen verwendet. Der Einsatz bei Inserts, Updates oder Appends ist sehr flexibel, spart Platz im Coding und spart vor allem Initialisierungsaufwand, da die Struktur erst durch den Value Befehl erzeugt wird. Zwischen den Klammern des Value erfolgt die Zuweisung der benötigten Felder. Du musst nur die Felder befüllen, die du benötigst, der Rest wird mit Initialwerten aufgefüllt.
Dafür einige Beispiele zum Befehl:
" Befüllung einer Range
DATA lt_bukrs TYPE RANGE OF t001-bukrs.
APPEND VALUE #( sign = 'I' option = 'EQ' low = 'A001' ) TO lt_bukrs.
APPEND VALUE #( sign = 'I' option = 'EQ' low = 'A002' ) TO lt_bukrs.
APPEND VALUE #( sign = 'I' option = 'EQ' low = 'A003' ) TO lt_bukrs.
" Erzeugung einer Struktur
DATA(ls_t001) = VALUE t001( bukrs = 'A001' butxt = 'Value-Test' land1 = 'EN' ).
" Tabelle erzeugen
TYPES tt_data TYPE STANDARD TABLE OF char25 WITH EMPTY KEY.
DATA(lt_data) = VALUE tt_data( ( '123' ) ( '456' ) ( '789' ) ).
Hinweis: Wichtig bei der Definition der Tabelle und Nutzung eines selbstdefinierten Tabelletypen, ist die Definition des Schlüssels. In diesem Fall haben wir einen "Empty Key" definiert, um einen Schlüssel zu haben. Ohne Zusatz der Schlüsseldefinition, kann das Coding nicht generiert werden und es erfolgt die Fehlermeldung "Ein Wert des generischen Typs TT_DATA kann nicht konstruiert werden."
Fazit
Die heutigen vorgestellten Funktionen bieten wieder viel Flexibilität bei der Entwicklung und verkürzen an einigen Stellen den Aufwand des Schreibens. Wir hoffen dir gefallen die beiden neuen Schlüsselwörter ebenfalls so gut wie uns und wir wünschen dir viel Spaß bei der Nutzung.
Quelle:
SAP Dokumentation Corresponding
SAP Dokumentation Value