SAP BW/4HANA - Datenextraktion mit OData ODP
In der Vergangenheit haben wir häufig Open Hub verwendet, um Daten aus SAP BW zu extrahieren. Da dies jedoch mit zusätzlichen Lizenzkosten verbunden war, haben viele SAP BW-Kunden stattdessen zu anderen Methoden gegriffen. Mit der Einführung von BW/4HANA und der Tatsache, dass Open Hub im Lizenzmodell enthalten ist, ergeben sich nun Möglichkeiten, Daten aus SAP BW ohne zusätzliche Kosten zu extrahieren.
Eine Alternative zur Nutzung von OpenHub ist die Verwendung von OData und der ODP-Schnittstelle. Die Verwendung von Open Hub beruht darauf, dass das BW-System die Daten verarbeitet und sie dann auf beliebige Weise an das Ziel für die Datenerfassung weiterleitet. Bei der Verwendung von OData haben Sie die Möglichkeit, die Daten zu ziehen und damit die Abhängigkeit von der BW-Verarbeitung zu verringern, obwohl die Daten natürlich weiterhin gesammelt und in den BW-InfoProvidern persistiert werden müssen. Die Daten können auch mit anderen Methoden abgerufen werden, z.B. mit Hilfe von Berechnungsansichten, die aus InfoProvidern generiert werden; auf diese Option werden wir jedoch nicht näher eingehen.
In diesem Blog möchten wir die einfachen Schritte demonstrieren, die Sie durchführen müssen, um den Zugriff auf einen BW InfoProvider zu ermöglichen, der als vollständige Datenlast oder vollständig mit nachfolgenden Deltalasten konsumiert werden kann.
Voraussetzungen
- SAP BW7.4 oder höheres Release (in meinem Beispiel wird BW/4HANA 2.0 verwendet)
- SAP Gateway Foundation wird entweder lokal oder in einer separaten SAP NetWeaver-Instanz benötigt
- Open Hub Lizenz (wenn Sie nicht BW/4HANA einsetzen)
- OData Client zum Aufruf des Services
- BW InfoProvider mit persistierten Daten
Schritte zur Konfiguration
Zunächst müssen wir in der Transaktion SEGW ein neues Projekt für unseren OData-Dienst anlegen, dem Projekt einen technischen Namen (muss mit Z beginnen, um die Generierung von Objekten in einem Kundennamensraum zu ermöglichen) und eine Beschreibung geben, es einem für Ihr System relevanten Paket zuordnen und die anderen Einstellungen auf den Standardwerten belassen und dann fortfahren.
Jetzt haben Sie ein Projekt, der nächste Schritt ist die Definition des Datenmodells für den OData-Zugriff, also rufen wir das Kontextmenü für das Datenmodell auf und wählen den Menüpfad Redefine à ODP Extraction.
Dadurch wird der Assistent für «OData Access for Operational Data Provisioning» aufgerufen. Geben Sie als Nächstes den ODP-Kontext BW/4HANA ein, damit Sie im Feld «ODP-Name» nach Ihrem DataProvider suchen können. Sobald Sie Ihr ODP-Objekt gefunden haben, klicken Sie auf die Schaltfläche «ODP hinzufügen».
Ihr(e) ODP-Objekt(e) sollte(n) nun in der Liste erscheinen. Wenn Sie weitere ODP-Objekte wie Stammdaten, Texte oder Hierarchien hinzufügen möchten, können Sie dies in der gleichen Dialogbox tun. Sobald Sie Ihre ODPs hinzugefügt haben, klicken Sie auf die Schaltfläche Weiter, um mit dem Assistenten fortzufahren.
Im nächsten Schritt müssen Sie Ihrem Modell und Ihrem Dienst eine Beschreibung geben. Sie können den Namen ändern, wenn Sie möchten, aber wir haben die Standardeinstellungen im Folgenden übernommen.
Im letzten Schritt markieren wir alle Kontrollkästchen der obersten Ebene, um festzulegen, was über den OData-Dienst verfügbar sein soll, und klicken auf Fertig stellen.
Hinweis: Wenn Sie einige der aDSO-Felder einschränken möchten, heben Sie die Auswahl dieser Felder unter dem Entitätstyp «Factsof{service}» auf.
Jetzt müssen wir nur noch die Laufzeitobjekte erzeugen, was über das Symbol oder das Kontextmenü möglich ist.
Akzeptieren Sie die Voreinstellungen und klicken Sie auf das grüne Häkchen, um die ABAP-Objekte zu generieren.
Der letzte Teil ist das Hinzufügen des Dienstes mit der Transaktion /IWFND/MAINT_SERVICE – wählen Sie Dienst hinzufügen
Geben Sie Folgendes ein, um Ihren OData-Dienst zu finden, und klicken Sie auf «Dienste abrufen».
Sie sollten dann Ihren Dienst sehen, ihn auswählen und dann auf «Ausgewählte Dienste hinzufügen» klicken.
Akzeptieren Sie die Standardeinstellungen und ändern Sie das Paket, wenn Sie diese Entwicklung transportieren möchten. Damit ist die Einrichtung des OData-Dienstes abgeschlossen
Testen des OData-Dienstes
Sie können den nativen SAP-Gateway-Client verwenden, um den Dienst zu testen, aber für unsere Tests haben wir uns für Postman entschieden – eine Client-Installation eines Drittanbieters.
Für diesen Test werden wir die anfängliche Last so einrichten, dass Delta-Änderungen verfolgt werden, und dann einige Änderungen in den aDSO laden, um zu demonstrieren, wie die Delta-Änderungen extrahiert werden. Beachten Sie, dass der OData-Client in der Lage sein muss, Header-Einträge zu verarbeiten, um Delta-Extraktionen zu ermöglichen.
Um den von uns generierten Dienst aufzurufen, müssen wir die folgende URL verwenden:
http://<Host>:<Port>/sap/opu/odata/sap/ZORDERITEMS_2_SRV/FactsOfORDERITMS
Bitte beachten Sie, dass Sie den für Ihr System relevanten Host und Port eingeben müssen.
Mit Postman fügen wir die URL ein und fügen auf der Registerkarte Autorisierung einen Benutzernamen und ein Passwort hinzu. Schliesslich müssen wir die folgende Kopfzeile hinzufügen:
Key = PREFER Value = odata.track-changes
Dann können wir auf Senden klicken, um unsere Daten abzurufen.
Die resultierenden Daten können dann eingesehen werden.
Am Ende der Nachricht sehen wir unser Delta-Token.
Diese muss für den nächsten Aufruf verwendet werden, um nur die Delta-Datensätze zu sammeln. Die URL, die wir für den nächsten Aufruf verwenden müssen, lautet:
http://<Host<Port>/sap/opu/odata/sap/ZORDERITEMS_2_SRV/DeltaLinksOfFactsOfORDERITMS(‘D20211116152515_000030000’)/ChangesAfter
Das Ergebnis dieses Aufrufs liefert dann die neuen Daten mit dem Vorher-Nachher-Bild. Der Datensatzmodus muss in der Zieldatenbank oder in den ODQ-Feldern ODQ_ENTITIYCNTR und ODQ_CHANGEMODE berücksichtigt werden, um zu verstehen, ob es sich um geänderte oder neue Datensätze handelt.
Wenn wir den Delta-Queue-Monitor in der BW-Gui untersuchen, können wir unsere beiden Datenanforderungen sehen, wobei die eine die ursprüngliche Delta-Anforderung und die andere die geänderten/neuen Sätze ist.
Wenn es zu einem nachträglichen Ladefehler vom OData-Client kommt, können Sie durch Verwendung des entsprechenden Delta-Tokens immer noch alle Änderungen ab einem bestimmten Zeitpunkt abrufen.
Wenn Sie die angeforderten Delta-Änderungen analysieren müssen, können Sie dies mit dem EntitySet ‹DeltaLinksOfFactsOf[service]› erreichen.
In unseren Tests haben wir nur mit kleinen Datensätzen gearbeitet. Wenn Sie also die Datenextraktion mit Hilfe von Paketen verwalten möchten, sollten Sie einen zusätzlichen Kopfwert hinzufügen.
Header = Prefer Value = odata.maxpagesize=<n>
Wenn es notwendig ist, die Daten, die aus dem SAP BW-System gezogen werden, einzuschränken, dann können Sie auch einen Filterparameter in der URL übergeben; die Syntax dafür ist unten beschrieben. Der Filter wird nach der Entität in der URL angegeben. Sie können bei Bedarf auch mehrere Filter definieren.
/sap/opu/odata/sap/ZORDERITEMS_2_SRV/FactsOfORDERITMS?$filter=PRODUCTID eq ‘MB-1034’
Schlussfolgerung
Diese Methode der Extraktion bietet dem Verbraucher ein hohes Mass an Flexibilität und die Möglichkeit, die Daten zu ziehen, wodurch die Abhängigkeit von der BW-Anwendung verringert, aber nicht beseitigt wird.
Die Schritte, die erforderlich sind, um die Daten über einen OData-Service bereitzustellen, sind äusserst einfach. Der BW-Entwickler hat die vollständige Kontrolle darüber, was sowohl auf DataProvider- als auch auf Feldebene offengelegt wird, so dass beliebige Felder ausgeschlossen werden können oder die Filteroption in der URL eingesetzt werden kann.
Dafür sind keine ABAP-Kenntnisse erforderlich, und alle Methoden und Klassen werden als Laufzeitobjekte generiert, so dass diese Schnittstelle eine echte, klare Alternative zur Generierung von Flat Files über Open Hub oder zum Konsum von OData-BW-Queries bietet.
Die Tatsache, dass Sie in der Lage sind, die ODP-Delta-Funktionalität zu nutzen, bedeutet auch, dass Sie Ihre BW-Anwendung nicht überentwickeln müssen, um Delta-Funktionen für die Datenextraktion bereitzustellen. Sie ist kostenlos verfügbar, wenn Sie OData for ODP Extraction nutzen, wenn Sie BW/4HANA verwenden oder die OpenHub-Lizenz für frühere BW-Versionen erworben haben.
Wenn Sie daran interessiert sind, mehr zu erfahren, oder diese technischen Inhalte im Detail besprechen möchten, nehmen Sie bitte Kontakt mit uns auf.