Zum Inhalt springen
Kitegra
← Zurück zum Blog

Modul in diesem Artikel: Integration Flow Helper

ProcessDirect und JMS in SAP CPI: Header zwischen iFlows übergeben

So übergeben Sie Header und Exchange Properties in SAP CPI per ProcessDirect und JMS zwischen iFlows: passende Adressen und Queues, was ankommt und wie Sie Fehler finden.

ProcessDirect und JMS in SAP CPI: Header zwischen iFlows übergeben

Große Integrationen in SAP CPI werden auf mehrere iFlows verteilt: einer empfängt, andere reichern an, mappen oder senden. ProcessDirect ruft einen anderen iFlow auf demselben Tenant direkt auf; JMS übergibt eine Nachricht an eine Queue, die ein anderer iFlow später liest. In beiden Fällen lautet die Frage gleich: Welche meiner Header und Properties kommen auf der anderen Seite an?

Dieser Artikel erklärt, wie beide Verbindungen eingerichtet werden, was sie passiert und was nicht, und wie Sie herausfinden, warum ein Wert zwischen zwei iFlows verloren ging.

ProcessDirect: ein iFlow ruft einen anderen auf

Der aufrufende iFlow, der Producer, verwendet einen ProcessDirect-Receiver-Adapter. Der aufgerufene iFlow, der Consumer, beginnt mit einem ProcessDirect-Sender-Adapter. Beide haben ein Feld Address, und die Verbindung kommt nur zustande, wenn die Adresse auf beiden Seiten exakt gleich ist, zum Beispiel:

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

Beide iFlows laufen auf demselben Tenant, und der Consumer muss deployt sein, bevor der Producer ihn aufrufen kann. Auf einer Adresse kann nur ein deployter Consumer lauschen. Zusammen mit einem Request-Reply-Schritt kommt die letzte Nachricht des Consumers als Antwort zum Producer zurück.

Was ProcessDirect passiert und was nicht

Der Consumer erhält den Message Body und die Message Header. Exchange Properties bleiben zurück: Der Consumer startet einen neuen Exchange ohne die Properties des Producers.

Um eine Property zu übergeben, kopieren Sie sie direkt vor dem Aufruf in einem Content Modifier in einen Header, zum Beispiel einen Header orderId mit Quelltyp Property und Wert orderId. Im Consumer kopieren Sie ihn zurück in eine Property, wenn Sie dort lieber mit Properties arbeiten. Entfernen Sie die Header, die der Consumer nicht erhalten soll, vor allem große.

JMS: eine Nachricht über eine Queue übergeben

Bei JMS schreibt der JMS-Receiver-Adapter des Producers die Nachricht in eine Queue, und ein Consumer-iFlow mit einem JMS-Sender-Adapter auf demselben Queue Name liest sie. Die beiden iFlows sind entkoppelt: Der Producer wartet nicht, und der Consumer wiederholt fehlgeschlagene Nachrichten.

  • Header werden mit der Nachricht gespeichert und kommen im Consumer an.
  • Exchange Properties werden nicht gespeichert, es sei denn, beim JMS Receiver ist Transfer Exchange Properties eingeschaltet.
  • Alles, was mit der Nachricht gespeichert wird, unterliegt einer Größenbeschränkung; halten Sie Header und übertragene Properties daher klein.
  • Im Consumer zeigt der Header SAPJMSRetries, wie oft die Nachricht bereits wiederholt wurde.

Im direkten Vergleich

ProcessDirectJMS
Verbindung zwischen den iFlowsDieselbe Address auf beiden SeitenDerselbe Queue Name auf beiden Seiten
AufrufDirekt, kann eine Antwort zurückgebenAsynchron über eine Queue
Message BodyWird übergebenWird übergeben
HeaderWerden übergebenWerden übergeben
Exchange PropertiesWerden nicht übergeben: in Header kopierenNur mit Transfer Exchange Properties übergeben

Header-Namen unterscheiden auf beiden Seiten nicht zwischen Groß- und Kleinschreibung, Namen von Exchange Properties hingegen schon – eine im Consumer wiederhergestellte Property muss also exakt so geschrieben sein, wie die folgenden Schritte sie lesen.

Wenn ein Wert nicht ankommt

  1. Vergleichen Sie die Adressen oder Queue-Namen Zeichen für Zeichen, einschließlich des führenden Schrägstrichs und der Groß-/Kleinschreibung.
  2. Prüfen Sie, ob der Consumer deployt und gestartet ist.
  3. Prüfen Sie, ob der Wert eine Property war: Über ProcessDirect kommt sie nie an, über JMS nur mit Transfer Exchange Properties.
  4. Prüfen Sie, ob kein Content Modifier den Header auf dem Weg aus dem Producer entfernt.
  5. Lassen Sie beide iFlows mit Log-Level Trace laufen und vergleichen Sie die Header im letzten Schritt des Producers mit denen im ersten Schritt des Consumers.

Der Artikel über unbekannte Header und Properties behandelt die allgemeinen Prüfungen, Camel Simple Expressions in SAP CPI die Syntax, mit der die Werte gelesen werden.

Wie der Kitegra hilft

Die Browser-Erweiterung Kitegra folgt ProcessDirect- und JMS-Verbindungen zwischen iFlows. Tippen Sie im Consumer ${ oder $, schlägt sie die Header vor, die die verbundenen iFlows setzen, zusammen mit den Verbindungsnamen, die sie gemeinsam nutzen – Sie müssen den Producer also nicht öffnen, um eine Schreibweise zu prüfen.

Ihr Navigator listet Ihre Tenants, Packages und iFlows für jedes SAP-Konto, sodass Sie von einer Seite einer Verbindung zur anderen springen können. Die Erweiterung speichert, deployt oder bearbeitet nie den Inhalt eines iFlows, und Ihr Tenant ändert sich nur, wenn Sie auf eine von vier benannten Aktionen klicken, die sich abschalten lassen.

Um eine Nachricht vom Producer bis zum Consumer zu verfolgen, suchen Sie sie über ihre Correlation ID: Die Zeitachse listet jeden iFlow, den sie durchlaufen hat.

Ohne Kitegra-Konto funktioniert sie für 5 iFlows je Modul. Der Tarif Free umfasst 50, Starter 100 und Pro 300; Business hat kein Limit. Tarife vergleichen.

Probieren Sie ihn im nächsten iFlow aus

Lesen Sie, was der Kitegra im Designer der SAP Integration Suite leistet, oder sehen Sie ihn neben den anderen Chrome-Erweiterungen von Kitegra.

Häufige Fragen

Werden Header in SAP CPI über ProcessDirect übergeben?

Ja. Der Consumer-iFlow erhält den Message Body und die Header. Exchange Properties werden nicht übergeben.

Wie übergebe ich eine Exchange Property per ProcessDirect an einen anderen iFlow?

Kopieren Sie sie vor dem ProcessDirect-Aufruf mit einem Content Modifier in einen Header und im Consumer zurück in eine Property, falls Sie sie dort brauchen.

Warum kommt mein ProcessDirect-Aufruf nicht zustande?

Die Adressen unterscheiden sich, schon um ein Zeichen oder einen Schrägstrich, oder der Consumer-iFlow ist nicht auf demselben Tenant deployt.

Behält JMS Exchange Properties bei?

Nur wenn Transfer Exchange Properties im JMS-Receiver-Adapter eingeschaltet ist. Header werden immer mit der Nachricht gespeichert.

Woran erkenne ich, wie oft eine JMS-Nachricht wiederholt wurde?

Lesen Sie im Consumer-iFlow den Header SAPJMSRetries, zum Beispiel um die Wiederholungen nach einer bestimmten Anzahl von Versuchen zu beenden.

Können zwei iFlows auf derselben ProcessDirect-Adresse lauschen?

Nein. Nur ein deployter Consumer kann eine Adresse verwenden; geben Sie jedem Consumer eine eigene.

Arbeiten Sie an iFlows, ohne den Designer zu verlassen

Fügen Sie Kitegra zu Chrome oder Microsoft Edge hinzu. Kostenlos starten, ohne Konto.