Controllo loop
- Tipo de tarea:
loop-control
La tarea Controllo loop es un componente de flujo especializado que permite crear ciclos complejos, similares a un constructo while en programación. A diferencia de la tarea Repeat que repite solo la acción inmediatamente precedente, el Controllo loop actúa como un punto de "salto" (goto), permitiendo crear ciclos que incluyen una secuencia de más tareas.
Configuración
La configuración define los límites y la temporización del ciclo.
- Límite de iteraciones: El número máximo de veces que el ciclo puede ser ejecutado. Puede ser insertado manualmente o mediante un parámetro dinámico (ej.
#>parametro_num<#). - Intervalo entre iteraciones (s): El intervalo de espera, en segundos, entre el final de una iteración y el inicio de la siguiente.
Arquitectura del Ciclo
Para un correcto funcionamiento, el ciclo requiere una especifica arquitectura a tres componentes:
- Cuerpo del Loop: Una o más acciones (tareas) que deben ser ejecutadas repetitivamente (ej. Enviar un correo electrónico, actualizar una variable).
- Tarea precedente al CONTROLLO LOOP: La última tarea dentro del cuerpo del loop, tendrá:
- Una condición especial de tipo "LOOP": mientras esta expresión sea verdadera, el flujo se dirige al Task Controllo loop para continuar el ciclo. Cuando la condición "LOOP" se vuelve falsa, el flujo sigue uno de estos perfiles alternativos o termina el Workflow, saliendo definitivamente del ciclo.
- Tarea "Controllo loop": El motor del ciclo. Cuando recibe el flujo, incrementa su contador y lo reindiriza al primer tarea del cuerpo del loop.
Funcionamiento Detallado
A cada paso, el flujo es el siguiente:
- Se ejecutan las acciones en el cuerpo del loop.
- El "Tarea precedente al Controllo Loop" evalúa sus condiciones.
- Si la condición "LOOP" es verdadera, el flujo va al "Controllo loop", que lo remanda al inicio.
- Si la condición "LOOP" es falsa, el flujo sale del ciclo a través de otro perfil.
Ejemplo 1
Este es el escenario estándar. El ciclo termina porque una condición lógica se satisface.
Flujo de Ejecución (basado en el último screenshot):
- Declarar variables establece una variable
x a "0". - El Workflow ejecuta E-Mail Out v.2, luego Establecer variables incrementa el valor de la variable
x de 1. - Decisión: El Task Establecer variables evalúa sus salidas:
- La condición "LOOP"
x == "hello"es falsa.
- Salida del Ciclo: El flujo sigue el perfil
x != "hello"y continúa hacia el Tarea E-Mail End. El ciclo se interrumpe correctamente, y el "Controllo loop" nunca se alcanza.
Ejemplo 2: Loop Continuo hasta el Límite (Lógica "While True")
Este escenario está pensado para ejecutar una acción un número predefinido de veces. Aquí, la condición de salida lógica no existe o es siempre verdadera.
Flujo de Ejecución:
- Declarar variables establece una variable x a "0".
- El flujo ejecuta la secuencia E-Mail Out v.2 -> Establecer variables incrementa el valor de la variable x de 1.
- El Task Establecer variables tiene una condición "LOOP" que, en este escenario, es siempre verdadera.
- El flujo pasa al "Controllo loop".
- El "Controllo loop" reindiriza el flujo al inicio, a E-Mail Out v.2.
- Este proceso se repite. El ciclo está diseñado y controlado.
- El "Controllo loop" se detendrá solo cuando su contador interno alcance el Límite de iteraciones (establecido a 10). A ese punto, la tarea va en FAILED con el mensaje "Maximum Number of Iterations Reached (10)".
Parámetros de Salida
- loopCount: Un contador que devuelve el número de iteración actual. Este valor parte de 0 y es fundamental para crear condiciones de salida basadas en el número de ciclos ejecutados (ej.
#>Controllo loop.loopCount<# < 5). - result: Contiene un mensaje de texto descriptivo solo en el caso en que el ciclo se interrumpa forzadamente por el límite máximo (ej. "Maximum Number of Iterations Reached (10)").
- resultJson: Representa el resultado de la ejecución de la tarea en formato JSON, incluyendo información general, configuraciones y detalles sobre la ejecución.
Notas Importantes
- Las iteraciones parten de 0. De conseguenza, un Límite de iteraciones de 2 ejecutará 3 iteraciones (0, 1 y 2).
- La Tarea va a FAILED después de haber agotado las iteraciones.
Ejemplo de ResultJson
{
"run_info": {
"status": "Completed",
"run_result": "Success"
},
"output_parameters": {
"exitStatus": "0"
}
}