Saltar al contenido principal

ForEach

1. Visión General​

El componente ForEach (foreach) repite la ejecución de un conjunto de pasos para cada ítem de una lista, de forma parecida a un bucle en los lenguajes de programación. Se usa cuando el flujo recibe una lista (por ejemplo, ítems de un pedido, filas de una planilla, registros de una API) y necesita ejecutar la misma secuencia de acciones para cada uno de ellos.

Úsalo cuando necesites procesar ítem por ítem de una colección. No es recomendable para decisiones condicionales simples (usa Choice) ni para leer archivos Excel directamente (el componente Excel Reader ya hace la iteración fila por fila por sí solo, sin necesidad de un ForEach por fuera).

2. Prerrequisitos​

No hay credenciales ni accesos externos necesarios — es un componente interno del motor.

3. Autenticación y Conexión​

No aplica.

4. Configuración / Operaciones Soportadas​

ForEach tiene una única operación: iterar sobre una lista y ejecutar un subflujo para cada ítem.

CampoObligatorioTipoDescripciónEjemplo
itemsSíExpresiónRuta/expresión que resuelve a la lista que se va a recorrer. Si el resultado no es una lista (array JSON), el componente trata el valor como un único ítem.Una expresión que apunta a la lista de ítems del pedido
stepSíSubflujoSecuencia de componentes ejecutada para cada ítem de la lista.Un paso que envía cada ítem a un sistema externo
isParallelNoTexto ("true"/"false")Si es true, los ítems se procesan en paralelo; si es false (por defecto), uno por vez, en orden."true"
stopOnErrorNoTexto ("true"/"false")Si es true (por defecto), un error en cualquier ítem interrumpe todo el procesamiento. Si es false, el error de ese ítem se registra y el bucle continúa con los siguientes."false"
isAggregatedResultNoTexto ("true"/"false")Si es true, el resultado final trae el cuerpo de respuesta de cada ítem procesado. Si es false (por defecto), el resultado trae solo contadores (total, éxito, error)."true"

Comportamiento en caso de error: si stopOnError está activado y un ítem falla, el procesamiento entero se interrumpe con error. Si está desactivado, el ítem con error se marca como fallido en el resultado, pero los demás siguen procesándose normalmente.

5. Ejemplos Prácticos​

Ejemplo simple: un flujo recibe una lista de correos y usa ForEach para enviar una notificación a cada uno, uno por vez (isParallel desactivado), deteniendo todo si un envío falla (stopOnError activado, comportamiento por defecto).

Entrada:

{
"emails": ["ana@ejemplo.com", "bruno@ejemplo.com", "carla@ejemplo.com"]
}

Configuración del componente:

{
"componentName": "foreach",
"configurations": {
"items": "{$.body.emails}",
"step": {
"componentName": "http",
"configurations": { "url": "https://api.ejemplo.com/notificar", "method": "POST" }
}
}
}

Respuesta (contadores, comportamiento por defecto de isAggregatedResult):

{
"itemsSize": 3,
"success": 3,
"error": 0
}

Ejemplo avanzado: el mismo escenario, pero procesando los envíos en paralelo (isParallel activado) para ganar velocidad, sin detener el proceso si algún correo específico falla (stopOnError desactivado), y trayendo el resultado detallado de cada envío al final (isAggregatedResult activado) para permitir una auditoría posterior de qué ítems tuvieron éxito o error.

Configuración del componente:

{
"componentName": "foreach",
"configurations": {
"items": "{$.body.emails}",
"isParallel": "true",
"stopOnError": "false",
"isAggregatedResult": "true",
"step": {
"componentName": "http",
"configurations": { "url": "https://api.ejemplo.com/notificar", "method": "POST" }
}
}
}

Respuesta (un ítem, el correo de Bruno, falló pero el procesamiento continuó):

{
"items": [
{ "body": "{\"status\":\"enviado\"}" },
{ "body": "{\"error\":\"Falla al conectar con el servidor de correo\"}" },
{ "body": "{\"status\":\"enviado\"}" }
]
}

6. Errores Comunes y Troubleshooting​

Error / SíntomaCausa probableCómo resolverlo
Flujo interrumpido en medio del procesamiento de una listastopOnError está activado (por defecto) y uno de los ítems generó un error.Si el objetivo es continuar aun con fallas puntuales, desactivar stopOnError.
El resultado final no muestra detalles de los ítems procesadosisAggregatedResult está desactivado (por defecto), trayendo solo contadores.Activar isAggregatedResult para recibir el cuerpo de respuesta de cada ítem.
ForEach procesa la lista entera como un único ítemLa expresión de items no resolvió a una lista JSON válida.Verificar que la expresión apunte correctamente a un array en el mensaje de entrada.