Aller au contenu
Kitegra
← Retour au blog

Module de cet article: Integration Flow Helper

ProcessDirect et JMS dans SAP CPI : transmettre des headers entre iFlows

Comment transmettre headers et exchange properties entre iFlows dans SAP CPI avec ProcessDirect et JMS : adresses et files concordantes, ce qui passe, et comment déboguer.

ProcessDirect et JMS dans SAP CPI : transmettre des headers entre iFlows

Dans SAP CPI, les grandes intégrations sont découpées en plusieurs iFlows : l'un reçoit, d'autres enrichissent, mappent ou envoient. ProcessDirect appelle directement un autre iFlow sur le même tenant ; JMS dépose un message dans une file qu'un autre iFlow lira plus tard. Dans les deux cas, la question est la même : lesquels de mes headers et propriétés arrivent de l'autre côté ?

Cet article explique comment configurer les deux liaisons, ce qui les traverse et ce qui ne les traverse pas, et comment découvrir pourquoi une valeur s'est perdue entre deux iFlows.

ProcessDirect : un iFlow qui en appelle un autre

L'iFlow appelant, le producteur, utilise un adaptateur récepteur ProcessDirect. L'iFlow appelé, le consommateur, commence par un adaptateur émetteur ProcessDirect. Tous deux ont un champ Address, et la liaison ne s'établit que si l'adresse est rigoureusement identique des deux côtés, par exemple :

Producer iFlow  ->  ProcessDirect receiver   Address: /orders/enrich
Consumer iFlow  <-  ProcessDirect sender     Address: /orders/enrich

Les deux iFlows s'exécutent sur le même tenant, et le consommateur doit être déployé avant que le producteur puisse l'appeler. Un seul consommateur déployé peut écouter sur une adresse donnée. Utilisé avec une étape Request-Reply, le message final du consommateur revient au producteur comme réponse.

Ce qui traverse ProcessDirect, et ce qui ne le traverse pas

Le consommateur reçoit le body et les headers du message. Les exchange properties restent derrière : le consommateur démarre un nouvel exchange sans aucune des propriétés du producteur.

Pour transmettre une propriété, copiez-la dans un header avec un Content Modifier juste avant l'appel, par exemple un header orderId avec le type de source Property et la valeur orderId. Dans le consommateur, recopiez-le dans une propriété si vous préférez y travailler avec des propriétés. Supprimez les headers que le consommateur ne doit pas recevoir, surtout les plus volumineux.

JMS : transmettre un message via une file

Avec JMS, l'adaptateur récepteur JMS du producteur écrit le message dans une file, et un iFlow consommateur doté d'un adaptateur émetteur JMS sur le même Queue Name le lit. Les deux iFlows sont découplés : le producteur n'attend pas, et le consommateur réessaie les messages en échec.

  • Les headers sont stockés avec le message et arrivent dans le consommateur.
  • Les exchange properties ne sont pas stockées, sauf si Transfer Exchange Properties est activé sur le récepteur JMS.
  • Tout ce qui est stocké avec le message est soumis à une limite de taille : gardez donc headers et propriétés transférées petits.
  • Dans le consommateur, le header SAPJMSRetries indique combien de fois le message a déjà été réessayé.

Côte à côte

ProcessDirectJMS
Lien entre les iFlowsLa même Address des deux côtésLe même Queue Name des deux côtés
AppelDirect, peut renvoyer une réponseAsynchrone, via une file
Body du messageTransmisTransmis
HeadersTransmisTransmis
Exchange propertiesNon transmises : copiez-les dans des headersTransmises uniquement avec Transfer Exchange Properties

Les noms de headers ne sont pas sensibles à la casse, des deux côtés, mais ceux des exchange properties le sont : une propriété restaurée dans le consommateur doit donc être orthographiée exactement comme les étapes suivantes la lisent.

Quand une valeur n'arrive pas

  1. Comparez les adresses ou les noms de files caractère par caractère, y compris la barre oblique initiale et la casse.
  2. Vérifiez que le consommateur est déployé et démarré.
  3. Vérifiez si la valeur était une propriété : via ProcessDirect, elle n'arrive jamais ; via JMS, seulement avec Transfer Exchange Properties.
  4. Vérifiez qu'aucun Content Modifier ne supprime le header à la sortie du producteur.
  5. Exécutez les deux iFlows avec le niveau de log Trace et comparez les headers de la dernière étape du producteur avec ceux de la première étape du consommateur.

L'article sur les headers et propriétés inconnus couvre les vérifications générales, et Expressions Camel Simple dans SAP CPI la syntaxe utilisée pour lire les valeurs.

Ce qu'apporte Kitegra

L'extension de navigateur Kitegra suit les liaisons ProcessDirect et JMS entre iFlows. Dans le consommateur, taper ${ ou $ suggère les headers que les iFlows reliés définissent, ainsi que les noms de liaison qu'ils partagent : inutile d'ouvrir le producteur pour vérifier une orthographe.

Son panneau de navigation liste vos tenants, packages et iFlows pour chaque compte SAP, ce qui vous permet de passer d'un côté d'une liaison à l'autre. L'extension n'enregistre, ne déploie et ne modifie jamais le contenu d'un iFlow, et votre tenant ne change que lorsque vous cliquez sur l'une de quatre actions nommées, qui peuvent être désactivées.

Pour suivre un message du producteur au consommateur, recherchez-le par son Correlation ID : la chronologie liste tous les iFlows par lesquels il est passé.

Sans compte Kitegra, elle fonctionne sur 5 iFlows par module. Le forfait Free en couvre 50, Starter 100 et Pro 300 ; Business n'a pas de limite. Comparez les forfaits.

Essayez-le dans votre prochain iFlow

Découvrez ce que fait Kitegra dans le designer de SAP Integration Suite, ou voyez-le aux côtés des autres extensions Chrome de Kitegra.

Questions fréquentes

Les headers passent-ils par ProcessDirect dans SAP CPI ?

Oui. L'iFlow consommateur reçoit le body et les headers du message. Les exchange properties ne sont pas transmises.

Comment transmettre une exchange property à un autre iFlow avec ProcessDirect ?

Copiez-la dans un header avec un Content Modifier avant l'appel ProcessDirect, puis recopiez-la dans une propriété dans le consommateur si vous en avez besoin.

Pourquoi mon appel ProcessDirect ne parvient-il pas à se connecter ?

Les adresses diffèrent, ne serait-ce que d'un caractère ou d'une barre oblique, ou l'iFlow consommateur n'est pas déployé sur le même tenant.

JMS conserve-t-il les exchange properties ?

Seulement si Transfer Exchange Properties est activé dans l'adaptateur récepteur JMS. Les headers sont toujours stockés avec le message.

Comment savoir combien de fois un message JMS a été réessayé ?

Lisez le header SAPJMSRetries dans l'iFlow consommateur, par exemple pour arrêter les nouvelles tentatives au-delà d'un certain nombre.

Deux iFlows peuvent-ils écouter sur la même adresse ProcessDirect ?

Non. Un seul consommateur déployé peut utiliser une adresse ; donnez à chaque consommateur la sienne.

Travaillez sur vos iFlows sans quitter le designer

Ajoutez Kitegra à Chrome ou Microsoft Edge. Commencez gratuitement, sans compte.