Im digitalen Zeitalter sind Echtzeitinformationen für Kunden unverzichtbar – nicht nur in Endkunden-Webshops, sondern zunehmend auch auf Großhandelsplattformen. Insbesondere die Verfügbarkeit von Produkten ist entscheidend. SAP stellt diese Daten in der Public Cloud über OData Services zur Verfügung. In diesem Artikel erfahren Sie, wie Sie diese Daten mithilfe der SAP Integration Suite und des SAP Event Mesh in Ihren Webshop integrieren.
Vorbereitung notwendiger Systemkomponenten
Neben Ihrer Public-Cloud-Instanz benötigen Sie die folgenden Apps in der SAP BTP:
- SAP Integration Suite (basic oder standard SKU)
- SAP Event Mesh (default SKU)
- Verbindung des SAP Event Mesh mit Ihrem Public Cloud-System, um Business-Events zu verarbeiten.
Neben den SAP-Komponenten verwenden wir für dieses Integrationsbeispiel Shopify bzw. dessen REST-API als Webshop. Um mit der Shopify-API zu interagieren, benötigen Sie eine benutzerdefinierte Shopify-App bzw. ein API-Zugriffs-Token.
Die Shopify-App benötigt mindestens die folgenden Berechtigungen:
- write_inventory: zum Schreiben von Verfügbarkeiten
- read_inventory: zum Lesen von Inventardaten
- read_products: zum Lesen von Produktdaten
Alternativ können auch eigene Shops verwendet werden, sofern diese über HTTPS aus der SAP Integration Suite erreichbar sind.
Der Rest des Artikels setzt voraus, dass alle Komponenten zur Verfügung stehen und
- Events aus dem Public Cloud-System im Event Mesh grundsätzlich hinzugefügt und registriert werden können (z.B. ist die Kommunikationsvereinbarung SAP_COM_0092 aktiv und es existiert eine Instanz des Cloud Extensibility Services - Messaging)
- Ihre SAP Integration Suite für Process Integration (CPI) freigeschaltet ist
- Sie ein Shopify Access-Token besitzen (oder Zugriffsdaten auf Ihren eigenen Webshop)
- Produkte mit demselben Namen im Webshop und im SAP-System angelegt sind
Hinweis: Für die Integration von Nicht-Echtzeit-Operationen an der Shopify API gibt es bereits einen Adapter im Business Accelerator Hub, den Sie verwenden können, um z.B. Verkaufsbelege zu synchronisieren.
Darstellung des Integrationsszenarios
Jedes Mal, wenn ein Kunde einen Auftrag in Ihrem Webshop platziert, wird dieser Vorgang in Ihrem ERP-System abgebildet. Der genaue Prozess kann individuell variieren, führt jedoch in der Regel zu einem Verkaufsbeleg (Sales Order), in dem alle bestellten Artikel vermerkt sind.
Auf Basis dieses Verkaufsbelegs wird zu einem späteren Zeitpunkt eine „Ausgehende Lieferung" (Outbound Delivery) erzeugt. Dieser Schritt dient als Indikator dafür, dass die Ware auch wirklich das Lager in Richtung Kunde verlässt.
Welches dieser beiden Ereignisse Sie verwenden, hängt von Ihrer Verkaufsstrategie ab. Sie könnten auch beide Ereignisse abbilden und basierend auf Faktoren wie Produktklassen entscheiden, zu welchem Zeitpunkt die Verfügbarkeit im Webshop aktualisiert wird. Der Einfachheit halber gehen wir im Folgenden davon aus, dass Sie bereits einen Prozess haben, um eines der beiden Dokumente aus dem Webshop heraus zu erzeugen.
Das Integrationsszenario sieht wie folgt aus:
- Wir konzentrieren uns auf den eventgesteuerten Ablauf, sobald ein neuer Verkaufsbeleg angelegt wird
- Der Event Mesh propagiert das Event an die SAP Integration Suite
- In der SAP Integration Suite rufen wir anschließend einen OData-Service auf, der uns die Daten zu jeder Position im Auftrag liefert
- Jede Position wird dann einzeln an die Shopify-API übertragen
Konfiguration der Eventsteuerung
- Öffnen Sie die Fiori App „Bereitstellung von Unternehmens-/technischen Ereignissen – Kanalbindung Konfigurieren“. Dort wird Ihr Kanal, der für Sie während der Erstellung des Messaging-Dienstes in der BTP erstellt wurde, angezeigt.
- Klicken Sie auf den Kanal und navigieren Sie im Reiter „Bindungen ausgehendes Topic“ auf „Anlegen“.
- Tragen Sie als Topic folgenden Wert ein: sap/s4/beh/salesorder/v1/SalesOrder/Created/v1. Klicken Sie anschließend auf „Anlegen“. Das Topic wird nun an verbundene Clients propagiert.
- Öffnen Sie als nächstes Ihren Event Mesh in der SAP BTP und erstellen Sie eine neue Queue, z.B. mit dem Namen „SalesOrderEvents“. Alle weiteren Einstellungen können Sie im Standard belassen.
- Klicken Sie als nächstes auf „Actions -> Queue Subscriptions‘ und tragen Sie nun als Topic folgenden Wert ein: sap/S4HANAOD/s4ce/ce/sap/s4/beh/salesorder/v1/SalesOrder/Created/v1. Achten Sie darauf, den Namespace durch den Namespace Ihres eigenen Event-Mesh zu ersetzen, sofern nötig.
- Klicken Sie anschließend auf „Add“.
Damit ist die Konfiguration der Eventsteuerung abgeschlossen. Sie können nun probeweise einen Verkaufsbeleg anlegen, um die Propagierung des Events auszulösen. Nutzen Sie dazu die App „Kundenaufträge Anlegen“ oder Ihre bestehende Integration. Sobald der Beleg angelegt wird, erhalten Sie im Event Mesh eine Nachricht:
Für die Entwicklung des Flows können Sie ebenfalls unter „Test“ die Daten, die Sie aus dem SAP erhalten, auslesen und mit einem HTTP-Client das Event simulieren. Dies spart etwas Zeit, da Sie nicht jedes Mal einen neuen Beleg erzeugen müssen.
Wählen Sie dazu einfach die Queue & den Client aus. Klicken Sie anschließend auf „Consume Message".
Den Wert aus „Message Data“ können Sie im Zusammenspiel mit einem HTTP-Client wie Bruno oder Postman an den Endpunkt der CPI senden, um dessen Funktionalität zu testen.
Vorbereitungen für die Integrationsentwicklung
Bevor Sie mit der Entwicklung beginnen, müssen Sie noch vier wichtige Konfigurationen vornehmen:
- Aktivierung der Kommunikationsvereinbarungen
- Erstellung von API-Providern für die beiden Services & zugehöriger API-Proxies. Dies ist optional, wird jedoch empfohlen, um eine zusätzliche Sicherheitsebene und Flexibilität bei der API-Verwaltung zu gewährleisten.
- Hinterlegen von Credentials in der SAP Integration Suite
- Anlage eines Users für den Versand von Nachrichten an die CPI
1. Aktivierung der Kommunikationsvereinbarungen
Die beiden Kommunikationsvereinbarungen, die Sie benötigen sind SAP_COM_0109 für die Integration von Kundenaufträgen und SAP_COM_0115 für die Integration von Produktverfügbarkeiten.
Um diese zu aktivieren unternehmen Sie folgende Schritte:
- Öffnen Sie die App „Kommunikationsvereinbarungen“ und klicken Sie auf „Neu“.
- Suchen Sie nach der Standard-Kommunikationsvereinbarung und füllen Sie die jeweils notwendigen Felder aus.
- Notieren Sie sich den Benutzernamen und das Passwort des Kommunikationsbenutzers – diese benötigen Sie, um die API aufzurufen.
- Wiederholen Sie den Vorgang für die andere Kommunikationsvereinbarung.
2. Erstellung von API-Providern und API-Proxies
Die SAP Integration Suite bietet mit dem API-Management eine zentrale Plattform für alle Schnittstellen in Ihrer Systemlandschaft. Diese Plattform erleichtert nicht nur die Administration, sondern bietet auch Möglichkeiten, über Regelwerke (Policies) zusätzliche Sicherheitsvorkehrungen zu treffen, wie z.B. eigene Authentifizierungsflows oder IP-Whitelisting.
Die Erstellung eines API-Providers ist optional, aber durchaus empfehlenswert. Falls Sie diesen Schritt überspringen möchten, verwenden Sie im Integrationsflow bitte die URL des jeweiligen OData Services aus dem Public Cloud-System.
- Navigieren Sie zunächst unter Configure -> APIs zum Tab „API Providers" und klicken Sie auf „Create".
- Geben Sie einen Namen für die API ein, z.B. „S4H_Public_Cloud".
- Geben Sie im „Connection"-Reiter Details zu Ihrer Verbindung an:
- Bei Type: Internet
- Bei Host: Den Hostnamen Ihrer Public Cloud-Instanz (ohne Protokoll)
- Port: 443
- Use SSL: Haken setzen
- Geben Sie bei Catalog Service Settings die folgenden Informationen ein:
- Path Prefix: /sap/opu/odata
- Service Collection URL: /IWFND/CATALOGSERVICE;v=2/ServiceCollection
Authentication Type: Basic - Username: Username des Kommunikationsbenutzers
- Password: Passwort des Kommunikationsbenutzers
- Klicken Sie dann auf „Save“. Der API-Provider wird für Sie erstellt.
- Kehren Sie dann zurück auf die Übersichtsseite und im Tab „API Proxies“ auf „Create“.
- Tragen Sie nun im API Provider „SAP_Public_Cloud“ ein und klicken Sie auf „Discover“. Hier werden nun alle aktiven Services aus Ihrem Cloud System angezeigt, unter anderem auch die Services für Verkaufsbelege und Produktverfügbarkeiten.
- Wählen Sie den Serivce „API_SALES_ORDER_SRV“ aus und klicken Sie auf OK. Der ausgewählte Service wird nun für Sie ausgefüllt. Geben Sie optional noch eine Beschreibung unter „Short Text“ ein und klicken Sie auf „Create“.
- Kehren Sie nun in die Übersicht zurück. Klicken Sie auf die drei Punkte neben dem Proxy und anschließend auf „Deploy“.
Sie können nach Anlage und Freigabe des Proxies prüfen, ob sich der Service aufrufen lässt. Navigieren Sie dazu in den Tab „Resources“ und öffnen Sie den ersten Eintrag. Klicken Sie auf „Try it out“.
Für den Service müssen Sie sich authentifizieren. Um den entsprechenden Header zu setzen, können Sie auf „Add“ -> „Header“ klicken.
Scrollen Sie weiter nach unten, bis Sie das neue Feld finden. Geben Sie hier folgende Werte ein:
- Header Name: Authorization
- Header Value: Basic <base64-string>
Der Base64-String setzt sich aus dem Namen und Passwort des Kommunikationsbenutzers zusammen, welche durch einen Doppelpunkt getrennt und anschließend in base64 encodiert wurden.
Haben Sie z.B. folgende Daten für den Kommunikationsbenutzer:
- Username: cpro-cpi-article-user
- Passwort: super-secret
können Sie mit dem folgenden Befehl in der Windows Powershell ausführen:
Ersetzen Sie jeweils den Nutzernamen und das Passwort.
$plainText = "cpro-cpi-article-user:super-secret"
$bytes = [System.Text.Encoding]::UTF8.GetBytes($plainText)
$base64 = [Convert]::ToBase64String($bytes)
Write-Output $base64
Klicken Sie anschließend auf „Execute“. Wenn Sie einen Code 200 erhalten, ist der API-Proxy erfolgreich für die Nutzung freigeschaltet.
Nachdem Sie validiert haben, dass der Proxy aufrufbar ist, erstellen Sie noch den API-Proxy für den Verfügbarkeitsservice und geben Sie diesen frei. Der Ablauf ist analog zur Anlage des Proxies für die Verkaufsbelege.
3. Hinterlegen der Credentials in der Integration Suite
In der Integrationsentwicklung gilt es als Best-Practice, Zugangsdaten nicht direkt im Integrationsprozess zu hinterlegen. Stattdessen sollten Sie sowohl das Shopify-Token als auch den Nutzernamen und das Passwort als Credentials im Integration Suite Secret Store hinterlegen.
- Navigieren Sie dazu unter „Monitor“ -> “Integrations and APIs“ in „Security Material“.
- Klicken Sie auf „Create“ -> „User Credentials“
- Geben Sie hier die Zugangsdaten für Ihren Kommunikationsbenutzer ein und klicken Sie auf „Deploy“.
Sie können hier neben Zugangsdaten auch sogenannte „Secure Parameters“ hinterlegen. Diese Parameter können später in einem iFlow sicher ausgelesen – und übergreifend für alle Flows, die sie verwenden, rotiert werden. Sofern sich also das Shopify Token ändert, können Sie es hier hinterlegen und es wird automatisch an alle Flows, die das Token verwenden, propagiert
- Klicken Sie wieder auf „Create“ -> „Secure Parameter“.
- Geben Sie hier Ihr Shopify App-Token ein und klicken Sie auf „Deploy“.
Anlage SAP Integration Suite User
Um Nachrichten an den Integrationsflow zu senden, benötigen Sie eine spezielle Rolle namens „ESMB.send“. Diese könnten Sie über eine Rollensammlung direkt unserem User zuweisen, was sich gut für die Entwicklung eignet, aber nicht für eine produktive Umgebung. Stattdessen legen Sie spezielle Credentials an, die als Substitut für Nutzername und Passwort verwendet werden.
- Diese Credentials legen Sie in Ihrem SAP BTP-Subaccount unter „Instances and Subscriptions“ -> „Create“ -> SAP Process Integration Runtime“ an. Wählen Sie bei Plan „integration-flow“ aus und wählen Sie eine Runtime sowie einen Space aus. Klicken Sie anschließend auf „Next“.
- Im folgenden Reiter brauchen Sie keine Anpassungen vorzunehmen. Klicken Sie auf „Next“.
- Klicken Sie abschließend auf „Create“, um die Credentials zu erzeugen.
- Navigieren Sie in die neu erstellte Instanz, sobald sie erzeugt wurde, und legen Sie einen Service Key an.
- Geben Sie einen Namen für den Key ein und klicken Sie auf „Create“.
- Sobald der Key erstellt wurde, können Sie ihn einsehen. Notieren Sie sich die clientid und das clientsecret aus dem Formular. Diese benötigen Sie später, um Nachrichten an die SAP Integration Suite zu senden.
Erstellung des Integrationsflows
Da nun alle Vorbereitungen abgeschlossen sind, können Sie sich dem Flow selbst widmen. Navigieren Sie dazu zu „Design“ -> „Integrations and APIs“ und legen Sie ein neues Paket an:
Legen Sie ein neues Paket an und klicken Sie auf „Save“.
Öffnen Sie anschließend das neu erstellte Paket, klicken Sie auf den Reiter „Artifacts“ -> „Add“ -> „Integration Flow“.
Tragen Sie einen sinnvollen Namen für den neuen iFlow ein und klicken Sie auf „Add and Open in Editor“.
In dem neu erstellten Flow müssen Sie nun folgende Komponenten hinzufügen:
- einen „Sender“: Hierbei handelt es sich um den Webhook aus dem Event-Mesh, den Sie am Ende des Artikels noch konfigurieren werden.
- einen „Empfänger“-Adapter zum Auslesen von Daten aus dem Verkaufsbeleg
- einen „Split“-Vorgang zum Auslesen von Verfügbarkeiten für die einzelnen Position auf dem Verkaufsbeleg
- einen „Empfänger“-Adapter zum Lesen von Artikel-IDs zur SAP-Materialnummer auf der Shopify-API
- einen „Empfänger“ zum Schreiben der Verfügbarkeiten in die Shopify-API
- einen „Gather“-Adapter, um die Rückmeldungen aus Shopify zu verarbeiten
Anlage des Sender-Adapters
Navigieren Sie in den neu erstellten Integrationsflow. Verbinden Sie den „Sender“ mit dem Message-Start-Event und wählen Sie als Adapter HTTPS aus.
Geben Sie eine URL-Adresse ein und entfernen Sie den Haken bei CSRF-Protected.
Sichern und deployen Sie den Flow. Klicken Sie auf „Deployment Status“ und dann auf „Navigate to Manage Integration Content, um die vollständige URL des Endpunktes einzusehen.
Diese URL werden Sie später bei der Erstellung des Webhooks im Event-Mesh verwenden.
Sie können nun die Verbindung mit einem HTTP-Client wie Bruno oder Postman testen. Geben sie dazu Ihre URL als Empfänger und die Credentials, die Sie im Schritt „Anlage Integration Suite User“ erhalten haben, als Basic-Authentication ein.
- Als Username tragen Sie die „clientid“ ein
- Als Passwort tragen Sie das „clientsecret“ ein
Erhalten Sie den Statuscode 200, ist der Flow bereit, Nachrichten zu empfangen. Sie können den HTTP-Client nun weiterverwenden, um während der Flow-Entwicklung Tests durchzuführen. Nutzen Sie dazu die Daten aus dem Punkt „Konfiguration der Eventsteuerung“.
Auslesen aller Positionen aus dem Verkaufsbeleg
Um die Positionen des Verkaufsbelegs zu lesen, brauchen Sie die Nummer des Verkaufsbelegs. Diese erhalten Sie durch das Event aus dem Event Mesh. Welche Werte aus dem Event übertragen werden, haben Sie unter „Konfiguration der Eventsteuerung“ bereits festgestellt. Diese Daten können Sie als Ausgangspunkt für den Flow verwenden.
JSON zu XML
Da es sich um JSON-formatierten Text handelt, müssen Sie ihn zunächst in XML konvertieren. Nutzen Sie hierfür einen JSON-XML-Converter. Diesen finden Sie im Reiter „Transformation“ -> „Converter“ -> „XML to JSON Converter“. Weitere Änderungen an dem Adapter sind nicht notwendig.
Setzen des SalesOrder-Wertes
Fügen Sie einen „Content Modifier“ ein und setzen Sie das folgende Exchange Property:
- Action: Create
- Name: SalesOrder
- Source Type: XPath
- Source Value: //SalesOrder
- Data Type: java.lang.String
Abfrage SalesOrder Position über OData
Fügen Sie einen neuen „Receiver“ unter den Flow hinzu. Wählen Sie dann den Adaptertyp „OData“ aus. Fügen Sie die folgenden Konfigurationen im Reiter „Connection“ ein:
- Address: Den Endpunkt des API-Proxies für Sales Order, den Sie unter Punkt „Erstellung von API-Providern und API-Proxies“ erstellt haben. Falls Sie diesen Schritt übersprungen haben, nutzen Sie hier den Endpunkt Ihres Public Cloud Systems.
- Proxy Type: Internet
- Authentication: Basic
- Credential Name: S4H_COMM_USER entspricht den Credentials, die Sie unter Punkt „Hinterlegen der Credentials in der Integration Suite“ für das Public Cloud-System übergeben haben.
Klicken Sie anschließend auf „Processing“. Hier können Sie entweder den OData-Query Wizard von SAP verwenden oder einfach die folgenden Einträge einfügen:
- Operation: GET
- Resource Path: A_SalesOrder
- Query Options: $filter=(SalesOrder eq '${property.SalesOrder}')&$select=SalesOrder,to_Item/Material,to_Item/SalesOrderItem&$expand=to_Item
Mit dieser Konfiguration lesen Sie alle relevanten Informationen zum Verkaufsbeleg aus.
Führen Sie nun den POST-Request in Ihrem HTTP-Client aus. Sie sollten nun beide Materialien in der XML-Struktur auslesen können, die aus dem OData Service zurückgegeben wird.
Der Flow sollte nun wie folgt aussehen:
Bearbeitung einzelner Materialpositionen
Im Folgeprozess betrachten Sie nicht mehr den Verkaufsbeleg, sondern seine Einzelpositionen. Daher müssen Sie zunächst einen Splitter einfügen, um jedes Material separat zu handhaben.
General Splitter
Erstellen Sie dazu in Ihrem Flow einen „General Splitter“ und konfigurieren Sie Ihn wie folgt:
- Expression Type: XPath
- XPath Expression: //Material
Setzen des Materials als Exchange Parameter
Fügen Sie einen „Content-Modifier“ ein, um die folgenden Exchange Properties anzulegen.
Material:
- Action: Create
- Name: Material
- Source Type: XPath
- Source Value: //Material
- Data Type: java.lang.String
Datum:
- Action: Create
- Name: Date
- Source Type: Expression
- Source Value: ${date:now:yyyy-MM-dd'T'HH:mm:ss'Z'}
- Data Type: java.lang.String
Abfragen der Shopify API – interne Materialnummer
Shopify verwendet für die Anpassung der Lagerbestände interne Artikelnummern, die Sie zunächst ermitteln müssen.
Auslesen des Shopify-API Tokens
Bevor Sie eine Anfrage tätigen, müssen Sie das Shopify-Token aus Ihrem Credential Store auslesen. In unserem Fall ist das Token als Secure-Parameter mit dem Naman „Shopify_API_Token“ hinterlegt. Auf diesen Parameter haben Sie mithilfe eines Groovy-Skiptes Zugriff.
Fügen Sie ein „Groovy Script“ in Ihren Flow ein. Geben Sie den folgenden Code ein:
import com.sap.gateway.ip.core.customdev.util.Message
import com.sap.it.api.ITApiFactory
import com.sap.it.api.securestore.SecureStoreService
def Message processData(Message message) {
// Get the SecureStoreService
def secureStorageService = ITApiFactory.getService(SecureStoreService.class, null)
// Retrieve the secure parameter
def secureParameter = secureStorageService.getUserCredential("Shopify_API_Token")
if (secureParameter != null) {
// Store the secure parameter value in a message property
def secureParameterValue = secureParameter.getPassword().toString()
message.setProperty("Webshop_Token", secureParameterValue)
} else {
throw new RuntimeException("No credentials maintained for ' Shopify_API_Token '")
}
return message
}
Dieses Skript setzt das Exchange Property namens „Webshop_Token“ auf den Wert des Shopify-API Tokens.
Fügen Sie anschließend einen Content-Modifier ein, um das Token als Header-Wert zu setzen.
- Action: Create
- Name: X-Shopify-Access-Token
- Source Type: Property
- Source Value: Shopify_API_Token
Auslesen der Shopify Materialnummer
Fügen Sie als nächstes einen Request-Reply Adapter vom Typ „HTTP“ ein. Konfigurieren Sie diesen wie folgt:
- Address: Ihr Endpunkt für die Shopify API + Pfad „/admin/api/2025-04/products.json“
- Query: title=${prpoerty.Material}
- Request Headers: X-Shopify-Access-Token (wichtig, da sonst der Token nicht übertragen wird)
Fügen Sie anschließend einen „JSON to XML“-Transformationsadapter und einen „Content-Modifier“ ein. Konfigurieren Sie diesen wie folgt:
- Action: Create
- Name: ShopifyItemId
- Source Type: XPath
- Source Value: //inventory_item_id
- Data Type: java.lang.String
Auslesen der Verfügbarkeit
Im ausgelesenen Auftragen finden Sie zwei Produkte, für die Verfügbarkeiten ausgelesen und übertragen werden. Wie bereits beim Auslesen der Shopify-Materialnummer müssen Sie auch hier jedes Material einzeln aus SAP auslesen.
Auslesen des Material-Forecasts
Fügen Sie einen Request-Reply Adapter vom Typ OData ein. Konfigurieren Sie diesen wie folgt im Connection Tab.
Auch hier können Sie entweder den API-Proxy verwenden oder den Public Cloud Endpunkt selbst.
Im Tab Processing geben Sie Folgendes ein:
Um den Prozess zu testen, können Sie nun optional einen Temporären „Gather“-Adapter einfügen, um alle Forecastdaten zusammenzuführen.
Prüfen Sie die Daten nun in Ihrem HTTP-Client. Sie erhalten je Material aus dem Verkaufsbeleg genau einen Forecast-Wert.
Dieser Teil des Flows sieht nun bis hierher so aus:
Transformation der Verfügbarkeiten in Zielformat
Das Zielformat für die Shopify-API im JSON-Format besteht aus drei Teilen:
- Die Location ID (location_id)
- Die Item ID (inventory_item_id)
- Die Verfügbarkeit (available)
Hinweis: Die Location-ID können Sie über den Endpunkt /admin/api/2025-04/locations.json auslesen, der Einfachheit halber behandeln wir in diesem Artikel einen statischen Wert.
Diese Transformation nehmen Sie über Javascript vor. Fügen Sie, nach dem Forecast-OData Adapter, eine XML-JSON Transformation durch.
Ein Forecast hat nun das folgende Format:
Fügen Sie anschließend ein neues Javascript-Skript ein. Javascript in der CPI eignet sich besonders gut dafür, mit JSON zu arbeiten.
Fügen Sie also einen neuen Javascript Adapter hinzu mit dem folgenden Code:
/**
* @description Transformation logic to convert one or multiple forcasts
* received by `API_PRODUCT_AVAILY_INFO_BASIC/CalculateAvailabilityTimeseries`.
* to the Shopify Inventory format
*
* @version 1.1.0
* @author CPRO INDUSTRY Projects and Solutions GmbH
*/
// importClass(com.sap.gateway.ip.core.customdev.util.Message);
function processData(message) {
const payload = message.getBody(java.lang.String);
const json = JSON.parse(payload);
// Set availability to 0 if it's smaller than 0
let availability = +json.DetermineAvailabilityAt.AvailabilityRecord.AvailableQuantityInBaseUnit
if(availability < 0) {
availability = 0;
}
// Set shopify Payload
const availability_data = {
location_id: 105515843915,
inventory_item_id: +message.getProperty('ShopifyItemId'),
available: availability
}
// Set message body to JSON-String
message.setBody(JSON.stringify(availability_data))
return message;
}
Dieser Code transformiert jedes Item in das von der Shopify-API verlangte Format. Ein Beispiel-Payload sieht so aus:
Übergabe an die Shopify-API
In meinem Demoshop habe ich nun die beiden Produkte angelegt:
Wie Sie sehen können, sind beide mit Beständen von 10 bzw. 15 Stück gelistet. Nachdem ich die Daten aus dem SAP-System übertragen habe, sollten beide Bestände auf 0 gesetzt werden.
Legen Sie nun einen finalen Request-Reply Adapter vom Typ HTTP an mit der folgenden Konfiguration:
- Address: Ihr Endpunkt für die Shopify API + Pfad „/admin/api/2025-04/inventory_levels/set.json“
- Method: POST
- Request Headers: X-Shopify-Access-Token
Nach Durchführung des Tests mit dem HTTP-Client und Update der Shop-Seite werden mir nun die Bestände beider Artikel korrekterweise als 0 angezeigt.
Der iFlow ist damit technisch fertig entwickelt. Wir könnten abschließend noch Optimierungen wie Fehlerhandling, Externalisierung von Parametern oder Logging als Features hinzufügen. Da diese Anpassungen sehr individuell sind, lassen wir sie hier heraus und gehen zum letzten Punkt über.
Automatische Versendung des Events
Bevor Sie die Änderungen endgültig testen können, muss noch die eventgesteuerte Automatisierung eingestellt werden. Erledigen Sie dies im Event Mesh der SAP BTP.
Legen Sie aber zunächst einen neuen Auftrag im Public Cloud-System an, den unsere Queue registriert. Darüber hinaus setzen Sie die Mengen im Shopify-Webshop wieder hoch.
Öffnen Sie in Ihrem Public Cloud-System die App „Kundenaufträge Anlegen“ und wählen den Auftragstyp „TA“ aus. Klicken Sie auf „Weiter“. Legen Sie dort einen neuen Auftrag an, z.B. so
Sobald Sie diesen Auftrag sichern, sollte in der EventMesh Queue eine Nachricht registriert werden:
Navigieren Sie nun zu „Webhooks“ und klicken Sie auf „Create Webhook“. Geben Sie hier die folgenden Daten ein:
- Subscription Name: Ein sprechender Name für den Webhook
- Queue Name: Queue, aus der das Event konsumiert werden soll
- Except Handshake: Yes
- Webhook URL: Der Endpunkt des iFlows aus „Anlage eines Sender-Adapters“
- Authentication: BasicAuthentication
- User: clientid aus Schritt „Anlage Integration Suite User“
- Password: clientsecret aus Schritt „Anlage Integration Suite User“
Klicken Sie nun auf „Create“. Die Nachricht aus dem Event Mesh wird umgehend an die CPI versendet. Sie können dies im „Monitor Message Processing“ in der SAP Integration Suite überprüfen.
Prüfen Sie abschließend den Shopify-Bestand, sehen Sie, dass die Werte durch Ihren Integrationsflow korrekt überschrieben wurden:
Weiteres Vorgehen
Die hier vorgestellte Methodik lässt sich, neben der Übertragung von Daten auf Webshops, universell ausweiten. Die Echtzeitverarbeitung in der Integration Suite eignet sich hervorragend für alle Geschäftsprozesse, bei denen Zeit der entscheidende Faktor ist. Ob die Synchronisation von Stammdaten in Subsystemen oder das Verteilen von wichtigen Messwertänderungen an Produkten – mit der Event-basierten Architektur sind Sie immer einen Schritt voraus.























































































