Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: App per la logica di Azure (A consumo e Standard)
Per eseguire le stesse azioni su ogni elemento in un array o una collezione, o ripetere azioni finché qualcosa non si completa nel flusso di lavoro dell'app logica, aggiungi l'azione Control chiamata For each o Until al tuo flusso di lavoro rispettivamente:
| Action | Attività |
|---|---|
| Per ciascuno | Ripeti una o più azioni sugli elementi di un array o di una raccolta. Si applica solo agli array e alle collezioni. Consiglio: se hai un trigger che gestisce array e vuoi eseguire un'istanza del flusso di lavoro per ogni elemento dell'array, imposta la proprietà Split on del trigger per suddividere l'array. Per informazioni, vedere Limiti di concorrenza, looping e suddivisione in batch. |
| Until | Ripeti una o più azioni finché non viene soddisfatta una condizione o uno stato specifico cambia. Il tuo flusso di lavoro prima esegue tutte le azioni nel ciclo, poi controlla la condizione o lo stato. Se la condizione viene soddisfatta, il ciclo si arresta. In caso contrario, il ciclo viene ripetuto. Per informazioni, vedi Limiti di Concorrenza, Looping e Dibatting. |
Questa guida mostra come aggiungere un ciclo al tuo flusso di lavoro, eseguire iterazioni in sequenza e prevenire cicli infiniti. Vai subito al compito che desideri:
- Aggiungi un ciclo For Each al tuo flusso di lavoro
- Eseguire per ogni iterazione in sequenza
- Aggiungi un ciclo Until al tuo flusso di lavoro
- Evitare loop infiniti
Note
Per la documentazione di Power Automate, vedi Use loops.
Prerequisiti
Un account e una sottoscrizione di Azure. Ottenere un account Azure gratuito.
Il flusso di lavoro dell'app logica dove vuoi eseguire il ciclo, incluso un trigger che avvia il flusso di lavoro.
Prima di poter aggiungere un'azione di loop, il tuo flusso di lavoro deve iniziare con un trigger come primo passo.
Questa guida utilizza il portale Azure, ma puoi utilizzare Visual Studio Code e la corrispondente estensione App per la logica di Azure per costruire flussi di lavoro di Logic App:
- Crea flussi di lavoro di consumo in Visual Studio Code
- Crea flussi di lavoro standard in Visual Studio Code
Per ogni considerazione di loop
L'azione For each ripete una o più azioni per ogni elemento di una matrice o di una raccolta.
L'azione Per ogni funziona solo con array e raccolte.
Per ogni azione processa un numero limitato di elementi dell'array.
Per impostazione predefinita, per ogni azione le iterazioni vengono eseguite in parallelo. Comportamenti chiave da conoscere:
Behavior Che cosa significa Parallelo per impostazione predefinita A differenza del ciclo Apply to each di Power Automate, le iterazioni non vengono eseguite una alla volta.
Se il tuo scenario richiede un'elaborazione sequenziale, vedi Esegui per ogni iterazione in modo sequenziale. Ad esempio, per mettere in pausa l'iterazione successiva in un'azione Per ogni usando l'azione Ritardo, configura ogni iterazione in modo che venga eseguita in sequenza.Cicli annidati Un'azione For each annidata viene sempre eseguita in modo sequenziale. Per eseguire in parallelo, crea e richiama un flusso di lavoro figlio. Variables Increment variable, Decrement variable e Append to variable potrebbero restituire risultati imprevedibili in loop paralleli. Per assicurarti che le variabili in un ciclo producano risultati prevedibili dalle operazioni su tali variabili durante ogni iterazione, esegui il ciclo in sequenza. Le azioni in un ciclo For each usano la funzione
item()per fare riferimento ed elaborare ogni elemento nella matrice. Se si specificano dati non presenti in una matrice, il flusso di lavoro ha esito negativo.
Aggiungi un ciclo For Each al tuo flusso di lavoro
Il flusso di lavoro di esempio seguente invia un riepilogo giornaliero per un feed RSS del sito Web. Il flusso di lavoro usa un'azione For each che invia un messaggio di posta elettronica per ogni nuovo elemento.
Nel portale di Azure, creare un flusso di lavoro di app per la logica con i passaggi seguenti nell'ordine indicato:
Il trigger RSS denominato Quando viene pubblicato un elemento del feed
Seguire questi passaggi generali per aggiungere un trigger a un flusso di lavoro dell'app per la logica A consumo o Standard.
Azione di Outlook.com o Outlook di Office 365 denominata Invia un messaggio di posta elettronica
Seguire questi passaggi generali per aggiungere un'azione a un flusso di lavoro dell'app per la logica A consumo o Standard.
Nel designer, tra il trigger e l'azione Invia una email , aggiungi l'azione chiamata Per ciascuno seguendo i passaggi generali basati sul tipo di flusso di lavoro:
A questo punto creare il ciclo:
Nel campo Per ogni azione, seleziona all'interno della casella Seleziona un Output Dai Passaggi Precedenti per visualizzare le opzioni di input, poi seleziona l'icona del fulmine.
Nell'elenco dei contenuti dinamici che viene visualizzato, in Quando viene pubblicato un elemento del feed, selezionare Collegamenti feed, che è un output matrice dal trigger RSS.
Note
Se l'output Collegamenti feed non viene visualizzato accanto all'etichetta della sezione trigger, selezionare Vedere altro. Dall'elenco dei contenuti dinamici, è possibile selezionare solo output dei passaggi precedenti.
Il seguente esempio mostra l'output dell'array selezionato:
Per eseguire un'azione esistente su ogni elemento della matrice, trascinare l'azione Invia un messaggio di posta elettronica nel ciclo For each.
Il tuo flusso di lavoro è il seguente esempio:
Salvare il flusso di lavoro.
Per testare manualmente il flusso di lavoro, selezionare Esegui>Esegui nella barra degli strumenti della finestra di progettazione.
Per ogni definizione di azione (JSON)
Se si usa la visualizzazione Codice, è possibile definire l'azione For_each nella definizione JSON del flusso di lavoro, ad esempio:
"actions": {
"For_each": {
"actions": {
"Send_an_email_(V2)": {
"type": "ApiConnection",
"inputs": {
"body": {
"Body": "@{item()}",
"Subject": "New CNN post @{triggerBody()?['publishDate']}",
"To": "me@contoso.com"
},
"host": {
"connection": {
"name": "@parameters('$connections')['office365']['connectionId']"
}
},
"method": "post",
"path": "/v2/Mail"
},
"runAfter": {}
}
},
"foreach": "@triggerBody()?['links']",
"runAfter": {},
"type": "Foreach"
}
},
Per ciascuno: esegui le iterazioni del ciclo in sequenza
Per impostazione predefinita, le iterazioni in un'azione Per ogni vengono eseguite contemporaneamente in parallelo. Tuttavia, se sono presenti cicli annidati o variabili all'interno dei cicli dove si attendono risultati prevedibili, è necessario eseguire tali cicli uno alla volta in sequenza.
Nella finestra di progettazione selezionare l'azione Per ogni per aprire il riquadro informazioni e quindi selezionare Impostazioni.
In Controllo della concorrenza, modificare l'impostazione da Disattivato a Attivato.
Spostare il dispositivo di scorrimento Grado di parallelismo su 1.
Definizione dell'azione For each (JSON): eseguire in sequenza
Se si usa la visualizzazione codice con l'azione For_each nella definizione JSON del flusso di lavoro, aggiungere il parametro operationOptions e impostare il valore del parametro su Sequential:
"actions": {
"For_each": {
"actions": {
"Send_an_email_(V2)": { }
},
"foreach": "@triggerBody()?['links']",
"runAfter": {},
"type": "Foreach",
"operationOptions": "Sequential"
}
}
Considerazioni sul ciclo Until
L'azione Until esegue e ripete una o più azioni fino a quando non viene soddisfatta la condizione specificata richiesta. Se la condizione viene soddisfatta, il ciclo si arresta. In caso contrario, il ciclo viene ripetuto. Per maggiori informazioni, vedi Limiti di Concorrenza, Looping e Dibattito.
L'elenco seguente contiene alcuni scenari comuni in cui è possibile usare un'azione Until:
Chiamare un endpoint finché non si ottiene la risposta desiderata.
Creare un record in un database. Attendere finché un campo specifico di tale record non viene approvato. Continuare l'elaborazione.
Per impostazione predefinita, l'azione Fino a ha esito positivo o negativo nei modi seguenti:
Il ciclo Until ha esito positivo se tutte le azioni all'interno del ciclo hanno esito positivo e, se viene raggiunto il limite del ciclo, in base al comportamento eseguito dopo l'esecuzione.
Se tutte le azioni nell'ultima iterazione del ciclo Until hanno esito positivo, l'intero ciclo Until viene contrassegnato come Succeeded.
Se un'azione ha esito negativo nell'ultima iterazione del ciclo Until , l'intero ciclo Until viene contrassegnato come Non riuscito.
Se un'azione non riesce in un'iterazione diversa dall'ultima iterazione, l'iterazione successiva continua a essere eseguita e l'intera azione Fino a non viene contrassegnata come Non riuscita.
Per far sì invece che l'azione non riesca, modificare il comportamento predefinito nella definizione JSON del ciclo aggiungendo il parametro denominato
operationOptionse impostando il valore suFailWhenLimitsReached, ad esempio:"Until": { "actions": { "Execute_stored_procedure": { <...> } }, "expression": "@equals(variables('myUntilStop'), true)", "limit": { "count": 5, "timeout": "PT1H" }, "operationOptions": "FailWhenLimitsReached", "runAfter": { "Initialize_variable": [ "Succeeded" ] }, "type": "Until" }
Aggiungi un ciclo Until al tuo flusso di lavoro
Il seguente esempio di flusso di lavoro inizia ogni giorno alle 8:00. Il flusso di lavoro utilizza l'azione Until per incrementare una variabile fino a che il valore non raggiunge 10. Il flusso di lavoro invia quindi un messaggio di posta elettronica che conferma il valore corrente. L'esempio usa Office 365 Outlook, ma è possibile usare qualsiasi provider di posta elettronica supportato da App per la logica di Azure. Se si usa un altro account di posta elettronica, la procedura generale resta invariata, ma sembra leggermente diversa.
Nel portale di Azure creare una risorsa dell'app per la logica con un flusso di lavoro vuoto.
Nel designer, aggiungi il trigger integrato Schedulechiamato Recurrence seguendo i passaggi generali basati sul tipo di workflow:
Nel trigger Ricorrenza , fornisci le seguenti informazioni:
Parametro valore Interval 1 Frequenza Day A queste ore 8 A questi minuti 00 In queste ore e In questi minuti vengono visualizzati dopo aver impostato Frequenza su Giorno.
Il seguente esempio mostra come appare il trigger di Recidiva :
Nel designer, aggiungi l'azione integrata Variabilichiamata Inizializza variabile seguendo i passaggi generali basati sul tipo di workflow:
Nell'azione Inizializza variabile , fornisci le seguenti informazioni:
Parametro valore Descrizione Nome Limite Il nome della tua variabile. Tipo Integer Il tipo di dato della tua variabile. Valore 0 Il valore iniziale della tua variabile. Sotto l'azione Inizializza variabile , aggiungi l'azione integrata Controlchiamata Until seguendo i passaggi generali basati sul tipo di workflow:
Nell'azione Until, configura la condizione di arresto per il ciclo:
Seleziona all'interno del riquadro Loop Until, quindi seleziona l'icona del fulmine per aprire l'elenco del contenuto dinamico.
Nell'elenco, in Variabili, selezionare la variabile denominata Limit.
In Conteggio immettere 10 come valore di confronto.
All'interno dell'azione Fino a selezionare +>Aggiungere un'azione.
Aggiungi l'azione integrata Variabili chiamata variabile Increment all'azione Until seguendo i passaggi generali basati sul tipo di workflow:
Nell'azione Incrementa variabile, specificare i valori seguenti per incrementare il valore della variabile Limit di 1:
Parametro valore Limite Selezionare la variabile Limit. Valore 1 All'esterno e sotto l'azione Until, aggiungi un'azione che invii un messaggio di posta elettronica seguendo i passaggi generali in base al tipo di flusso di lavoro:
Questo esempio continua con l'azione Outlook di Office 365 denominata Invia un messaggio di posta elettronica.
Nell'azione di posta elettronica, specificare i valori seguenti:
Parametro valore Descrizione To < indirizzo e-mail@dominio> Indirizzo e-mail del destinatario. Per il test è possibile usare l'indirizzo di posta elettronica personale. Oggetto Il valore corrente della variabile "Limit" è:Limite L'oggetto del messaggio di posta elettronica. Per questo esempio, assicurarsi di includere la variabile Limit per verificare che il valore corrente soddisfi la condizione specificata:
1. Selezionare all'interno della casella Oggetto e quindi selezionare l'icona a forma di fulmine.
2. Nell'elenco di contenuti dinamici che viene visualizzato, accanto all'intestazione della sezione Variabili, selezionare Visualizza altro.
3. Selezionare Limite.Corpo < email-content> Il contenuto del messaggio di posta elettronica da inviare. Per questo esempio, immettere un testo desiderato. Il seguente esempio mostra come appare la tua azione email:
Salvare il flusso di lavoro.
Testare il flusso di lavoro
Per testare manualmente il flusso di lavoro dell'app per la logica:
- Sulla barra degli strumenti della finestra di progettazione, dall'opzione Esegui selezionare Esegui.
Dopo l'avvio dell'esecuzione del flusso di lavoro, viene visualizzato un messaggio di posta elettronica con il contenuto specificato:
Evitare i cicli infiniti
L'azione Fino a arresta l'esecuzione in base ai parametri facoltativi Conteggio e Timeout. Assicurarsi di impostare questi valori dei parametri di conseguenza:
| Parametro | Descrizione |
|---|---|
| Numero | Il numero massimo di iterazioni eseguite prima della chiusura del ciclo. Per i limiti massimi e predefiniti del numero delle azioni Until di cui può disporre un flusso di lavoro, vedere Limiti di concorrenza, cicli e debatching. |
| Timeout | Periodo massimo di tempo durante il quale l'azione Until, incluse tutte le iterazioni, viene eseguita prima dell'uscita del ciclo. Questo valore viene specificato in formato ISO 8601 e viene valutato per ogni iterazione. Se un'azione del ciclo richiede più tempo di quello previsto dal limite di timeout, l'iterazione corrente non viene arrestata. L'iterazione successiva non viene tuttavia avviata perché non viene soddisfatta la condizione limite del timeout. Per i limiti massimi e predefiniti del valore Timeout, vedere Limiti di concorrenza, cicli e debatching. |
Esamina la cronologia di esecuzione delle iterazioni del ciclo Until
Quando si visualizza la cronologia di esecuzione per un flusso di lavoro che include un ciclo Until , lo stato dettagliato e i risultati per le azioni all'interno del ciclo sono disponibili solo dopo il completamento dell'esecuzione dell'intero ciclo. Mentre il ciclo Until continua a eseguire le iterazioni, l'azione del ciclo mostra lo stato In esecuzione , ma non è possibile espandere o attraversare i singoli risultati dell'iterazione fino all'uscita del ciclo.
Il ciclo viene chiuso quando viene soddisfatta una delle condizioni seguenti:
- L'espressione specificata restituisce true.
- Il ciclo raggiunge il limite Count.
- Il ciclo raggiunge il limite di timeout .
Al termine del ciclo, è possibile selezionare l'azione Until nella cronologia di esecuzione per visualizzare ogni iterazione e lo stato delle azioni figlio all'interno di tale iterazione.
Note
Se il ciclo Until viene eseguito per un periodo prolungato, è necessario attendere il completamento completo del ciclo prima di poter esaminare la cronologia di esecuzione per i risultati delle singole iterazioni. Per monitorare cicli a esecuzione prolungata, è consigliabile aggiungere azioni di registrazione o notifica all'interno del ciclo che generano in modo indipendente lo stato, ad esempio inviando un messaggio a una coda o aggiornando una variabile che un ramo parallelo può leggere.
Fino alla definizione dell'azione (JSON)
Se si usa la visualizzazione Codice, è possibile definire un'azione Until nella definizione JSON del flusso di lavoro, ad esempio:
"actions": {
"Initialize_variable": {
// Definition for initialize variable action
},
"Send_an_email": {
// Definition for send email action
},
"Until": {
"type": "Until",
"actions": {
"Increment_variable": {
"type": "IncrementVariable",
"inputs": {
"name": "Limit",
"value": 1
},
"runAfter": {}
}
},
"expression": "@equals(variables('Limit'), 10)",
// To prevent endless loops, an "Until" loop
// includes these default limits that stop the loop.
"limit": {
"count": 60,
"timeout": "PT1H"
},
"runAfter": {
"Initialize_variable": [
"Succeeded"
]
}
}
}
Questo ciclo Until di esempio chiama un endpoint HTTP, che crea una risorsa. Il ciclo si arresta quando il corpo della risposta HTTP restituisce lo stato Completed. Per evitare i cicli infiniti, il ciclo viene arrestato anche se si verifica una delle condizioni seguenti:
Il ciclo è stato eseguito 10 volte, come specificato dall'attributo
count. Il valore predefinito è 60 volte.Il ciclo è stato eseguito per due ore, come specificato dall'attributo
timeoutin formato ISO 8601. Il valore predefinito è un'ora.
"actions": {
"myUntilLoopName": {
"type": "Until",
"actions": {
"Create_new_resource": {
"type": "Http",
"inputs": {
"body": {
"resourceId": "@triggerBody()"
},
"url": "https://domain.com/provisionResource/create-resource"
},
"runAfter": {},
"type": "ApiConnection"
}
},
"expression": "@equals(body('Create_new_resource'), 'Completed')",
"limit": {
"count": 10,
"timeout": "PT2H"
},
"runAfter": {}
}
}