Vai al contenuto
Kitegra
← Torna al blog

Modulo di questo articolo: Integration Flow Helper

ProcessDirect e JMS in SAP CPI: passare gli header tra iFlow

Come passare header ed exchange property tra iFlow in SAP CPI con ProcessDirect e JMS: indirizzi e code che coincidono, cosa passa e come fare il debug.

ProcessDirect e JMS in SAP CPI: passare gli header tra iFlow

Le integrazioni grandi in SAP CPI si dividono in più iFlow: uno riceve, altri arricchiscono, mappano o inviano. ProcessDirect chiama direttamente un altro iFlow sullo stesso tenant; JMS consegna un messaggio a una coda che un altro iFlow leggerà più tardi. In entrambi i casi la domanda è la stessa: quali dei miei header e delle mie proprietà arrivano dall'altra parte?

Questo articolo spiega come si configurano entrambe le connessioni, cosa le attraversa e cosa no, e come scoprire perché un valore si è perso tra due iFlow.

ProcessDirect: un iFlow che ne chiama un altro

L'iFlow chiamante, il producer, usa un adapter receiver ProcessDirect. L'iFlow chiamato, il consumer, inizia con un adapter sender ProcessDirect. Entrambi hanno un campo Address, e la chiamata si collega solo quando l'indirizzo è esattamente lo stesso da entrambi i lati, per esempio:

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

Entrambi gli iFlow girano sullo stesso tenant, e il consumer deve essere già deployato prima che il producer possa chiamarlo. Un solo consumer deployato può restare in ascolto su un indirizzo. Se usato con uno step Request-Reply, il messaggio finale del consumer torna al producer come risposta.

Cosa passa con ProcessDirect, e cosa no

Il consumer riceve il body del messaggio e gli header del messaggio. Le exchange property restano indietro: il consumer avvia un nuovo exchange senza nessuna delle proprietà del producer.

Per passare una proprietà, copiala in un header con un Content Modifier subito prima della chiamata, per esempio un header orderId con tipo di origine Property e valore orderId. Nel consumer, ricopiala in una proprietà se lì preferisci lavorare con le proprietà. Rimuovi gli header che il consumer non deve ricevere, soprattutto quelli grandi.

JMS: passare un messaggio attraverso una coda

Con JMS, l'adapter receiver JMS del producer scrive il messaggio in una coda, e un iFlow consumer con un adapter sender JMS sullo stesso Queue Name lo legge. I due iFlow sono disaccoppiati: il producer non attende, e il consumer ritenta i messaggi che falliscono.

  • Gli header vengono memorizzati con il messaggio e arrivano al consumer.
  • Le exchange property non vengono memorizzate, a meno che nel receiver JMS non sia attivo Transfer Exchange Properties.
  • Tutto ciò che viene memorizzato con il messaggio ha un limite di dimensione, quindi mantieni piccoli gli header e le proprietà trasferite.
  • Nel consumer, l'header SAPJMSRetries ti dice quante volte il messaggio è stato ritentato.

A confronto

ProcessDirectJMS
Collegamento tra gli iFlowLo stesso Address su entrambiLo stesso Queue Name su entrambi
ChiamataDiretta, può restituire una rispostaAsincrona tramite una coda
Body del messaggioPassaPassa
HeaderPassanoPassano
Exchange propertyNon passano: copiale negli headerPassano solo con Transfer Exchange Properties

I nomi degli header non distinguono tra maiuscole e minuscole su nessuno dei due lati, ma quelli delle exchange property sì, quindi una proprietà ripristinata nel consumer deve essere scritta esattamente come la leggono gli step successivi.

Quando un valore non arriva

  1. Confronta gli indirizzi o i nomi delle code carattere per carattere, compresi la barra iniziale e maiuscole e minuscole.
  2. Verifica che il consumer sia deployato e avviato.
  3. Verifica se il valore era una proprietà: con ProcessDirect non arriva mai, con JMS solo con Transfer Exchange Properties.
  4. Verifica che nessun Content Modifier rimuova l'header in uscita dal producer.
  5. Esegui entrambi gli iFlow con il livello di log su Trace e confronta gli header nell'ultimo step del producer con quelli nel primo step del consumer.

L'articolo su header e proprietà sconosciuti tratta i controlli generali, e Espressioni Camel Simple in SAP CPI la sintassi usata per leggere i valori.

Come aiuta Kitegra

L'estensione del browser Kitegra segue i collegamenti ProcessDirect e JMS tra iFlow. Nel consumer, scrivendo ${ o $ ti suggerisce gli header che gli iFlow collegati impostano, insieme ai nomi di collegamento che condividono, così non devi aprire il producer per controllare come si scrive un nome.

Il suo navigatore elenca tenant, package e iFlow per ogni account SAP, così puoi saltare da un lato all'altro di un collegamento. L'estensione non salva, non esegue il deploy e non modifica mai il contenuto di un iFlow, e il tuo tenant cambia solo quando fai clic su una di quattro azioni ben precise, che si possono disattivare.

Per seguire un messaggio dal producer al consumer, cercalo per Correlation ID: la cronologia elenca ogni iFlow che ha attraversato.

Senza un account Kitegra funziona su 5 iFlow per modulo. Il piano Free ne copre 50, Starter 100 e Pro 300; Business non ha limiti. Confronta i piani.

Provalo nel tuo prossimo iFlow

Scopri cosa fa Kitegra nel designer di SAP Integration Suite, oppure guardalo accanto alle altre estensioni Chrome di Kitegra.

Domande frequenti

Gli header passano attraverso ProcessDirect in SAP CPI?

Sì. L'iFlow consumer riceve il body del messaggio e gli header. Le exchange property non vengono passate.

Come passo una exchange property a un altro iFlow con ProcessDirect?

Copiala in un header con un Content Modifier prima della chiamata ProcessDirect, e ricopiala in una proprietà nel consumer se ti serve lì.

Perché la mia chiamata ProcessDirect non si collega?

Gli indirizzi sono diversi, anche solo per un carattere o una barra, oppure l'iFlow consumer non è deployato sullo stesso tenant.

JMS conserva le exchange property?

Solo se Transfer Exchange Properties è attivo nell'adapter receiver JMS. Gli header vengono sempre memorizzati con il messaggio.

Come so quante volte un messaggio JMS è stato ritentato?

Leggi l'header SAPJMSRetries nell'iFlow consumer, per esempio per smettere di ritentare dopo un certo numero di tentativi.

Due iFlow possono restare in ascolto sullo stesso indirizzo ProcessDirect?

No. Un solo consumer deployato può usare un indirizzo; dai a ogni consumer il suo.

Lavora sugli iFlow senza uscire dal designer

Aggiungi Kitegra a Chrome o Microsoft Edge. Inizia gratis, senza bisogno di un account.