Mapping-Struktur
Der Dateiname des Mappings muss zwingend mit mapping- beginnen, da nur so diese als Mappingdatei erkannt wird.
Struktur
Der Aufbau einer Mappingdatei sieht wie folgt aus:
{
"erpModule": "sap",
"erpFunction": "Funktion",
"clear": true,
"execution": [
{
"sourceTable": "Quell-Tabelle",
"fields": [
{
"sourceField": "Spaltenname der Tabelle",
"targetTable": "Tabelle in Datenbank",
"targetField": "Spalte der Tabelle in Datenbank",
"dbKey": true,
"entryKey": true,
"transform": "",
"virtual": false
}
]
}
]
}
erpModule
Definiert das ERP-Modul, in diesem Fall ist der Wert immer: sap
erpFunction
Definiert die Funktion des ERP-Moduls. Mögliche Werte sind:
readTablecreateLinkprepostpostupdatePrepostdeletePrepostcreateOrUpdateCustomer
clear
Hier wird über einen boolschen Wert definiert, ob der Inhalt der Zieltabelle (Datenbank) vor dem Datenabgleich mit SAP gelöscht werden soll. Für das Aktualisieren der Einträge muss der Wert auf false gesetzt werden.
Dieses Flag betrifft nur, wenn erpFunction=readTable ist!
execution
In dem execution Array werden die Datentransporte konfiguriert. Es muss mindestens ein Eintrag existieren.
Die korrekte Reihenfolge der execution-Einträge ist entscheidend, wenn Daten aus mehreren Tabellen zusammengeführt werden sollen!
Mehr zum Thema ➜ Daten abfragen
sourceTable
Definiert die Quell-Tabelle der Daten.
Je nach erpFunction ist dies
- bei
readTable, eine SAP-Tabelle (siehe dazu Daten abfragen) - bei
prepost/post, eine Datenbanktabelle (siehe dazu Daten senden)
fields
Definition der Felder, die aus der SAP-Tabelle/Datenbanktabelle geladen werden sollen.
fields.sourceField
Spaltenname des Feldes innerhalb der SAP Tabelle/Datenbanktabelle.
fields.targetTable
Name der Datenbank-Tabelle bzw. SAP-Tabelle, in die das Feld synchronisiert werden soll.
fields.dbKey
Optional: Boolscher Wert zur Definition des kombinierten Primär-Schlüssels der Einträge für die Synchronisierung in die Datenbank. Vor dem Abgleich der geladenen SAP-Daten mit der Datenbank wird pro Zieltabelle der Primärschlüssel über alle Spalten aktiviert, die den Wert dbKey auf true gesetzt haben.
Dieses Flag betrifft nur, wenn erpFunction=readTable ist!
fields.entryKey
Optional: Diese Option hat zwei Funktionen:
In der ersten Tabelle wird die Spalte als Pflichtspalte gekennzeichnet.
Wenn die Spalten keine Werte enthalten, werden die Zeilen gefiltert.
In den weiteren Tabellen dient sie als Filter.
Eine ausführliche Erläuterung, siehe Daten abfragen
Dieses Flag betrifft nur, wenn erpFunction=readTable ist!
fields.virtual
Optional: Durch das virtual Flag, wird das Feld nicht in die Datenbank geschrieben. Häufig wird das virtual Flag mit der transform-Funktion verwendet, siehe Prototyp-Funktionen
fields.transform
Optional: Hier gibt es unterschiedliche, vordefinierte aber auch Javascript kompatible Funktionsaufrufe, die die Werte beim Mapping in das targetField manipulieren kann.
Dieses Flag betrifft nur, wenn erpFunction=readTable ist!
Verfügbare Funktionen
formatDate(format = "YYYY-MM-DD", targetFormat = "DD.MM.YYYY"): string;SAPtoSQLDate(): string;← ruft formatDate aufInvertedSAPtoSQLDate(): string;← ruft formatDate aufround(precision = 2): number;parseFloat(): number;take(maxLength: any): any;← ruft substring mit StartIndex 0 auf, die maxLength ist also wie viele Zeichen übernommen werden sollen
Prototyp-Funktionen
Hier kann eine JavaScript gültige Funktion übergeben werden.
Optional lässt sich so aus der aktuellen currentRow mit anderen Feldern kombinieren.
- mapping.json
- Ausgabe
{
"sourceField": "LAUFD",
"targetTable": "paymentproposals_getList",
"virtual": true
},
{
"sourceField": "LAUFI",
"targetTable": "paymentproposals_getList",
"virtual": true
},
{
"sourceField": "XVORL",
"targetField": "ppi_headerid",
"targetTable": "paymentproposals_getList",
"transform": "substring(0,0).concat(currentRow.LAUFD, currentRow.LAUFI)"
}
| LAUFD | LAUFI | XVORL(final) |
|---|---|---|
| 20220101 | MF01 | 20220101MF01 |
Durch den Transformaufruf wird mit substring(0,0) eine zutreffende Funktion "vorgegaukelt" (ist nämlich immer TRUE) und mit concat werden aus den zwei Feldern der currentRow die Werte zusammengefügt und dann im Zielfeld (Datenbankspalte) so auch abgespeichert, obwohl der eigentliche Quellwert 'X' lautetete.
Beispiele
Daten abfragen
Möchte man Daten aus SAP-Tabellen abfragen, so müssen folgende Punkte beachtet werden:
erpFunctionmuss der WertreadTableverwendet werdensourceTablemuss die gewünschte SAP-Tabelle eingetragen werden, z.B.LFB1für LieferantensourceFieldsind die Spaltennamen innerhalb der SAP-Tabelle, z.B.LIFNRfür LieferantennummertargetTablesind die Datenbank-Tabellen, z.B.vendortargetFieldsind die Spaltennamen innerhalb der DB-Tabelle, z.B.vendorid
{
"erpModule": "sap",
"erpFunction": "readTable",
"clear": true,
"execution": [
{
"sourceTable": "SAP-Tabelle",
"fields": [
{
"sourceField": "Spaltenname der SAP-Tabelle",
"targetTable": "Tabelle in Datenbank",
"targetField": "Spalte der Tabelle in Datenbank"
}
]
}
]
}
Im Gegensatz zu anderen Funktionen des SAP Connectors, werden außer dem CPIC Benutzer keinerlei Anpassungen oder Erweiterungen auf SAP Seite benötigt. Hintergrund hierfür ist, dass der SAP Connector den SAP-internen Funktionsbaustein "RFC_READ_TABLE" für den Datenabruf benutzt, welcher in allen bekannten Systemen und Versionen verfügbar und remote ausführbar ist. In restriktiven Umgebungen kann es sein, dass dem CPIC Benutzer die Berechtigung für diesen Aufruf separat zugewiesen werden muss. Sollte es zu Berechtigungs- oder Verbindungsproblemen kommen, werden diese im Log ausgegeben.
Daten senden
Möchte man Daten an SAP senden, so müssen folgende Punkte beachtet werden:
erpFunctionmuss der Wertprepost,updatePrepostoderpostverwendet werdensourceTablemuss die gewünschte Datenbank-Tabellen, z.B.invoiceheadersourceFieldsind die Datenbank-Tabellen, z.B.invoicedatetargetTablesind die SAP-Tabelle, z.B.HEADER_DATAtargetFieldsind die Spaltennamen innerhalb der SAP-Tabelle, z.B.DOC_DATE
{
"erpModule": "sap",
"erpFunction": "prepost",
"clear": true,
"execution": [
{
"sourceTable": "DB-Tabelle",
"fields": [
{
"sourceField": "Tabelle in Datenbank",
"targetTable": "SAP-Tabelle",
"targetField": "Spalte der SAP-Tabelle"
}
]
}
]
}