Joe Bloggs ist in der Lage Testdaten für zahlreiche Geschäftsanwendungen zu generieren. Ein großer Teil dieser Anwendungen läuft auf SAP-Systemen z.B. S4/HANA – die oft in der Programmiersprache ABAP entwickelt sind. In diesem Artikel erfährst Du wie Du mithilfe von ABAP-Programmen diese Testdaten in Dein System bringen kannst. Weitere Informationen dazu findest Du auch in unserem Tutorial „In nur 5 Minuten: So lädst Du Joe Bloggs Testdaten in Dein SAP-System“.

Jeder Einstieg ist schwer. Um Dir den Einstieg zu erleichtern, habe ich schon ein kleines Programm geschrieben, dass die wesentlichen Elemente enthält. Damit kannst Du einen einfachen Geschäftspartner in ein SAP-System laden. Du willst andere Geschäftsobjekte laden? Kein Problem! Wir stellen Dir dieses Programm unter MIT-Lizenz unter diesem Link zur Verfügung und Du kannst es selbst an Deine Anforderungen anpassen.

Nun will ich Dir aber etwas detaillierter zeigen, wie ich vorgegangen bin. Bei der Entwicklung habe ich mich mit folgenden Aspekten beschäftigt, um eine passende Lösung zu entwickeln:

  • Wie schreibe ich ein ABAP-Programm, das Du ohne Transportwesen, Add-on Installation-Tool oder viel Schreibarbeit zum Einsatz bringen kannst?
  • Wie lese ich Dateien aus einem ZIP-Archiv?
  • Wie lese ich Daten aus CSV-Dateien in mein Datenmodell?
  • Wie persistiere ich die Daten im SAP-System?

Um eine einfache Anwendung zu entwickeln, habe ich mich dazu entschlossen die ganze Logik innerhalb eines Reports in verschiedenen Includes unterzubringen. Ich verwende eine Klasse für die Anwendung selbst, eine für das Modell und ein Interface samt implementierender Klasse für das Logging. Letzteres habe ich auch aufgrund der verordneten Einfachheit nicht als BAL o.ä. realisiert, da ich auf Änderung der Systemeinstellungen verzichten möchte. Ich schreibe klassisch die Nachrichten auf den Ausgabebildschirm.

Die erste Aufgabe des Programms ist das Lesen aus dem ZIP-Archiv, das die Testdaten enthält. Die notwendigen Funktionen für das Lesen der Datei vom Frontend befinden sich in der Klasse CL_GUI_FRONTEND_SERVICES. Ich habe zur Auswahl der richtigen Datei die Methode FILE_OPEN_DIALOG und zum Upload der Datei auf den Application Server die Methode GUI_UPLOAD verwendet. Anschließend werden die binären Daten mit der Funktion SCMS_BINARY-TO_XSTRING aufbereitet, um sie als Input für das ZIP-Archiv (CL_ABAP_ZIP) verwenden zu können.

Der erste Schritt ist nun erledigt, das ZIP-Archiv steht in meiner Applikation zur Verfügung. Der nächste Schritt ist es nun, die CSV-Dateien aus dem ZIP in ein internes Datenmodell zu überführen. Die Dateien repräsentieren jeweils eine Geschäftsentität und sind über Schlüssel miteinander verbunden. Aus diesem Grund werden die Dateien nun nacheinander gelesen und in Datenquellen aus dem Modell überführt. Dabei gibt es allerdings eine Schwierigkeit, da die Anzahl und die Reihenfolge der Daten im CSV nicht bei jeder Generierung gleich ist. Wenn Du Dich mit Joe Bloggs schon etwas mehr beschäftigt hast, weißt Du, dass es die Möglichkeit gibt, die Entitäten durch eigene Attribute zu erweitern. Somit kommen je nach Zusammensetzung der Sets immer noch weitere Daten dazu. Als Lösung dieses Problems, erstelle ich zunächst einen Feldkatalog auf Grundlage der Daten. Der Header bestimmt den Feldnamen und die Datenzeilen den Datentyp und die Länge, wobei ich es mir hier einfach mache und nur Strings verwende. Anschließend verwende ich wieder Standardfunktionen. Die Klasse CL_ALV_TABLE_CREATE stellt über die Methode CREATE_DYNAMIC_TABLE eine dynamische interne Tabelle zur Aufnahme der Daten bereit. Den Inhalt bekomme ich über die Methode CSV_TO_STRUCTURE aus der Klasse CL_RSDA_CSV_CONVERTER.

Im Anschluss werden nun die Daten sequenziell ausgelesen und über die Schlüssel zu einem Objekt zusammengefügt. Übrigens verwende ich in diesem Beispiel der Geschäftspartner von SAP, der wohl auch bei den allermeisten SAP-Kunden im Einsatz sein dürfte. Da Joe Bloggs die Daten nicht für eine spezielle Anwendung bzw. Schnittstellen generiert, ist vor dem Laden ins System noch ein Mappingschritt notwendig. In meinem Beispiel ist es eher trivial, kann aber in komplexen Systemen auch aufwendig werden. Es gibt zahlreiche Möglichkeiten Daten in ein System zu bringen, direkt über SQL, APIs, BAPIs, Migrationsschnittstellen oder -tools, WebServices, etc. In diesem Beispiel habe ich mich für eine Sequenz von BAPIs entschieden:

  • BAPI_BUPA_CREATE_FROM_DATA

  • BAPI_BUPA_ADDRESS_ADD

  • BAPI_BUPA_BANKDETAIL_ADD

  • BAPI_IDENTIFICATION_ADD

  • Und zum Abschluss BAPI_TRANSACTION_COMMIT bzw. BAPI_TRANSACTION_ROLLBACK

Der Vorteil der Nutzung von Standardschnittstellen liegt darin, dass sie in der Regel alle fachlichen und technischen Validierungen durchlaufen und somit die Daten immer konsistent im System ankommen. Führe am Anfang ein paar Tests durch, um sicherzugehen, dass die Daten im System den Anforderungen Deines Testprojektes entsprechen.

Ich hoffe, dass Du einige Anregungen bekommen hast, was man mit Testdaten von Joe Bloggs alles machen kann. Wenn Du Hilfe brauchst bei der Anpassung des Programms an Deine Anforderung oder bei der Generierung der Daten, kannst Du jederzeit über das Kontaktformular mit uns in Verbindung treten.

Beitrag teilen