SAP-Tabellen nach RFC-Art lesen

Porträtfoto von Ingo Sauerzapf
5 min gelesen
Fassen Sie dies mit AI zusammen

Das direkte Auslesen von Tabellen in Ihrem SAP-ERP-System war in der Vergangenheit immer unmöglich, nicht aus technischer Sicht, sondern aufgrund von Lizenzbeschränkungen. Heute sehe ich mehr SAP-Kunden, die über eine Lizenz für den Zugriff auf die Datenbank ihres S/4HANA-Systems verfügen. Dennoch bleibt eines der Probleme bestehen, warum SAP dies in der Vergangenheit nicht erlaubt hat: Es stehen Ihnen einfach keine Datentypen zur Verfügung, da diese sich in dem sogenannten Data Dictionary oder kurz DDIC befinden. 

Wenn Sie die Anwendungsschicht durchlaufen, um die Tabelle zu lesen, erhalten Sie Datentypen über die ABAP-Laufzeitumgebung. Eine Ihrer Optionen ist daher die Verwendung von SAP-Remote-Function-Call-Modulen. In diesem Blog geht es jedoch nicht darum, den geeigneten RFC-fähigen Funktionsbaustein zum Lesen von Tabellen zu finden, sondern vielmehr um das enorme Potenzial von SnapLogics Expressions, die Sie in fast allen Eingabefeldern eines Snap verwenden können, einschließlich der Ausgabe von SAP-RFCs. Lassen Sie uns also gleich einsteigen und sehen, was es für Sie tun kann.

Voraussetzungen

Der RFC Execute Snap kann nur auf SnapLogic Groundplexes ausgeführt werden; er erfordert SAPs JCo und native Bibliotheken. Die Linux-Installation unseres Groundplex enthält alle Bibliotheken, sodass keine zusätzliche Konfiguration erforderlich ist, während dies bei der Windows-Version nicht der Fall ist. Damit RFC auf einem Windows-basierten Groundplex funktioniert, müssen Sie JCo von SAP herunterladen, das Windows 2013 Redistributable Package installieren und den Ordner, der die native SAP JCo-Bibliothek enthält, zur Windows-PATH-Variablen hinzufügen, wie in unserer Dokumentation beschrieben.
Die Konfiguration eines Kontos für SAP Snaps ist unkompliziert. Sie kann direkt auf einem Anwendungsserver oder über die zentrale Instanz erfolgen.

Aufruf des RFC-Funktionsbausteins

Das Lesen einer SAP-Tabelle auf RFC-Weise erfordert einen RFC-fähigen Funktionsbaustein auf der SAP-Seite und das SAP Execute Snap-In in SnapLogic. Ich bin mir sicher, dass auch andere Funktionsbausteine eine bestimmte Tabelle direkt lesen können, aber ich möchte mich in diesem Blog auf RFC_READ_TABLE konzentrieren. Mit diesem RFC-fähigen Funktionsbaustein können Sie die Tabelle, die Sie von außen lesen möchten, angeben, einschließlich einer WHERE-Klausel, wenn Sie diese verwenden möchten. Der Funktionsbaustein gibt es schon seit vielen Jahrzehnten und wird von vielen Projekten bei SAP-Kunden verwendet. Er unterliegt zwar einigen Einschränkungen, auf die wir weiter unten noch eingehen werden, aber ich denke, dass Sie ihn als Alternative zum Schreiben eines eigenen benutzerdefinierten Funktionsbausteins in Betracht ziehen sollten.

Verwendung des SAP Execute Snap

Die Konfiguration des SAP Execute Snap ist ziemlich einfach, wie im folgenden Screenshot gezeigt. Sie müssen lediglich RFC_READ_TABLE als zu verwendenden Funktionsbaustein angeben, und schon sind Sie fertig.

Screenshot 2024-08-08 um 9:14:55 Uhr.png

Idealerweise sollten Sie einen Mapper Snap vor und hinter dem SAP Execute Snap platzieren, um das Verhalten des Funktionsbausteins zu verstehen.

Screenshot vom 08.08.2024 um 9:14:40 Uhr.png

Sobald Sie diese Pipeline validiert haben, können Sie den Mapper Snap vor dem SAP Execute Snap verwenden, um die Tabelle anzugeben, die Sie lesen möchten, indem Sie den Tabellennamen als Zeichenfolge dem Eingabeparameter QUERY_TABLE zuordnen. Optional können Sie mit dem Eingabe-Array OPTIONS eine WHERE-Klausel angeben, wie in der folgenden Abbildung gezeigt.

Screenshot vom 08.08.2024 um 9:18:37 Uhr.png

Wenn Sie die Pipeline ein zweites Mal validieren, werden die aus der im Feld DATA angegebenen Tabelle gelesenen Daten zurückgegeben, wobei alle Felder in einer einzigen Zeichenfolge zusammengefasst sind. Die Einschränkung des Funktionsbausteins wird deutlich, wenn Sie sich die Definition dieses Feldes im SAP Gui in Transaktion SE37 ansehen. Das Feld ist vom Typ TAB512 und hat eine Länge von 512 Zeichen. Das bedeutet, dass Tabellen, deren Gesamtlänge aller Felder 512 überschreitet, nur teilweise oder gar keine Informationen zurückgeben.

Ausgabe.png

Die Umwandlung dieser Zeichenfolgen in nutzbare Daten mit den richtigen Typen kann dann mithilfe der Ausgabetabelle FIELD erfolgen. Diese Tabelle enthält die Informationen zu Typ, Länge und Offset, die zum Aufteilen der Zeichenfolge in einzelne Felder verwendet werden, indem die .map, .toObject, match, parse Funktionen für int float, date, und die substr in SnapLogics-Ausdrücken. Match wird verwendet , um den Typ in der FIELD-Ausgabetabelle zu finden, susbstr gibt den Teil der DATA-Zeichenkette zurück, der die Daten des Feldes enthält, parse(Int, Float, Date) analysiert die Zeichenkette in den entsprechenden SnapLogic-Typ, .toObject erstellt ein neues Objekt mit dem Namen der Felder und den analysierten Inhalt, und map fügt jede Zeile zu einem Array im SnapLogic-Dokument hinzu.

$DATA.map(d=> $FIELDS
.toObject(
    f=> f.FIELD NAME
  , f=> match f.TYPE {
      'I' => parseInt(d.WA.substr(f.OFFSET, f.LENGTH))
    , 'N' => parseFloat(d.WA.substr(f.OFFSET, f.LENGTH))
    , 'P' => parseFloat(d.WA.substr(f.OFFSET, f.LENGTH))
    , 'D' => Date.parse(d.WA.substr(f.OFFSET, f.LENGTH), 'yyyyMMdd')
    , _ => d.WA.substr(f.OFFSET, f.LENGTH).trim()
    }
  )
)
Screenshot vom 08.08.2024 um 9:20:57 Uhr.png

Wenn Sie die Pipeline nun zum dritten Mal validieren, erhalten Sie eine perfekt strukturierte Ausgabe.

Screenshot vom 09.08.2024 um 16:09:13 Uhr.png
Porträtfoto von Ingo Sauerzapf
Senior Professional Services Architect bei SnapLogic
Kategorie: Technik
Einblicke in die Plattform: Technische Einblicke von SnapLogic-Experten

Sehen Sie SnapLogic in Aktion mit einer interaktiven Tour!

Interaktive Tour Demo-Bild