Skip to main content

Iterator

Iterator | Sybot Documentation

ITERATOR

Il Task Iterator è un potente strumento di automazione progettato per eseguire un processo ripetitivo su un insieme di dati. Prende in input un dataset e lancia un Workflow "figlio" per ogni singola riga di quel Dataset.

Questo permette di processare in massa grandi quantità di informazioni, passando i valori di ogni riga come parametri al Workflow figlio. È l'equivalente di un ciclo "for-each" per i processi di automazione.

Prerequisiti

Per funzionare correttamente, il Task Iterator deve avere uno dei seguenti Task in input:

Configurazione

La configurazione del Task definisce quale Workflow eseguire e come passare i dati a ogni iterazione.

  • Filter Worflow: Permette di filtrare l’elenco dei Workflow disponibili, facilitando l’individuazione di quelli da avviare..
  • Workflow to iterate: Seleziona dal menu il nome del Workflow "figlio" che deve essere eseguito per ogni riga del dataset.
  • Stop at first failed iteration: Se questa casella è spuntata, l'Iterator si fermerà immediatamente non appena una delle esecuzioni del Workflow figlio dovesse fallire. Se non è spuntata, l'Iterator tenterà di completare tutte le iterazioni, anche se alcune di esse falliscono.

Configurazione dei Parametri

Questa sezione permette di mappare i dati dal dataset di input ai parametri del Workflow figlio.

  • Parameter: Il nome del parametro così come è stato definito nel Workflow figlio (es. “department”).
  • Value: Il valore da assegnare al parametro per l'iterazione corrente.
  • Esempio: #>JSON to Table.Dataset.department<# indica che, per ogni riga, il valore della colonna name del dataset prodotto dal Task JSON to Table verrà passato come valore.
  • Type: Il tipo di dato del parametro (es. String, Numeric, etc.).

Esempio pratico di funzionamento

Configurazione dell'Iterator

  1. Workflow Padre (Preparazione Dati):
  • Il Task Import text legge un file JSON che contiene una lista di dipendenti.
[
{
"name": "John",
"surname": "Smith",
"department": "Human Resources"
},
{
"name": "Emily",
"surname": "Johnson",
"department": "Finance"
},
{
"name": "Michael",
"surname": "Brown",
"department": "IT"
},
{
"name": "Sarah",
"surname": "Davis",
"department": "Marketing"
}
]
  • Successivamente, il Task JSON to Table esegue la sua funzione principale: si connette a un database e scrive i dati del JSON in una tabella. Il log di esecuzione lo conferma con il messaggio "4 rows inserted into table". Oltre alla scrittura su database, il Task rende disponibili specifici parametri di output che rappresentano i dati elaborati ed inseriti nella tabella, consentendone il riutilizzo nei Task successivi del Workflow.
  1. Configurazione e Azione dell'Iterator:
  • Workflow da iterare: è impostato su “dev_iterator”.
  • Parametro: Il Workflow figlio si aspetta un parametro chiamato “department”.
  • Valore: A questo parametro viene mappato il valore della colonna "department" del dataset: #>JSON to Table.Dataset.department<#.
  1. Esecuzione delle Iterazioni: L'Iterator ora esegue il Workflow “dev_iterator” 4 volte, una per ogni riga (dipendente) del dataset:
  • Prima iterazione: Lancia “dev_iterator” passando il parametro department = "Human Resources".
  • Seconda iterazione: Lancia “dev_iterator” passando department = "Finance".
  • Terza iterazione: Lancia “dev_iterator” passando department = "IT".
  • Quarta iterazione: Lancia “dev_iterator” passando department = "Marketing".
  1. Logica del Workflow Figlio (dev_iterator):
  • Ad ogni esecuzione, il Task Conditional al suo interno valuta il valore del parametro "department" ricevuto e instrada il flusso verso il Task di invio email corretto. Per "IT", non trovando una condizione specifica, seguirà il percorso "Otherwise".
  1. Risultato Finale:
  • Vengono inviate quattro email distinte, una per ogni dipendente presente nel file JSON originale. Il log di esecuzione del Task Iterator conferma il successo con il messaggio: "All iterations completed successfully".

Workflow Padre

Workflow Figlio

Nota Importante

  • Possono essere eseguiti solo i Workflow che non risultano bloccati in modifica al momento dell'esecuzione.
  • Il Task Iterator terminerà con lo stato "Success" solo se tutte le iterazioni andranno a buon fine (a meno che non sia attiva l'opzione "Stop at first failed iteration", nel qual caso si fermerebbe al primo errore).

Parametri di Output

Al termine di tutte le sue iterazioni, il Task Iterator espone una serie di parametri di output. Questi parametri sono estremamente utili per i Task successivi, ad esempio per scopi di logging, per inviare un report riassuntivo o per implementare una logica condizionale basata sull'esito del ciclo.

  • targetWorkflow: Restituisce il nome o l'identificativo del Workflow "figlio" che è stato eseguito a ogni iterazione.
  • Dataset.Count: Indica il numero totale di righe presenti nel Dataset di input.
  • Iterations.Total: Il numero totale di iterazioni che sono state effettivamente eseguite. In un'esecuzione normale, questo valore coinciderà con Dataset.Count.
  • Iterations.Success: Il contatore delle iterazioni che si sono concluse con successo. Ogni volta che un'esecuzione del Workflow figlio termina correttamente, questo numero viene incrementato.
  • Iterations.Failed: Il contatore delle iterazioni fallite. Se un'esecuzione del Workflow figlio termina con un errore, questo numero viene incrementato.
  • result: Fornisce lo stato complessivo del Task Iterator stesso. Solitamente indica "Success" solo se tutte le iterazioni sono state completate con successo.
  • resultJson: Rappresenta il risultato dell’esecuzione del task in formato JSON, includendo informazioni generali, configurazioni e dettagli sull’esecuzione.