SubWorkflow
Descripción
Sección titulada «Descripción»El modulo SubWorkflow permite ejecutar otro workflow como un sub-proceso dentro del flujo actual. Soporta tres modos de ejecución: sincronico (espera el resultado antes de continuar), asincronico (lanza y continua sin esperar) y paralelo (ejecuta múltiples instancias si el input es un array). Puede heredar el estado del workflow padre (workflowState) para compartir contexto entre flujos. Cada ejecución genera una instancia hija con trazabilidad completa, registrando la relación padre-hijo en la base de datos. Es ideal para reutilizar lógica de workflow, dividir flujos complejos en sub-procesos manejables o ejecutar operaciones en lote.
En el editor
Sección titulada «En el editor»El nodo Sub Workflow está pensado para gestionarse de un vistazo, sin tener que abrir el flujo hijo para saber a qué apunta.
En el lienzo el nodo es rectangular: el icono a la izquierda y, a la derecha, una banda con el tipo, el modo de ejecución (sync / async / parallel), el nombre del workflow hijo y un enlace ↗ para abrirlo en una pestaña nueva. La alerta de validación queda a la izquierda, despejada.

En el listado de workflows, cada workflow que invoca sub-workflows muestra un chevron para desplegar, anidados debajo, los sub-workflows que llama. Así ves el árbol de dependencias sin abrir el editor. Los que no invocan ninguno no muestran chevron.

Detección de recursión: al elegir el workflow hijo, el panel avisa si se crea un ciclo —directo o indirecto, del tipo A → B → A— mostrando el camino completo. Si no hay ciclo, muestra la cadena de llamadas aguas abajo.

Configuración
Sección titulada «Configuración»Parámetros
Sección titulada «Parámetros»| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| workflow_id | workflow_selector | Si | Selecciona el workflow que se ejecutará como sub-proceso. |
| execution_mode | select | Si | Modo de ejecución: sync (esperar resultado), async (fire & forget), parallel (múltiples instancias). Por defecto: sync. |
| pass_state | boolean | No | Pasa el workflowState actual al sub-workflow. Por defecto: true. |
| input_data | code_editor | No | Datos JSON o variables a enviar como input al sub-workflow. Soporta variables dinámicas. |
| timeout_ms | number | No | Tiempo máximo de espera en modo sincronico (0 = sin limite). Por defecto: 30000. |
Modo sync
Sección titulada «Modo sync»{ "nextModule": "siguiente_modulo", "data": { "resultado_del_subworkflow": "valor" }}Modo async
Sección titulada «Modo async»{ "nextModule": "siguiente_modulo", "data": { "child_instance_id": "sub_workflow123_abc123", "workflow_id": 456, "workflow_name": "Proceso de envio", "status": "launched", "message": "Sub-workflow lanzado en modo asincronico" }}Modo parallel
Sección titulada «Modo parallel»{ "nextModule": "siguiente_modulo", "data": { "mode": "parallel", "total": 3, "success_count": 2, "error_count": 1, "results": [ { "index": 0, "success": true, "instance_id": "sub_wf_abc_0", "data": {} }, { "index": 1, "success": true, "instance_id": "sub_wf_abc_1", "data": {} } ], "errors": [ { "index": 2, "success": false, "instance_id": "sub_wf_abc_2", "error": "mensaje" } ] }}Ejemplo de Uso
Sección titulada «Ejemplo de Uso»Caso básico
Sección titulada «Caso básico»{ "label": "Sub Workflow", "workflow_id": "123", "execution_mode": "sync", "pass_state": true, "input_data": "", "timeout_ms": 30000}- En modo
sync, el flujo padre espera a que el sub-workflow termine antes de continuar. - En modo
async, el flujo padre continua inmediatamente. El sub-workflow se ejecuta en background consetImmediate. - En modo
parallel, si el input es un array, se lanza una instancia del sub-workflow por cada elemento. La concurrencia se limita a 5 instancias simultaneas por defecto. - Si
pass_statees true, el workflowState del padre se hereda al sub-workflow. - Si
input_dataesta vacío, se usa el data de entrada del nodo actual. - Cada instancia hija se registra en la tabla
workflowinstancescon referencia al padre. - El estado de cada instancia hija se actualiza automáticamente (completed/failed).
- Si el workflow especificado no existe o no pertenece al mismo cliente, se retorna un error.
- Soporta variables dinámicas en
input_data.
Nodos Relacionados
Sección titulada «Nodos Relacionados»- Buenas prácticas y demos de Sub Workflow - cuándo usarlo, cuándo no y patrones recomendados
- Iterator - alternativa para procesamiento paralelo de arrays
- Decision - para decidir que sub-workflow ejecutar
- End - nodo final del sub-workflow