Módulo deste artigo: Integration Flow Helper
ProcessDirect e JMS no SAP CPI: como passar headers entre iFlows
Como passar headers e exchange properties entre iFlows no SAP CPI com ProcessDirect e JMS: endereços e filas que coincidem, o que atravessa e como depurar.

Integrações grandes no SAP CPI são divididas em vários iFlows: um recebe, outros enriquecem, mapeiam ou enviam. O ProcessDirect chama diretamente outro iFlow no mesmo tenant; o JMS entrega uma mensagem a uma fila que outro iFlow lê depois. Nos dois casos, a pergunta é a mesma: quais dos meus headers e propriedades chegam do outro lado?
Este artigo explica como as duas conexões são configuradas, o que as atravessa e o que não atravessa, e como descobrir por que um valor se perdeu entre dois iFlows.
ProcessDirect: um iFlow chamando outro
O iFlow que chama, o produtor, usa um adaptador receptor ProcessDirect. O iFlow chamado, o consumidor, começa com um adaptador emissor ProcessDirect. Os dois têm um campo Address, e a chamada só se conecta quando o endereço é exatamente o mesmo dos dois lados, por exemplo:
Producer iFlow -> ProcessDirect receiver Address: /orders/enrich
Consumer iFlow <- ProcessDirect sender Address: /orders/enrichOs dois iFlows rodam no mesmo tenant, e o consumidor precisa estar implantado antes que o produtor possa chamá-lo. Só um consumidor implantado pode escutar em um endereço. Usado com um passo Request-Reply, a mensagem final do consumidor volta ao produtor como resposta.
O que atravessa o ProcessDirect, e o que não atravessa
O consumidor recebe o corpo da mensagem e os headers da mensagem. As exchange properties ficam para trás: o consumidor começa um novo exchange sem nenhuma das propriedades do produtor.
Para passar uma propriedade, copie-a para um header em um Content Modifier logo antes da chamada, por exemplo um header orderId com tipo de origem Property e valor orderId. No consumidor, copie-a de volta para uma propriedade se preferir trabalhar com propriedades ali. Remova os headers que o consumidor não deve receber, principalmente os grandes.
JMS: passando uma mensagem por uma fila
Com JMS, o adaptador receptor JMS do produtor grava a mensagem em uma fila, e um iFlow consumidor com um adaptador emissor JMS no mesmo Queue Name a lê. Os dois iFlows ficam desacoplados: o produtor não espera, e o consumidor tenta de novo as mensagens que falham.
- Os headers são armazenados com a mensagem e chegam ao consumidor.
- As exchange properties não são armazenadas, a menos que o receptor JMS esteja com Transfer Exchange Properties ligado.
- Tudo o que é armazenado com a mensagem tem um limite de tamanho, então mantenha pequenos os headers e as propriedades transferidas.
- No consumidor, o header
SAPJMSRetriesinforma quantas vezes a mensagem já foi reprocessada.
Lado a lado
| ProcessDirect | JMS | |
|---|---|---|
| Ligação entre os iFlows | O mesmo Address nos dois | O mesmo Queue Name nos dois |
| Chamada | Direta, pode retornar uma resposta | Assíncrona, por uma fila |
| Corpo da mensagem | Passa | Passa |
| Headers | Passam | Passam |
| Exchange properties | Não passam: copie-as para headers | Passam só com Transfer Exchange Properties |
Nomes de header não diferenciam maiúsculas de minúsculas em nenhum dos lados, mas nomes de exchange property diferenciam, então uma propriedade restaurada no consumidor precisa ser escrita exatamente como os próximos passos a leem.
Quando um valor não chega
- Compare os endereços ou nomes de fila caractere por caractere, incluindo a barra inicial e as maiúsculas e minúsculas.
- Confira se o consumidor está implantado e iniciado.
- Confira se o valor era uma propriedade: pelo ProcessDirect ela nunca chega; pelo JMS, só com Transfer Exchange Properties.
- Confira se nenhum Content Modifier remove o header na saída do produtor.
- Rode os dois iFlows com o nível de log em Trace e compare os headers no último passo do produtor com os do primeiro passo do consumidor.
O artigo sobre headers e propriedades desconhecidos cobre as verificações gerais, e Expressões Camel Simple no SAP CPI, a sintaxe usada para ler os valores.
Como o Kitegra ajuda
A extensão de navegador Kitegra segue as ligações ProcessDirect e JMS entre iFlows. No consumidor, digitar ${ ou $ sugere os headers que os iFlows conectados definem, junto com os nomes de ligação que eles compartilham, então você não precisa abrir o produtor para conferir uma grafia.
O painel de navegação da extensão lista seus tenants, pacotes e iFlows para cada conta SAP, para você pular de um lado da ligação para o outro. A extensão nunca salva, implanta nem edita o conteúdo de um iFlow, e o seu tenant só muda quando você clica em uma de quatro ações nomeadas, que podem ser desativadas.
Para seguir uma mensagem do produtor ao consumidor, busque-a pelo Correlation ID: a linha do tempo lista todos os iFlows por onde ela passou.
Sem uma conta Kitegra, ela funciona em 5 iFlows por módulo. O plano Free cobre 50, o Starter 100 e o Pro 300; o Business não tem limite. Compare os planos.
Experimente no seu próximo iFlow
Veja o que o Kitegra faz no designer do SAP Integration Suite, ou confira-o ao lado das outras extensões do Chrome da Kitegra.
Perguntas frequentes
Os headers passam pelo ProcessDirect no SAP CPI?
Sim. O iFlow consumidor recebe o corpo da mensagem e os headers. As exchange properties não são passadas.
Como passo uma exchange property para outro iFlow com ProcessDirect?
Copie-a para um header com um Content Modifier antes da chamada ProcessDirect, e copie-a de volta para uma propriedade no consumidor se precisar dela ali.
Por que minha chamada ProcessDirect não conecta?
Os endereços são diferentes, nem que seja por um caractere ou uma barra, ou o iFlow consumidor não está implantado no mesmo tenant.
O JMS mantém as exchange properties?
Só se Transfer Exchange Properties estiver ligado no adaptador receptor JMS. Os headers são sempre armazenados com a mensagem.
Como sei quantas vezes uma mensagem JMS foi reprocessada?
Leia o header SAPJMSRetries no iFlow consumidor, por exemplo para parar de tentar depois de um certo número de tentativas.
Dois iFlows podem escutar no mesmo endereço ProcessDirect?
Não. Só um consumidor implantado pode usar um endereço; dê a cada consumidor o seu próprio.