Ir al contenido

SubWorkflow

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.

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.

Nodo Sub Workflow rectangular: icono a la izquierda y banda con tipo, modo, workflow hijo y enlace de abrir

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.

Listado de workflows con los sub-workflows anidados bajo cada padre

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.

Panel del nodo con el aviso rojo de recursión y la cadena del ciclo

ParámetroTipoRequeridoDescripción
workflow_idworkflow_selectorSiSelecciona el workflow que se ejecutará como sub-proceso.
execution_modeselectSiModo de ejecución: sync (esperar resultado), async (fire & forget), parallel (múltiples instancias). Por defecto: sync.
pass_statebooleanNoPasa el workflowState actual al sub-workflow. Por defecto: true.
input_datacode_editorNoDatos JSON o variables a enviar como input al sub-workflow. Soporta variables dinámicas.
timeout_msnumberNoTiempo máximo de espera en modo sincronico (0 = sin limite). Por defecto: 30000.
{
"nextModule": "siguiente_modulo",
"data": {
"resultado_del_subworkflow": "valor"
}
}
{
"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"
}
}
{
"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" }
]
}
}
{
"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 con setImmediate.
  • 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_state es true, el workflowState del padre se hereda al sub-workflow.
  • Si input_data esta vacío, se usa el data de entrada del nodo actual.
  • Cada instancia hija se registra en la tabla workflowinstances con 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.