L'Operational Data Provisioning (ODP) de SAP fournit une infrastructure technique que vous pouvez utiliser pour prendre en charge deux scénarios d'application différents. Le premier est l'analyse opérationnelle pour la prise de décision dans les processus opérationnels. Le second est l'extraction et la réplication des données. Il existe depuis un certain temps déjà et a remplacé toutes les autres méthodes d'extraction de données complètes et d'extraction delta vers BW/4HANA. SAP a adapté le cadre aux versions plus anciennes de sa suite ERP, telles que SAP ECC, CRM, SRM et SCM, afin de le rendre largement accessible. Cela a incité de nombreux fournisseurs tiers à exploiter les appels de fonction à distance créés pour ODP afin de tirer parti du cadre et de ses capacités.
En février 2024, SAP a publié une note 3255746indiquant qu'à l'avenir, SAP n'autorisera plus l'utilisation des RFC pour l'extraction de données ODP. SAP précise clairement que les modules RFC sont uniquement destinés aux applications internes de SAP et peuvent être modifiés par SAP à tout moment, sans préavis. Il se réserve également le droit de mettre en place des mesures techniques visant à restreindre et à contrôler l'utilisation non autorisée des modules RFC de l'API de réplication des données ODP. Il précise en outre que tout problème rencontré ou causé par des applications tierces ou des applications client utilisant les modules RFC est entièrement à la charge du client, et que SAP n'est pas responsable de la résolution de ces problèmes et ne fournira aucune assistance.
Comme solution, SAP indique que le cadre ODP (Operational Data Provisioning) pour l'extraction et la réplication des données est exposé par une API OData officielle et accessible en externe, et que toutes les applications clients et tierces doivent être développées à l'aide de cette API, car elle fournit une interface stable (lien versla documentation).
Ce blog a pour objectif de vous montrer comment extraire des données du framework ODP via OData et notre Snap Pack SnapLogic S/4HANA.
Qu'est-ce que l'ODP et à quoi sert-il ?
J'ai déjà mentionné que SAP a fait de l'ODP la méthode d'extraction standard pour BW/4 HANA. Le cadre ODP (Operational Data Provisioning) pour la distribution des données fournit une technologie consolidée pour la fourniture et la consommation de données. L'ODP prend en charge l'extraction et la réplication des données pour plusieurs cibles et permet de capturer les modifications à la source. Cela signifie que vous pouvez extraire une grande variété de sources via le cadre. Vous trouverez ci-dessous un schéma souvent utilisé par SAP pour illustrer les capacités et visualiser les différentes options. Tous ces scénarios ODP (souvent appelés contextes) peuvent être utilisés par SnapLogic.

ODP – Extracteurs SAP (ODP_SAP) :
Ce contexte expose les sources de données BW en tant que fournisseurs de données opérationnelles. Une source de données BW définit une structure d'extraction qui est remplie par un code d'extraction, lequel implémente la logique permettant de récupérer les données pertinentes du système ABAP. Le cadre ODP, sans configuration supplémentaire, prend en charge les sources de données publiées par le propriétaire de l'application. La plupart de ces sources de données font partie de SAP Business Suite.
ODP – Vues ABAP CDS (ODP_CDS) :
Les services de données de base ABAP (CDS) améliorent ABAP SQL afin de permettre la définition et l'utilisation natives de modèles de données riches sur le plan sémantique. Cette amélioration augmente la productivité, la facilité d'utilisation, les performances et l'interopérabilité. Le concept clé pour exprimer la sémantique des modèles ABAP CDS est celui des annotations, qui sont associées aux éléments du modèle. En appliquant des annotations avec une sémantique analytique, les vues ABAP CDS peuvent être annotées de manière à ce que les métadonnées résultantes permettent la génération de fournisseurs de données opérationnelles transitoires.
ODP – BW (ODP_BW) :
SAP BW/4HANA expose ses données sous forme de fournisseurs de données opérationnelles à des fins d'extraction. Tous les InfoProviders SAP BW/4HANA pertinents sont pris en charge en tant que sources.
ODP – File d'attente SLT (ODP_SLT) :
Grâce à l'infrastructure ODP et à la réplication basée sur des déclencheurs du serveur de réplication SAP Landscape Transformation (SLT), les données peuvent être transférées en temps réel depuis plusieurs systèmes sources vers un ou plusieurs systèmes cibles. Le serveur de réplication SLT sert de fournisseur pour l'infrastructure ODP, rendant les tables provenant de sources SAP disponibles sous forme de files d'attente delta.
Comment exposer une source de données ODP via OData ?
Pour capturer les deltas, les données source sont écrites dans une file d'attente delta opérationnelle via un processus de mise à jour. Le processus prend en charge l'extraction complète basée sur des paquets pour les très grands volumes à l'aide de la file d'attente delta opérationnelle. Après l'extraction complète initiale, il peut également capturer et extraire les deltas pour les modifications à l'aide de la file d'attente delta opérationnelle. Cependant, la source de données ODP doit prendre en charge les deltas pour cette fonctionnalité. SnapLogic peut ensuite récupérer les données de cette file d'attente delta, ce qui facilite également la surveillance du processus d'extraction et de réplication des données. L'exposition des données est réalisée à l'aide de SAP Gateway Foundation et en générant un service SAP OData avec SAP Gateway Service Builder pour la source de données ODP. Ce service (URL) est accessible à partir d'une application cliente OData externe via OData/HTTP.
Génération du service OData dans le générateur de services Gateway
Le processus ne nécessite aucun code. Tout ce qui est requis dans SAP sera généré, y compris le service OData dans le Gateway Service Builder. Il suffit de naviguer vers la transaction SEGW dans SAP. Commencez par créer un nouveau projet à l'aide de la première icône de la barre de menu marquée en rouge dans la capture d'écran ci-dessous. Dans la fenêtre contextuelle, donnez un nom et une description à votre projet, choisissez Service avec annotations SAPet sélectionnez le package dans lequel vous souhaitez stocker le code généré. Si vous n'avez pas besoin de transférer le code généré vers d'autres systèmes SAP, vous pouvez choisir $TMP comme package.

Une fois le projet créé, sélectionnez Modèle de données et choisissez Redéfinir -> Extraction ODP dans le menu contextuel.

Un assistant vous guidera à travers les étapes au cours desquelles vous pourrez sélectionner toutes les sources de données ODP possibles. Suivez les instructions de l'assistant en cliquant sur le bouton Suivant jusqu'à ce que l'assistant termine en générant le modèle.

Une fois le modèle généré, vous pouvez continuer à générer les services OData en cliquant sur le bouton Générer des objets d'exécution.

Sélectionnez les paramètres par défaut pour tous les réglages et notez le nom du service technique. Il s'agit du nom que portera votre service OData une fois généré.

Activer le service OData
Pour activer le service nouvellement créé, accédez à la transaction /IWFND/MAINT_SERVICE dans SAP. Sélectionnez le bouton Ajouter un service.

Entrez le nom du service technique et appuyez sur Entrée. Sélectionnez ensuite le nom du service technique dans la liste en bas et cliquez sur le bouton Ajouter les services sélectionnés.

Une fois activé, vous pouvez trouver le service dans le catalogue des services en filtrant par nom du service technique.

Comment utiliser le service OData dans SnapLogic ?
Du côté SnapLogic, vous utilisez le Snap SAP S/4HANA Read pour lire les données du service OData exposé. Le service OData utilise un compte qui pointe vers le catalogue OData Version 2 contenant tous les services, comme le montre la capture d'écran ci-dessous.

Dans l'écran Paramètres du SAP S/4HANA Read Snap, recherchez le service OData dans l'objet API ou sélectionnez le service dans la liste déroulante. La création du service à partir de l'extracteur vous donne deux entités à utiliser :
- One with a name starting with EntityOf<objectName>, FactsOf<objectName> or AttrOf<objectName> depending on the type of extractor or view that represents the data source model.
- One one that starts with DeltaLinksOf<objectName> that exposes information about current and past delta tokens.
Par défaut, si vous envoyez une requête au premier service, vous récupérerez un ensemble de données complet, comme vous le feriez avec n'importe quel autre service OData. Cependant, si vous ajoutez l'en-tête de requête spéciale Prefer: odata.track-changes comme indiqué dans la capture d'écran ci-dessous, le service OData s'abonnera à la file d'attente delta opérationnelle (ODQ) et renverra des liens __delta qui vous permettront de demander le delta accumulé. Veillez à supprimer l'entrée par défaut dans le champ Output Entry Limit (Limite d'entrée de sortie) qui représente l'attribut URL top=X dans OData dans le Snap. Si j'avais conservé l'entrée par défaut pendant mes tests, notre système S/4HANA n'aurait pas enregistré la requête dans l'ODQ. Enfin, veillez à cocher la case Raw response (Réponsebrute) pour le Snap afin d'ajouter le lien __delta à la sortie pour les snaps en aval.

Récupération des données ODP dans des paquets
Should you want the ODP data to be retrieved in packages, you can specify an additional value in the Prefer header called odata.maxpagesize=<N> where <N> is the number of packages that should be prepared for retrieval, for example, odata.maxpagesize=50. This starts a background job in SAP for paging and the data is cached in ODQ. Using the odata.maxpagesize value you can specify the quantity of packages to be retrieved from the delta queue. The end of the response contains a relative link in the attribute __next, which can be used to retrieve the next package. This link can be fed into the Has Next and Next URL fields to make the S/4HANA Read Snap page through the packages stored in ODQ by the background job.

Comment puis-je utiliser le Deltatoken dans un pipeline SnapLogic ?
If subscribed successfully to ODQ the output of the S/4HANA Read snap will contain the __delta link. This link contains the query parameter !deltatoken. This URL can be used in subsequent calls to retrieve the delta update from the point in time when the token was issued to your subscription. You can either store the URL or only the token and use it in subsequent runs of the pipeline or alternatively use the DeltaLinksOf<objectName> described above to retrieve all tokens that have been issued for your subscription and then use the last token in the list to read the delta.

Comprendre les informations reçues avec une mise à jour delta
Pour chaque ligne que vous recevez d'un delta, vous obtenez également deux champs supplémentaires nommésODQ_ENTITIYCNTR etODQ_CHANGEMODE. Ces deux champs devront être pris en compte dans la cible afin de déterminer s'il s'agit d'enregistrements modifiés ou nouveaux.

Suivi et résiliation d'un abonnement.
Chaque service OData généré pour ODP contient également deux entités supplémentaires, Abonné à FactsOf<objectName> to determine whether a delta subscription exists for the user and TerminateDeltasForFactsOf<objectName> to terminate delta extraction for the user. In our S/4HANA system the entities where not exposed through the ODP catalog but could be called without issues. The attached pipeline makes use of the SubscribedToFacts service to check if we have subscribed in a previous run to ODQ.



