Daten abfragen
Die korrekte Reihenfolge der execution-Einträge ist entscheidend, wenn Daten aus mehreren Tabellen zusammengeführt werden sollen!
Der erste Eintrag des Arrays bestimmt die Tabelle und die Zeilenanzahl. Alle weiteren execution Einträge mit einem entryKey werden zusammengeführt.
Beispiel Zusammenführen
Zur Veranschaulichung wird als Beispiel die Tabelle costcenter mit folgender Einstellung verwendet:
{
"erpModule": "sap",
"erpFunction": "readTable",
"clear": true,
"execution": [
{
"sourceTable": "CSKS",
"fields": [
{
"sourceField": "BUKRS",
"targetTable": "costcenter",
"targetField": "costcenterrecipientid",
"dbKey": true,
"entryKey": true
},
{
"sourceField": "KOSTL",
"targetTable": "costcenter",
"targetField": "costcenterid",
"dbKey": true,
"entryKey": true
},
{
"sourceField": "DATBI",
"targetTable": "costcenter",
"targetField": "ufcostcentervalidto",
"dbKey": true,
"entryKey": true
},
{
"sourceField": "KOKRS",
"targetTable": "costcenter",
"targetField": "ufcostcentercontrollingarea",
"dbKey": true,
"entryKey": true
},
{
"sourceField": "BKZKP",
"targetTable": "costcenter",
"targetField": "ufcostcenterprimarybookingasisblocked"
},
{
"sourceField": "PKZKP",
"targetTable": "costcenter",
"targetField": "ufcostcenterprimarybookingplanblocked"
},
{
"sourceField": "BKZKS",
"targetTable": "costcenter",
"targetField": "ufcostcentersecondarybookingasisblocked"
},
{
"sourceField": "PKZKS",
"targetTable": "costcenter",
"targetField": "ufcostcentersecondarybookingplanblocked"
},
{
"sourceField": "VERAK",
"targetTable": "costcenter",
"targetField": "ufcostcenterresponsible"
}
]
},
{
"sourceTable": "CSKT",
"fields": [
{
"sourceField": "KOSTL",
"targetTable": "costcenter",
"targetField": "costcenterid",
"entryKey": true
},
{
"sourceField": "SPRAS",
"targetTable": "costcenter",
"targetField": "ufcostcenterlang"
},
{
"sourceField": "DATBI",
"targetTable": "costcenter",
"targetField": "ufcostcentervalidto",
"entryKey": true
},
{
"sourceField": "KOKRS",
"targetTable": "costcenter",
"targetField": "ufcostcentercontrollingarea",
"entryKey": true
},
{
"sourceField": "KTEXT",
"targetTable": "costcenter",
"targetField": "costcentername"
}
]
},
{
"sourceTable": "CSKB",
"fields": [
{
"sourceField": "KATYP",
"targetTable": "ufCostArt",
"targetField": "costArtType"
},
{
"sourceField": "KOKRS",
"targetTable": "ufCostArt",
"targetField": "costRecipient",
"entryKey": true
},
{
"sourceField": "KOSTL",
"targetTable": "ufCostArt",
"targetField": "costcenterId",
"entryKey": true
},
{
"sourceField": "KSTAR",
"targetTable": "ufCostArt",
"targetField": "costArt"
},
{
"sourceField": "DATBI",
"targetTable": "ufCostArt",
"targetField": "validTo",
"transform": "SAPtoSQLDate()"
},
{
"sourceField": "DATAB",
"targetTable": "ufCostArt",
"targetField": "validFrom",
"transform": "SAPtoSQLDate()"
},
{
"sourceField": "AUFNR",
"targetTable": "ufCostArt",
"targetField": "orderNumber"
},
{
"sourceField": "EIGEN",
"targetTable": "ufCostArt",
"targetField": "costArtProperty"
}
]
}
]
}
In der Konfiguration fungiert CSKS als Referenztabelle, die die Anzahl der Zeilen bestimmt. Die Zeilen aus CSKT und CSKB werden mit CSKS zusammengeführt.
Zusammenführen
Tabelle CSKS (Referenz)
In der CSKS kennzeichnen wir erforderliche Spalten mit entryKey.
In diesem Fall:
BUKRSKOSTLDATBIKOKRS
Wenn die Spalten keine Werte enthalten, werden die Zeilen gefiltert.
Im nächsten Schritt werden die Daten aus CSKT und CSKB verarbeitet. Um die Daten korrekt zusammenzuführen, muss der entryKey verwendet werden.
Tabelle CSKT
Für die CSKT stehen die folgenden identischen Spalten zur Verfügung:
KOSTLDATBIKOKRS
Nun werden alle Zeilen von CSKS durchlaufen und mit den folgenden Filtern verglichen:
CSKT.KOSTL = CSKS.KOSTL AND
CSKT.DATBI = CSKS.DATBI AND
CSKT.KOKRS = CSKS.KOKRS
Der entryKey entspricht hier somit dem Filter.
Tabelle CSKB
Für die CSKB stehen uns nur die folgenden identischen Spalten zur Verfügung:
KOKRSKOSTL
Nun werden wieder alle Zeilen von CSKS durchlaufen und mit den folgenden Filtern verglichen:
CSKB.KOKRS = CSKS.KOKRS AND
CSKB.KOSTL = CSKS.KOSTL
Der entryKey entspricht hier somit wieder dem Filter.
Dadurch ergibt sich folgendes Schaubild:
Beispiel Abhängigkeiten
Es ist möglich, ein Feld als entryKey zu definieren, das nicht in der Referenztabelle vorhanden ist. Dieses Feld wird erst später von einer anderen Tabelle gefüllt.
Aus der MKPF benötigen wir den Wert XBLNR. Diesen erhalten wir über den Schlüssel MBLNR, der uns nur in der MSEG zur Verfügung steht.
Zusammenführen
Tabelle EKPO (Referenz)
In der EKPO kennzeichnen wir erforderliche Spalten mit entryKey.
In diesem Fall:
EBELNEBELPBUKRSMATNR
Wenn die Spalten keine Werte enthalten, werden die Zeilen gefiltert.
Tabelle MSEG
Für die MSEG stehen die folgenden identischen Spalten zur Verfügung:
EBELNEBELP
Nun werden alle Zeilen von EKPO durchlaufen und mit den folgenden Filtern verglichen:
EKPO.EBLN = MSEG.EBLN AND
EKPO.EBELP = MSEG.EBELP
Der entryKey entspricht hier somit dem Filter.
Tabelle MKPF
In der MKPF steht keine Spalte der Referenztabelle zur Verfügung.
Durch die Datenanreicherung aus der MSEG haben wir aber die Spalte MBLNR.
Nun werden alle Zeilen von EKPO durchlaufen und mit den folgenden Filtern verglichen:
EKPO.MBLNR = MKPF.MBLNR
Zusammenfassung
Finale Konfiguration
{
"erpModule": "sap",
"erpFunction": "readTable",
"clear": true,
"execution": [
{
"sourceTable": "EKPO",
"fields": [
{
"sourceField": "EBELN",
"targetTable": "orderItem",
"targetField": "orderNumber",
"dbKey": true,
"entryKey": true
},
{
"sourceField": "EBELP",
"targetTable": "orderItem",
"targetField": "itemNumber",
"dbKey": true,
"entryKey": true
},
{
"sourceField": "BUKRS",
"targetTable": "orderItem",
"targetField": "recipient",
"entryKey": true
},
{
"sourceField": "MATNR",
"targetTable": "orderItem",
"targetField": "articleNumber",
"entryKey": true
},
]
},
{
"sourceTable": "MSEG",
"fields": [
{
"sourceField": "EBELN",
"targetTable": "orderItem",
"targetField": "orderNumber",
"dbKey": true,
"entryKey": true
},
{
"sourceField": "EBELP",
"targetTable": "orderItem",
"targetField": "itemNumber",
"dbKey": true,
"entryKey": true
},
{
"sourceField": "MBLNR",
"targetTable": "orderItem",
"targetField": "receiptNumber"
}
]
},
{
"sourceTable": "MKPF",
"fields": [
{
"sourceField": "MBLNR",
"targetTable": "orderItem",
"targetField": "receiptNumber",
"dbKey": true,
"entryKey": true
},
{
"sourceField": "XBLNR",
"targetTable": "orderItem",
"targetField": "deliveryNoteNumber"
}
]
}
]
}