Módulo de este artículo: Integration Flow Helper
ProcessDirect y JMS en SAP CPI: cómo pasar headers entre iFlows
Cómo pasar headers y exchange properties entre iFlows en SAP CPI con ProcessDirect y JMS: direcciones y colas que coinciden, qué cruza y cómo depurarlo.

Las integraciones grandes en SAP CPI se dividen en varios iFlows: uno recibe, otros enriquecen, mapean o envían. ProcessDirect llama directamente a otro iFlow del mismo tenant; JMS deja un mensaje en una cola que otro iFlow lee más tarde. En ambos casos la pregunta es la misma: ¿cuáles de mis headers y propiedades llegan al otro lado?
Este artículo explica cómo se configuran ambas conexiones, qué las cruza y qué no, y cómo averiguar por qué un valor se perdió entre dos iFlows.
ProcessDirect: un iFlow que llama a otro
El iFlow que llama, el productor, usa un adaptador receptor ProcessDirect. El iFlow llamado, el consumidor, empieza con un adaptador emisor ProcessDirect. Ambos tienen un campo Address, y la llamada solo se conecta cuando la dirección es exactamente la misma en los dos lados, por ejemplo:
Producer iFlow -> ProcessDirect receiver Address: /orders/enrich
Consumer iFlow <- ProcessDirect sender Address: /orders/enrichAmbos iFlows se ejecutan en el mismo tenant, y el consumidor debe estar desplegado antes de que el productor pueda llamarlo. Solo un consumidor desplegado puede escuchar en una dirección. Si se usa con un paso Request-Reply, el mensaje final del consumidor vuelve al productor como respuesta.
Qué cruza ProcessDirect y qué no
El consumidor recibe el cuerpo del mensaje y los headers del mensaje. Las exchange properties se quedan atrás: el consumidor empieza un exchange nuevo sin ninguna de las propiedades del productor.
Para pasar una propiedad, cópiala en un header con un Content Modifier justo antes de la llamada, por ejemplo un header orderId con tipo de origen Property y valor orderId. En el consumidor, vuelve a copiarla en una propiedad si prefieres trabajar con propiedades ahí. Elimina los headers que el consumidor no debe recibir, sobre todo los grandes.
JMS: pasar un mensaje por una cola
Con JMS, el adaptador receptor JMS del productor escribe el mensaje en una cola, y un iFlow consumidor con un adaptador emisor JMS en el mismo Queue Name lo lee. Los dos iFlows quedan desacoplados: el productor no espera, y el consumidor reintenta los mensajes que fallan.
- Los headers se guardan con el mensaje y llegan al consumidor.
- Las exchange properties no se guardan, salvo que el receptor JMS tenga activado Transfer Exchange Properties.
- Todo lo que se guarda con el mensaje tiene un límite de tamaño, así que mantén pequeños los headers y las propiedades transferidas.
- En el consumidor, el header
SAPJMSRetrieste dice cuántas veces se ha reintentado el mensaje.
Comparación lado a lado
| ProcessDirect | JMS | |
|---|---|---|
| Enlace entre los iFlows | El mismo Address en ambos | El mismo Queue Name en ambos |
| Llamada | Directa, puede devolver una respuesta | Asíncrona, a través de una cola |
| Cuerpo del mensaje | Se pasa | Se pasa |
| Headers | Se pasan | Se pasan |
| Exchange properties | No se pasan: cópialas en headers | Se pasan solo con Transfer Exchange Properties |
Los nombres de header no distinguen mayúsculas de minúsculas en ninguno de los dos lados, pero los nombres de exchange property sí, así que una propiedad restaurada en el consumidor debe escribirse exactamente como la leen los pasos siguientes.
Cuando un valor no llega
- Compara las direcciones o los nombres de cola carácter por carácter, incluida la barra inicial y las mayúsculas y minúsculas.
- Comprueba que el consumidor esté desplegado e iniciado.
- Comprueba si el valor era una propiedad: a través de ProcessDirect nunca llega; a través de JMS, solo con Transfer Exchange Properties.
- Comprueba que ningún Content Modifier elimine el header a la salida del productor.
- Ejecuta ambos iFlows con el nivel de log en Trace y compara los headers del último paso del productor con los del primer paso del consumidor.
El artículo sobre headers y propiedades desconocidos cubre las revisiones generales, y Expresiones Camel Simple en SAP CPI, la sintaxis para leer los valores.
Cómo ayuda Kitegra
La extensión de navegador Kitegra sigue los enlaces ProcessDirect y JMS entre iFlows. En el consumidor, al escribir ${ o $ te sugiere los headers que definen los iFlows conectados, junto con los nombres de enlace que comparten, así que no tienes que abrir el productor para comprobar cómo se escribe algo.
Su panel de navegación lista tus tenants, paquetes e iFlows para cada cuenta de SAP, así que puedes saltar de un lado del enlace al otro. La extensión nunca guarda, despliega ni edita el contenido de un iFlow, y tu tenant solo cambia cuando haces clic en una de cuatro acciones con nombre, que se pueden desactivar.
Para seguir un mensaje del productor al consumidor, búscalo por su Correlation ID: la línea de tiempo lista todos los iFlows por los que pasó.
Sin una cuenta de Kitegra funciona en 5 iFlows por módulo. El plan Free cubre 50, Starter 100 y Pro 300; Business no tiene límite. Compara los planes.
Pruébalo en tu próximo iFlow
Descubre lo que hace Kitegra en el diseñador de SAP Integration Suite, o míralo junto a las demás extensiones de Chrome de Kitegra.
Preguntas frecuentes
¿Los headers pasan por ProcessDirect en SAP CPI?
Sí. El iFlow consumidor recibe el cuerpo del mensaje y los headers. Las exchange properties no se pasan.
¿Cómo paso una exchange property a otro iFlow con ProcessDirect?
Cópiala en un header con un Content Modifier antes de la llamada ProcessDirect, y vuelve a copiarla en una propiedad en el consumidor si la necesitas ahí.
¿Por qué mi llamada ProcessDirect no se conecta?
Las direcciones son distintas, aunque sea por un carácter o una barra, o el iFlow consumidor no está desplegado en el mismo tenant.
¿JMS conserva las exchange properties?
Solo si Transfer Exchange Properties está activado en el adaptador receptor JMS. Los headers siempre se guardan con el mensaje.
¿Cómo sé cuántas veces se reintentó un mensaje JMS?
Lee el header SAPJMSRetries en el iFlow consumidor, por ejemplo para dejar de reintentar después de cierto número de intentos.
¿Pueden dos iFlows escuchar en la misma dirección ProcessDirect?
No. Solo un consumidor desplegado puede usar una dirección; dale a cada consumidor la suya.