Das Modul "Load SAP Data" liest Daten aus einer SAP-Tabelle über einen RFC-Funktionsbaustein und schreibt sie in eine Zieltabelle in der Datenbank. Welche Felder gelesen werden, ergibt sich aus den Spalten der Zieltabelle. Über ein optionales SQL-Statement in der Transformations-Action können SAP-Selektionsbedingungen übergeben werden.
| Name | Bedeutung |
|---|---|
| Modul | Load SAP Data |
| Modulklasse | DsModSAP |
| Typ | Java |
| Zweck | Daten aus SAP in eine Datenbanktabelle laden |
| Transformationscode | SQL-Statement, das SAP-Selektionsbedingungen liefert (optional) |
| Quellen | Genau ein SAP-Tabellenobjekt (Objekttyp SAP Table) |
| Ziele | Genau eine Datenbanktabelle |
Das Modul verbindet sich über SAP JCo mit einem SAP-System und ruft einen RFC-Funktionsbaustein auf (typischerweise RFC_READ_TABLE oder ZRFC_READ_TABLE). SAP-Tabellenname und Funktionsbaustein werden im SAP-Quellobjekt konfiguriert. Die Spaltennamen der Zieltabelle bestimmen, welche SAP-Felder angefordert werden.
Ist eine Action (SQL-Statement) hinterlegt, wird sie in der Zieldatenbank ausgeführt. Der Wert der ersten Spalte jeder Ergebniszeile wird als Selektionsbedingung an SAP übergeben und in die Tabelle OPTIONS des Funktionsbausteins geschrieben. Die Zieldatenbank filtert dabei keine SAP-Daten — sie liefert nur den Selektionstext.
Ohne Action werden alle Zeilen der konfigurierten SAP-Tabelle gelesen (vorbehaltlich SAP-Berechtigungen und Funktionsbaustein-Limits).
Die SAP-Verbindung wird im Keyfile als Datenbankverbindung vom Typ SAP System hinterlegt. Die URL hat folgendes Format:
host:systemnummer:mandant:sprache
Beispiel:
sap.example.com:00:100:DE
Benutzer und Kennwort werden in den üblichen Verbindungsfeldern gespeichert. Ist die URL auf dummy gesetzt, führt das Modul keinen SAP-Zugriff aus (nützlich für Validate ohne live SAP-System).
Die Quelle ist ein Objekt vom Typ SAP Table (Objekttyp-ID 10):
| Objektfeld | Bedeutung |
|---|---|
| Connection | SAP-Verbindung (Database-ID) |
| Funktionsbaustein (Owner) | Name des RFC-Funktionsbausteins, z. B. RFC_READ_TABLE, ZRFC_READ_TABLE, ZRFC_READ_TABLE_TEXT |
| Table (Name) | SAP-Tabellenname, z. B. NAST, VBAK |
An das Modul darf genau ein SAP-Quellobjekt angeschlossen sein.
Das Modul ist für Funktionsbausteine auf Basis von RFC_READ_TABLE ausgelegt. Häufig verwendete Bausteine:
| Funktionsbaustein | Hinweis |
|---|---|
RFC_READ_TABLE |
Standard-Funktionsbaustein in SAP |
ZRFC_READ_TABLE |
Kundeneigene Variante; nutzt Komprimierung |
ZRFC_READ_TABLE_TEXT |
Variante für Texttabellen |
ZRFC_READ_TABLE_BSAD |
Nutzt OPTIONS_BKPF für die Selektion |
ZRFC_READ_TABLE_BSEG |
Nutzt OPTIONS_BKPF für die Selektion |
Der Funktionsbaustein muss im verbundenen SAP-System vorhanden sein. Der SAP-Benutzer benötigt Leseberechtigung für die Tabelle.
Das Ziel ist eine einzelne Datenbanktabelle. Deren Spaltennamen (in Großbuchstaben) werden an SAP als Feldnamen im Parameter FIELDS übergeben. Die Spaltentypen der Zieltabelle sollten möglichst zu den SAP-Feldtypen passen.
Das Modul liest die Struktur der Zieltabelle zur Laufzeit (SELECT * FROM schema.tabelle WHERE 1=0) und verwendet die Spaltenliste für die SAP-Anfrage und das Einfügen der Daten.
| SAP-Typ | Zielspalte | Konvertierung |
|---|---|---|
Character (C) |
VARCHAR, VARCHAR2, CHAR |
Getrimmter String; leere Werte werden bei nullable Spalten NULL |
Datum (D), 8 Zeichen |
DATE |
Als YYYYMMDD interpretiert; 00000000 wird NULL |
| Datum/Zeit, 14 Zeichen | DATE |
Als YYYYMMDDHHMMSS interpretiert |
Zahl (N) mit nachgestelltem - |
NUMBER |
SAP-Negative format wird umgewandelt (z. B. 123- → -123) |
| NOT NULL-Spalte, leerer SAP-Wert | beliebig | Ein Leerzeichen ' ' |
Das Action-Feld enthält ein SQL-Statement, das in der Zieldatenbank ausgeführt wird. Jede Ergebniszeile löst einen SAP-Leseaufruf aus. Die erste Spalte muss die SAP-Selektionsbedingung als Klartext enthalten.
Der Text wird zeilenweise in die SAP-Tabelle OPTIONS des Funktionsbausteins geschrieben. Pro Zeile sind maximal 72 Zeichen erlaubt (SAP-Limit). Für längere Bedingungen Zeilenumbrüche verwenden (CHR(10) in Oracle, Newline in PostgreSQL).
Die Selektionsbedingung verwendet die SAP-Open-SQL-Syntax von RFC_READ_TABLE, zum Beispiel:
DATVR GE '20260301'
Mehrere Bedingungen:
DATVR GE '20260301'
AND KSCHL EQ 'Z001'
Vergleichsoperatoren sind unter anderem EQ, NE, GT, GE, LT, LE, CP, NP; logische Operatoren AND, OR.
Wichtig: Filterfelder müssen nicht in der Zieltabelle vorhanden sein. Sie müssen nur in der SAP-Quelltabelle existieren.
SELECT 'DATVR GE ''20260301''' FROM dual
Der SQL-String 'DATVR GE ''20260301''' ergibt den SAP-Text DATVR GE '20260301'.
Die doppelten Anführungszeichen '' sind Oracle-SQL-Syntax für ein einfaches Anführungszeichen im String.
SELECT 'DATVR GE ''20260301'''
SELECT 'DATVR GE ''' || TO_CHAR(SYSDATE - 7, 'YYYYMMDD') || '''' FROM dual
Jede Ergebniszeile löst einen separaten SAP-Aufruf aus:
SELECT 'DATVR GE ''20260101''' FROM dual
UNION ALL
SELECT 'DATVR GE ''20260201''' FROM dual
Ist für die Zielverbindung ein Schema definiert, wird ${schema} in der Action vor der Ausführung ersetzt.
Mit speziellen Action-Werten können SAP-Metadaten ohne Datenladung ausgegeben werden:
| Action | Wirkung |
|---|---|
SELECT '1=0' FROM dual |
Gibt die SAP-Feldliste aus (Name, Typ, Länge, Schlüsselflag, Beschreibung) |
SELECT '1=3' FROM dual |
Gibt ein CREATE TABLE-DDL für die SAP-Tabelle aus (Hilfe beim Anlegen der Zieltabelle) |
Für Debug-Modi muss das Log-Level FINE aktiviert sein.
| Name | Typ | Default | Bedeutung |
|---|---|---|---|
| Truncate Before | Boolean | Y | Zieltabelle vor dem Laden leeren (TRUNCATE-Trigger falls vorhanden, sonst DELETE) |
| Delete Before | Boolean | N | Zeilen vor dem Laden löschen (nur wenn Truncate Before aus ist) |
| Delete Condition | Text | — | WHERE-Klausel für partielles Löschen (nur mit Delete Before) |
| Write Size | Number | 10000 | Anzahl Zeilen pro Batch beim Schreiben in die Zieldatenbank |
Das Modul liefert folgende Laufzeitstatistiken:
| Name | Bedeutung |
|---|---|
| rows_processed | Anzahl aus SAP gelesener Zeilen |
| read_duration | SAP-Lesezeit (µs) |
| write_duration | Schreibzeit in die Datenbank (µs) |
| convert_duration | Konvertierungszeit (µs) |
| delete_duration | Lösch-/Truncate-Zeit (µs) |
| row_width | Maximale Zeilenbreite von SAP (SAP-Limit ca. 1000 Zeichen) |
| java_memory | Maximaler Heap-Verbrauch (MB) |
| write_mode | 1 = Batch-Insert, 2 = Oracle Bulk Types |
| rows_upd_non_increment | Anzahl Wiederholungsversuche bei SAP-Verbindungsfehlern |
| module_duration | Gesamtlaufzeit des Moduls (µs) |
Bei SAP-Verbindungsfehlern wiederholt das Modul den Aufruf bis zu viermal mit steigenden Wartezeiten (5, 30, 60 Sekunden).
SAP-Quellobjekt:
| Feld | Wert |
|---|---|
| Funktionsbaustein | RFC_READ_TABLE |
| Table | NAST |
Zieltabelle (Beispiel):
CREATE TABLE staging.nast (
mandt VARCHAR2(3 CHAR) NOT NULL,
objky VARCHAR2(50 CHAR),
kschl VARCHAR2(4 CHAR),
datvr DATE,
uhrvr VARCHAR2(6 CHAR)
);
Action:
SELECT 'DATVR GE ''20260301''' FROM dual
Action leer lassen. Es werden alle zugänglichen Zeilen der SAP-Tabelle gelesen.
Action:
SELECT '1=0' FROM dual
Die Feldliste im Log auswerten, bevor die Zieltabelle definiert wird.
DAUERBELEG_POSTEN erfolgt keine automatische Feldselektion.