Beispiel
Voraussetzungen
- Der SAP REST Connector wurde installiert.
- Der SAP REST Connector wurde als Service eingerichtet.
CostCenter von SAP in die Datenbank einspielen
Um Daten, in diesem Fall CostCenter, von SAP in eine Datenbank oder umgekehrt einzuspielen, kann die task-create Route verwendet werden. Dazu wird eine Mapping-Datei als POST-Body an diese Route geschickt.
Mapping-Datei erstellen
{
"sapConnection": {
"baseUrl": "https://sap-api.example.com",
"authentication": {
"username": "sap_user",
"password": "sap_password"
},
"endpoint": "/odata4/sap/api_cost_center/srvd_a2x/sap/costcenter/0001/A_CostCenterText_2",
"queryParams": {
"$select": "Language,ControllingArea,CostCenter,ValidityEndDate,CostCenterName,CostCenterDescription",
"$expand": "*"
}
},
"databaseConnection": {
"type": "mssql",
"host": "db.example.com",
"port": 1433,
"username": "db_user",
"password": "db_password",
"database": "ERPData",
"table": "CostCenters",
"clear": true,
"schema": "dbo",
"options": {
"encrypt": true,
"enableArithAbort": true,
"trustServerCertificate": true,
"connectionTimeout": 30000,
"requestTimeout": 30000,
"pool": {
"max": 10,
"min": 0,
"idleTimeoutMillis": 30000
}
}
},
"operations": [
{
"name": "fetchCostCenters",
"direction": "SAP_TO_DB",
"mapping": [
{
"sourceField": "CostCenter",
"targetField": "cost_center_id",
"transform": {
"transformerType": "trim",
"trim": true
}
},
{
"sourceField": "ControllingArea",
"targetField": "controlling_area",
"transform": {
"transformerType": "trim",
"trim": true
}
},
{
"sourceField": "ValidityEndDate",
"targetField": "valid_until",
"transform": {
"transformerType": "formatDate",
"format": "YYYY-MM-DD"
}
},
{
"sourceField": "CostCenterName",
"targetField": "name"
},
{
"sourceField": "CostCenterDescription",
"targetField": "description",
"transform": {
"transformerType": "trim",
"trim": true
}
},
{
"sourceField": "SAP__Messages",
"targetField": "sap_messages"
}
]
}
]
}
-
Die Werte für
baseUrl,usernameundpasswordin dersapConnectionmüssen an die spezifischen SAP-Systemdaten angepasst werden. Alternativ kann die Anmeldung auch über Zertifikatdateien erfolgen. Weitere Informationen dazu finden Sie hier. -
Die Werte für
host,username,password,databaseundtablein derdatabaseConnectionmüssen den Daten des Datenbankservers angepasst werden. Eventuell muss auchschemaangepasst werden. In der Regel istdbojedoch korrekt. -
Folgende Spalten müssen in der Datenbank vorhanden sein:
cost_center_id,controlling_area,valid_until,name,description,sap_messages. -
Genauere Informationen zur
sapConnectionsind hier zu finden. -
Genauere Informationen zur
databaseConnectionsind hier zu finden. -
Falls weitere Felder übertragen werden müssen, kann im Array
mappingunteroperationsein weiterer Eintrag hinzugefügt werden. -
Falls weniger Felder benötigt werden, können nicht benötigte Einträge aus dem Array
mappingunteroperationsgelöscht werden. -
Weitere Details zum Mapping sind hier zu finden.
Die Mapping-Datei kann nun als post-body.json im Installationsverzeichnis des SAP REST Connectors gespeichert werden. Diese ersetzt die mit der Installation mitgelieferte Beispiel-Datei. Falls die Beispiel-Datei weiterhin benötigt wird, sollte diese vor dem Speichern umbenannt werden.
Request absetzen
Um die Funktion zu testen, kann die Datei request-execution verwendet werden.
Windows
Unter Windows ist es die Datei request-execution.ps1, welche mit folgendem Befehl aus der CMD gestartet werden kann:
cd \pfad\zum\installationsverzeichnis
powershell.exe -ExecutionPolicy Bypass -File .\request-execution.ps1
Linux
Unter Linux ist es die Datei request-execution.sh, welche mit folgendem Befehl gestartet werden kann:
cd /pfad/zum/installationsverzeichnis
./sap-public-cloud-connector
Automatisierung
Nach erfolgreichem Test kann der Datenabruf automatisiert werden. Eine Anleitung dazu gibt es hier.
request-execution erweitern
Falls mehrere Daten abgerufen werden sollen, kann die Datei angepasst werden.
Windows
# Bestimme den Pfad zur JSON-Datei im gleichen Ordner wie das Skript
$scriptPath = Split-Path -Parent $MyInvocation.MyCommand.Path
$filePath = Join-Path -Path $scriptPath -ChildPath "post-body.json"
$body = Get-Content -Path $filePath -Raw
# Bestimme die URL des Endpunkts
$uri = "http://localhost:3000/task"
# Sende den POST-Request
Invoke-RestMethod -Uri $uri -Method Post -ContentType "application/json" -Body $body
$filePath1 = Join-Path -Path $scriptPath -ChildPath "post-body-1.json"
$body1 = Get-Content -Path $filePath1 -Raw
Invoke-RestMethod -Uri $uri -Method Post -ContentType "application/json" -Body $body1
Nun kann die Datei post-body-1.json mit einer weiteren Mapping-Datei ergänzt werden.
Falls zusätzliche Mappings benötigt werden, können die letzten drei Zeilen kopiert und erneut eingefügt werden. Anschließend müssen lediglich die Zahlen angepasst werden:
$filePath1→$filePath2post-body-1.json→post-body-2.json$body1→$body2
Linux
#!/bin/bash
script_dir=$(dirname "$0")
file_path="$script_dir/post-body.json"
if [[ ! -f "$file_path" ]]; then
echo "Fehler: Die Datei 'post-body.json' wurde nicht gefunden!"
exit 1
fi
uri="http://localhost:3000/task"
curl -X POST "$uri" -H "Content-Type: application/json" -d @"$file_path"
file_path_1="$script_dir/post-body-1.json"
if [[ ! -f "$file_path_1" ]]; then
echo "Fehler: Die Datei 'post-body-1.json' wurde nicht gefunden!"
exit 1
fi
curl -X POST "$uri" -H "Content-Type: application/json" -d @"$file_path_1"
Nun kann die Datei post-body-1.json mit einer weiteren Mapping-Datei ergänzt werden.
Falls zusätzliche Mappings benötigt werden, können die letzten sechs Zeilen kopiert und erneut eingefügt werden. Anschließend müssen lediglich die Zahlen angepasst werden:
file_path_1->file_path_2post-body-1.json->post-body-2.json
Unterschiedliche Automatisierung
Soll ein Datenabruf beispielsweise um 2 Uhr nachts und ein anderer um 4 Uhr nachts erfolgen, kann dies erreicht werden, indem die Datei request-execution kopiert und als request-execution-1 gespeichert wird.
Anschließend müssen in der kopierten Datei request-execution-1 folgende Anpassungen vorgenommen werden:
- Der Body-Dateiname muss von
post-body.jsonaufpost-body-1.jsongeändert werden. - Die zugehörige Mapping-Datei
post-body-1.jsonmuss erstellt werden.
Danach kann der Datenabruf für request-execution-1 mithilfe des Schedulers automatisiert werden. Dabei wird in der Anleitung statt request-execution nun request-execution-1 verwendet.
Von der Datenbank in SAP einspielen
Dieser Fall ist ähnlich zum obigen Beispiel. Es sind jedoch einige Änderungen erforderlich:
-
Der
endpointin dersapConnectionmuss entsprechend angepasst werden. -
Die
queryParamsin dersapConnectionmüssen entsprechend angepasst werden. -
Die
directioninoperationsmuss vonSAP_TO_DBzuDB_TO_SAPgeändert werden. -
Im
mapping-Array innerhalb vonoperationsmüssen die Werte vonsourceFieldundtargetFieldentsprechend angepasst werden. -
Im
mapping-Array innerhalb vonoperationsmüssen dietransformObjekte entsprechend angepasst werden. Insbesondere im obigen Beispiel dasformat-Attribut informatDateimtransformObjekt muss entsprechend angepasst werden. (Siehe auchtargetFormat)