Zum Hauptinhalt springen

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, username und password in der sapConnection mü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, database und table in der databaseConnection müssen den Daten des Datenbankservers angepasst werden. Eventuell muss auch schema angepasst werden. In der Regel ist dbo jedoch korrekt.

  • Folgende Spalten müssen in der Datenbank vorhanden sein: cost_center_id, controlling_area, valid_until, name, description, sap_messages.

  • Genauere Informationen zur sapConnection sind hier zu finden.

  • Genauere Informationen zur databaseConnection sind hier zu finden.

  • Falls weitere Felder übertragen werden müssen, kann im Array mapping unter operations ein weiterer Eintrag hinzugefügt werden.

  • Falls weniger Felder benötigt werden, können nicht benötigte Einträge aus dem Array mapping unter operations gelö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$filePath2
  • post-body-1.jsonpost-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_2
  • post-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.json auf post-body-1.json geändert werden.
  • Die zugehörige Mapping-Datei post-body-1.json muss 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:

  1. Der endpoint in der sapConnection muss entsprechend angepasst werden.

  2. Die queryParams in der sapConnection müssen entsprechend angepasst werden.

  3. Die direction in operations muss von SAP_TO_DB zu DB_TO_SAP geändert werden.

  4. Im mapping-Array innerhalb von operations müssen die Werte von sourceField und targetField entsprechend angepasst werden.

  5. Im mapping-Array innerhalb von operations müssen die transform Objekte entsprechend angepasst werden. Insbesondere im obigen Beispiel das format-Attribut in formatDate im transform Objekt muss entsprechend angepasst werden. (Siehe auch targetFormat)