Moderne ABAP-Transformationen mit CORRESPONDING
Stellen Sie sich vor, Sie arbeiten an einer ABAP-Anwendung zur Flugbuchung und müssen Daten zwischen verschiedenen Tabellen transformieren. Die herkömmlichen Methoden führen zu langen, fehleranfälligen Codestrukturen, insbesondere wenn Feldnamen abweichen oder Standardwerte gesetzt werden müssen. Hier kommt der CORRESPONDING-Operator ins Spiel: Mit seinen modernen Erweiterungen MAPPING und DEFAULT wird die Datenverarbeitung nicht nur effizienter, sondern auch deutlich übersichtlicher.
Mit ABAP 7.58 wurde der CORRESPONDING-Operator um zwei mächtige Erweiterungen ergänzt:
-
MAPPING: Erlaubt eine direkte Umbenennung von Feldern während der Zuweisung.
-
DEFAULT: Ermöglicht die Definition von Standardwerten für Felder, die keine Zuordnung erhalten.
In diesem Blogpost zeige ich praxisnahe Beispiele mit den klassischen Flugdaten-Tabellen und erkläre, wie diese Neuerungen den Code deutlich vereinfachen und modernisieren.
Klassische Datenzuweisungen in älteren ABAP-Versionen
Vor ABAP 7.58 mussten Entwickler oft umständliche Schleifen und manuelle Feldzuweisungen nutzen, wenn Felder unterschiedliche Namen hatten oder Standardwerte erforderlich waren. Dies führte nicht nur zu erhöhtem Entwicklungsaufwand, sondern auch zu einer höheren Fehleranfälligkeit. Besonders bei der Verarbeitung großer Datenmengen konnte dieser Ansatz zu Performance-Problemen führen. Ein weiteres Problem bestand darin, dass Änderungen an den Quell- oder Zielstrukturen aufwändige Anpassungen im gesamten Code erforderten, was die Wartung erheblich erschwerte. Dies war ein großes Hindernis für skalierbare und nachhaltige ABAP-Entwicklung.
Beispiel: Datenübertragung mit LOOP und expliziten Zuweisungen
DATA flightListOld TYPE STANDARD TABLE OF sflight.
DATA flightListNew TYPE STANDARD TABLE OF zflight_data.
SELECT * FROM sflight INTO TABLE flightListOld.
LOOP AT flightListOld INTO DATA(flightOld).
DATA(flightNew) = VALUE zflight_data(
airlineId = flightOld-carrid
flightNumber = flightOld-connid
departureDate = flightOld-fldate
priceAmount = flightOld-price
priceCurrency = flightOld-currency
totalSeats = flightOld-seatsmax
bookedSeats = flightOld-seatsocc
flightStatus = 'UNKNOWN' " Standardwert setzen
).
APPEND flightNew TO flightListNew.
ENDLOOP.
Diese Methode ist nicht nur lang, sondern auch fehleranfällig und ineffizient, insbesondere bei großen Datenmengen.
Moderne Lösung mit CORRESPONDING, MAPPING und DEFAULT in ABAP 7.58
Seit ABAP 7.58 kann diese Transformation mit CORRESPONDING deutlich eleganter und lesbarer umgesetzt werden. Anstatt mühsam jede einzelne Feldzuweisung manuell vorzunehmen, lassen sich mit den neuen Erweiterungen Felder automatisch zuordnen, umbenennen und mit Standardwerten belegen. Das spart nicht nur Zeit, sondern reduziert auch die Fehleranfälligkeit im Code. Die Einführung dieser Verbesserungen ist ein bedeutender Schritt in Richtung einer effizienteren und moderneren ABAP-Programmierung.
Neue Syntax mit MAPPING für Feldzuordnung
DATA flightListOld TYPE TABLE OF sflight.
DATA flightListNew TYPE TABLE OF zflight_data.
SELECT * FROM sflight INTO TABLE flightListOld.
flightListNew = VALUE #( CORRESPONDING #( flightListOld
MAPPING
airlineId = carrid
flightNumber = connid
departureDate = fldate
priceAmount = price
priceCurrency = currency
totalSeats = seatsmax
bookedSeats = seatsocc
DEFAULT
flightStatus = 'UNKNOWN' ) ). " Standardwert setzen
Vorteile dieser Methode
- Kürzerer, lesbarer Code – Die Umbenennung und Wertzuweisung erfolgt in einer einzigen Anweisung.
- Performance-Optimiert – Besonders bei großen Datenmengen effizienter als Schleifen.
- Standardwerte direkt setzen – Kein zusätzlicher Code für Standardwerte erforderlich.
- Bessere Wartbarkeit – Änderungen an Feldnamen können direkt in der MAPPING-Anweisung erfolgen.
Vergleich: Alte vs. Neue Methode
Um die Vorteile der neuen CORRESPONDING-Funktionen vollständig zu verstehen, lohnt sich ein direkter Vergleich mit älteren Implementierungsmethoden. Während frühere Ansätze oft umständliche Schleifen und manuelle Zuweisungen erforderten, bietet die neue Methode eine schlanke, performante und leicht wartbare Alternative. Die folgende Tabelle zeigt die wichtigsten Unterschiede zwischen den alten und neuen Techniken.
| Kriterium | Vor ABAP 7.58 (LOOP, EXPLICIT) | Mit ABAP 7.58 (CORRESPONDING, MAPPING, DEFAULT) |
|---|---|---|
| Code-Länge | Lang und repetitiv | Kompakt und klar strukturiert |
| Performance | Weniger effizient bei großen Tabellen | Optimiert für Massenverarbeitung |
| Standardwerte | Separate Zuweisung notwendig | Direkt über DEFAULT möglich |
| Feldumbenennung | Manuelle Zuweisung pro Zeile | Zentrale Definition im MAPPING-Block |
| Wartbarkeit | Aufwändige Anpassung | Leicht verständlich und erweiterbar |
Erweiterte Nutzung mit tiefen Strukturen
In vielen ABAP-Anwendungen gibt es tief verschachtelte Strukturen, die ebenfalls von MAPPING profitieren können. Besonders in komplexen Datenmodellen, wie sie in ERP-Systemen häufig vorkommen, lassen sich mit MAPPING Zuordnungen über verschiedene Hierarchieebenen hinweg elegant abbilden. Entwickler sparen sich damit das mühsame manuelle Extrahieren von Unterstrukturen und das explizite Zuweisen der Felder. Das Resultat ist ein klarer, übersichtlicher Code, der leicht wartbar bleibt und sich flexibel an geänderte Anforderungen anpassen lässt.
Beispiel: Umwandlung einer geschachtelten Struktur
TYPES: BEGIN OF flightDataOld,
flightDetails TYPE sflight,
airlineName TYPE string,
END OF flightDataOld.
TYPES: BEGIN OF flightDataNew,
airlineId TYPE sflight-carrid,
flightNumber TYPE sflight-connid,
departureDate TYPE sflight-fldate,
airlineName TYPE string,
END OF flightDataNew.
DATA flightListOld TYPE TABLE OF flightDataOld.
DATA flightListNew TYPE TABLE OF flightDataNew.
flightListNew = VALUE #( CORRESPONDING #( flightListOld
MAPPING
airlineId = flightDetails-carrid
flightNumber = flightDetails-connid
departureDate = flightDetails-fldate
airlineName = airlineName ) ).
Hier sieht man, dass MAPPING auch mit verschachtelten Strukturen funktioniert. Der Zugriff auf Unterstrukturen erfolgt direkt über feldname-subfeld.
Warum jeder ABAP-Entwickler CORRESPONDING mit MAPPING nutzen sollte
Mit der Einführung von CORRESPONDING mit MAPPING und DEFAULT ab ABAP 7.58 steht Entwicklern eine mächtige, performante und leicht lesbare Möglichkeit zur Verfügung, um Daten zwischen Tabellen zu transformieren.
Diese Technik:
- Reduziert Code-Duplizierung
- Verbessert die Performance
- Erhöht die Wartbarkeit und Lesbarkeit
Für SAP BTP- und Cloud-Integration-Projekte, wie sie die CloudDNA GmbH umsetzt, bietet diese Technik enorme Vorteile. Gerade in Cloud-nativen Erweiterungen, in denen große Datenmengen effizient verarbeitet werden müssen, ist der Einsatz moderner ABAP-Techniken essenziell.
Nutze die neuen Möglichkeiten – für modernen, performanten und lesbaren ABAP-Code!
Weiterführende Themen
Falls du mehr über moderne ABAP-Techniken und deren Anwendung in SAP BTP erfahren möchtest, lohnt sich ein Blick auf die SAP Press-Bücher der CloudDNA GmbH oder die Fachartikel auf unserem Blog.