Load SAP Data

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

Beschreibung

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).

SAP-Verbindung

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).

SAP-Quellobjekt

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.

Unterstützte Funktionsbausteine

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.

Zieltabelle

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.

Datentyp-Konvertierung

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 ' '

Action (SAP-Selektionsbedingung)

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).

SAP-Selektionssyntax

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.

Feste Selektionsbedingung (Oracle)

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.

Feste Selektionsbedingung (PostgreSQL)

SELECT 'DATVR GE ''20260301'''

Dynamische Selektionsbedingung

SELECT 'DATVR GE ''' || TO_CHAR(SYSDATE - 7, 'YYYYMMDD') || '''' FROM dual

Mehrere SAP-Läufe

Jede Ergebniszeile löst einen separaten SAP-Aufruf aus:

SELECT 'DATVR GE ''20260101''' FROM dual
UNION ALL
SELECT 'DATVR GE ''20260201''' FROM dual

Schema-Variable

Ist für die Zielverbindung ein Schema definiert, wird ${schema} in der Action vor der Ausführung ersetzt.

Debug-Modi

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.

Attribute

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

Statistiken

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).

Beispiele

SAP-Tabelle NAST mit Datumsfilter laden

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

Laden ohne Filter

Action leer lassen. Es werden alle zugänglichen Zeilen der SAP-Tabelle gelesen.

Verfügbare SAP-Felder ermitteln

Action:

SELECT '1=0' FROM dual

Die Feldliste im Log auswerten, bevor die Zieltabelle definiert wird.

Einschränkungen

  • Es werden genau eine SAP-Quelle und ein Datenbankziel unterstützt.
  • Pro Aufruf können maximal 9999 Felder angefordert werden.
  • Jede Zeile der SAP-Selektionsbedingung ist auf 72 Zeichen begrenzt.
  • SAP liefert eine maximale Zeilenbreite von ca. 1000 Zeichen; bei sehr breiten Feldlisten sind weniger Spalten oder ein eigener Funktionsbaustein nötig.
  • Für die spezielle Tabelle DAUERBELEG_POSTEN erfolgt keine automatische Feldselektion.
  • Selektionsbedingungen müssen gültige SAP-Feldnamen der konfigurierten Tabelle verwenden.