Skip to main content

Controllo loop

  • Task type: loop-control

Il Task Controllo loop è un componente di flusso specializzato che permette di creare cicli complessi, simili a un costrutto while in programmazione. A differenza del Task Repeat che ripete solo l'azione immediatamente precedente, il Controllo loop agisce come un punto di "salto" (goto), permettendo di creare cicli che includono una sequenza di più Task.

Configurazione

La configurazione definisce i limiti e la temporizzazione del ciclo.

  • Limite iterazioni: Il numero massimo di volte che il ciclo può essere eseguito. Può essere inserito manualmente o tramite un parametro dinamico (es. #>parametro_num<#).
  • Intervallo tra iterazioni (s): L'intervallo di attesa, in secondi, tra la fine di un'iterazione e l'inizio della successiva.

Architettura del Ciclo

Per un corretto funzionamento, il ciclo richiede una specifica architettura a tre componenti:

  1. Corpo del Loop: Una o più azioni (Task) che devono essere eseguite ripetutamente (es. Inviare una mail, aggiornare una variabile).
  2. Task precedente al CONTROLLO LOOP: L'ultimo Task all'interno del corpo del loop, avrà:
    • Una condizione speciale di tipo "LOOP": finché questa espressione è vera, il flusso viene indirizzato al Task Controllo loop per continuare il ciclo. Quando la condizione "LOOP" diventa falsa, il flusso segue uno di questi percorsi alternativi o termina il Workflow, uscendo definitivamente dal ciclo.
  3. Task "Controllo loop": Il motore del ciclo. Quando riceve il flusso, incrementa il suo contatore e lo reindirizza al primo Task del corpo del loop.

Funzionamento Dettagliato

Ad ogni passaggio, il flusso è il seguente:

  1. Vengono eseguite le azioni nel corpo del loop.
  2. Il "Task precedente al Controllo Loop" valuta le sue condizioni.
  3. Se la condizione "LOOP" è vera, il flusso va al "Controllo loop", che lo rimanda all'inizio.
  4. Se la condizione "LOOP" è falsa, il flusso esce dal ciclo attraverso un altro percorso.

Esempio 1

Questo è lo scenario standard. Il ciclo termina perché una condizione logica viene soddisfatta.

Flusso di Esecuzione (basato sull'ultimo screenshot):

  1. Declare variables imposta una variabile x a "0".
  2. Il Workflow esegue E-Mail Out v.2, poi Set variables incrementa il valore della variabile x di 1.
  3. Decisione: Il Task Set variables valuta le sue uscite:
  • La condizione "LOOP" x == "hello" è falsa.
  1. Uscita dal Ciclo: Il flusso segue il percorso x != "hello" e prosegue verso il Task E-Mail End. Il ciclo viene interrotto correttamente, e il "Controllo loop" non viene mai raggiunto.

Esempio 2: Loop Continuo fino al Limite (Logica "While True")

Questo scenario è pensato per eseguire un'azione un numero predefinito di volte. Qui, la condizione di uscita logica non esiste o è sempre vera.

Flusso di Esecuzione:

  1. Declare variables imposta una variabile x a "0".
  2. Il flusso esegue la sequenza E-Mail Out v.2 -> Set variables incrementa il valore della variabile x di 1.
  3. Il Task Set variables ha una condizione "LOOP" che, in questo scenario, è sia sempre vera.
  4. Il flusso passa al "Controllo loop".
  5. Il "Controllo loop" reindirizza il flusso all'inizio, a E-Mail Out v.2.
  6. Questo processo si ripete. Il ciclo è voluto e controllato.
  7. Il "Controllo loop" si fermerà solo quando il suo contatore interno raggiungerà il Limite iterazioni (impostato a 10). A quel punto, il Task va in FAILED con il messaggio "Maximum Number of Iterations Reached (10)".

Parametri di Output

  • loopCount: Un contatore che restituisce il numero dell'iterazione corrente. Questo valore parte da 0 ed è fondamentale per creare condizioni di uscita basate sul numero di cicli eseguiti (es. #>Controllo loop.loopCount<# < 5).
  • result: Contiene un messaggio testuale descrittivo solo nel caso in cui il ciclo venga interrotto forzatamente dal limite massimo (es. "Maximum Number of Iterations Reached (10)").
  • resultJson: Rappresenta il risultato dell’esecuzione del task in formato JSON, includendo informazioni generali, configurazioni e dettagli sull’esecuzione.

Note Importanti

  • Le iterazioni partono da 0. Di conseguenza, un Limite iterazioni di 2 eseguirà 3 iterazioni (0, 1 e 2).
  • Il Task va in FAILED dopo aver esaurito le iterazioni.

Esempio di ResultJson

{
"id":19115,
"name":"Loop",
"description":"",
"type":"loop-control",
"type_name":"Controllo loop",
"type_description":"Marca l'inizio e controlla il numero di iterazioni massimo di un loop",
"config":{
"delay":"3",
"limit":"#>Dichiara Variabili.max_iteration<#",
"output_links":[
{
"to":"[TASK 2019_19121_74]",
"from":"[TASK 2019_19115_45]",
"text":"Itera",
"color":"dodgerblue",
"points":[
"..."
],
"toPort":"top1",
"fromPort":"port_2019_19115_1",
"isTraversed":false
},
{
"to":"[TASK 2019_19135_3]",
"from":"[TASK 2019_19115_45]",
"text":"Esci",
"color":"dodgerblue",
"points":[
"..."
],
"toPort":"left3",
"fromPort":"port_2019_19115_2",
"isTraversed":true
}
]
},
"run_info":{
"run_id":1470572,
"start_datetime":"2026-03-26 09:58:25",
"end_datetime":"2026-03-26 09:58:28",
"start_epoch":1774519105.09352,
"end_epoch":1774519108.30975,
"duration":3,
"status":"Completed",
"cmd_text":"",
"run_result":"Success",
"result_text":"Iterazione 3 (3 max)",
"full_result_text":"Iterazione 3 (3 max)"
},
"output_parameters":{
"loopCount":"2",
"exitStatus":"0"
}
}