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.

CloudDNA Bücher

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.