Creare cicli per ripetere le azioni nei flussi di lavoro con App per la logica di Azure
Si applica a: App per la logica di Azure (a consumo e standard)
App per la logica di Azure include le azioni cicliche seguenti che è possibile usare nel flusso di lavoro:
Per ripetere una o più azioni sugli elementi di una matrice, aggiungere l'azione For each al flusso di lavoro.
In alternativa, se è presente un trigger che riceve una matrice e si vuole eseguire una iterazione per ogni elemento della matrice, è possibile eseguire il debatch di tale matrice con la proprietà SplitOn del trigger.
Per ripetere una o più azioni fino a quando non viene soddisfatta una condizione o modificato lo stato, aggiungere l''azione Until al flusso di lavoro.
Il flusso di lavoro esegue prima tutte le azioni all'interno del ciclo, quindi controlla la condizione o lo stato. Se la condizione viene soddisfatta, il ciclo si arresta. In caso contrario, il ciclo viene ripetuto. Per i limiti massimi e predefiniti del numero di cicli Until di cui può disporre un flusso di lavoro, vedere Limiti di concorrenza, cicli e debatching.
Prerequisiti
Account e sottoscrizione di Azure. Se non si ha una sottoscrizione, è possibile iscriversi per creare un account Azure gratuito.
Conoscenze di base dei flussi di lavoro dell'app per la logica
Per ogni
L'azione Per ogni funziona solo su matrici e ripete una o più azioni su ogni elemento in una matrice. L'elenco seguente contiene alcune considerazioni relative all'uso di una azione For each:
L'azione For each può elaborare un numero limitato di elementi della matrice. A tale proposito vedere Limiti di concorrenza, cicli e debatching.
Per impostazione predefinita, i cicli o le iterazioni in una azione For each vengono eseguiti contemporaneamente in parallelo.
Questo comportamento è diverso da Applica a ogni ciclo di Power Automate in cui le iterazioni vengono eseguite una alla volta o in sequenza. Tuttavia, è possibile configurare azioni For each sequenziali. Ad esempio, se si vuole sospendere l'iterazione successiva in una azione For each usando l'azione Delay, è necessario configurare ogni iterazione per l'esecuzione sequenziale.
Come eccezione al comportamento predefinito, le iterazioni annidate dell'azione For each vengono eseguite sempre in sequenza e non in parallelo. Per eseguire le operazioni in parallelo per gli elementi di un ciclo annidato, creare e chiamare un flusso di lavoro di un'app per la logica figlio.
Per ottenere risultati prevedibili dalle operazioni sulle variabili durante ogni iterazione, eseguire le iterazioni in modo sequenziale. Quando ad esempio un'iterazione in esecuzione simultanea termina, le operazioni Incrementa variabile, Decrementa variabile e Accoda alla variabile restituiscono risultati prevedibili. Tuttavia, durante ogni iterazione del ciclo in esecuzione simultanea, queste operazioni potrebbero restituire risultati imprevisti.
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.
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.
A seconda che si disponga di un flusso di lavoro a consumo o Standard, seguire i passaggi corrispondenti:
Nel portale di Azure, creare un flusso di lavoro di app per la logica a consumo di esempio con i passaggi seguenti nell'ordine indicato:
Il trigger RSS denominato Quando viene pubblicato un elemento del feed
Per altre informazioni, attenersi alla procedura generale seguente per aggiungere un trigger.
Azione di Outlook.com o Outlook di Office 365 denominata Invia un messaggio di posta elettronica
Per altre informazioni, attenersi alla procedura generale seguente per aggiungere un'azione.
Seguire la stessa procedura generale per aggiungere l'azione For each tra il trigger RSS e l'azione Invia un messaggio di posta elettronica nel flusso di lavoro.
A questo punto creare il ciclo:
Selezionare all'interno della casella Seleziona un output dai passaggi precedenti per aprire l'elenco di contenuti dinamici.
Dall'elenco Aggiungi contenuto dinamico, dalla sezione Quando viene pubblicato un elemento del feed, selezionare Collegamenti feed, che è un output dal trigger RSS.
Nota
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.
Al termine, l'output della matrice selezionato viene visualizzato come nell'esempio seguente:
Per eseguire un'azione esistente su ogni elemento della matrice, trascinare l'azione Invia un messaggio di posta elettronica nel ciclo For each.
Il flusso di lavoro sarà simile ora all'esempio seguente:
Al termine, salvare il flusso di lavoro.
Per testare manualmente il flusso di lavoro, selezionare Esegui trigger>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"
}
},
For each: eseguire in sequenza
Per impostazione predefinita, le iterazioni in un ciclo For each vengono eseguite contemporaneamente in parallelo. Tuttavia, quando sono presenti cicli annidati o variabili all'interno dei cicli dove si attendono risultati prevedibili, è necessario eseguire tali cicli uno alla volta o in sequenza.
Nell'angolo superiore destro dell'azione For each, selezionare puntini di sospensione (...) >Impostazioni.
In Controllo della concorrenza, modificare l'impostazione da Disattivato a Attivato.
Spostare il dispositivo di scorrimento Grado di parallelismo su 1 e scegliere Fine.
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, è possibile usare l'opzione Sequential
aggiungendo il parametro operationOptions
, ad esempio:
"actions": {
"For_each": {
"actions": {
"Send_an_email_(V2)": { }
},
"foreach": "@triggerBody()?['links']",
"runAfter": {},
"type": "Foreach",
"operationOptions": "Sequential"
}
}
Fino a
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 i limiti massimi e predefiniti delle azioni o iterazioni Until di cui può disporre un flusso di lavoro, vedere Limiti di concorrenza, cicli e debatching.
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.
Nel flusso di lavoro di esempio seguente, a partire dalle 8:00 di ogni giorno, l'azione Until incrementa una variabile finché il valore della variabile non è uguale a 10. Il flusso di lavoro invia quindi un messaggio di posta elettronica che conferma il valore corrente.
Nota
Questa procedura usa Outlook di Office 365, ma è possibile usare qualsiasi provider di posta elettronica supportato da App per la logica. Se si usa un altro account di posta elettronica, la procedura generale resta invariata, ma l'interfaccia utente potrebbe essere leggermente diversa.
Nel portale di Azure creare una risorsa dell'app per la logica a consumo con un flusso di lavoro vuoto.
Nella finestra di progettazione, seguire questa procedura generale per aggiungere il trigger predefinito Ricorrenza denominato Pianificazione al flusso di lavoro.
Nel trigger Ricorrenza, specificare l'intervallo, la frequenza e l'ora del giorno per l'attivazione del trigger.
Proprietà valore Intervallo 1 Frequenza Giornaliera A queste ore 8 Per aggiungere il parametro In queste ore, aprire l'elenco Aggiungi nuovo parametro e selezionare In queste ore, che viene visualizzato solo dopo aver impostato Frequenza su Giorno.
Al termine, il trigger Ricorrenza ha un aspetto simile all'esempio seguente:
Nell'azione Inizializza variabile specificare i valori seguenti:
Proprietà valore Descrizione Nome Limite Nome della variabile Type Integer Nome del tipo di dati della variabile valore 0 Valore iniziale della variabile Nell'azione Inizializza variabile, seguire questa procedura generale per aggiungere l'azione predefinita Controlla denominata Until al flusso di lavoro.
Nell'azione Until, specificare i valori seguenti per configurare la condizione di arresto per il ciclo.
Selezionare all'interno della casella più a sinistra denominata Scegli valore, che apre automaticamente l'elenco dei contenuti dinamici.
Nell'elenco, in Variabili, selezionare la variabile denominata Limit.
Nell'elenco degli operatori intermedi, selezionare l'operatoreè uguale a.
Nella casella più a destra denominata Scegli un valore, immettere 10 come valore di confronto.
Nell'azione Until, selezionare Aggiungi un'azione.
Nella casella di ricerca Scegli un'operazione, seguire questa procedura generale per aggiungere l'azione predefinita Variabili denominata Incrementa variabile all'azione Until.
Nell'azione Incrementa variabile, specificare i valori seguenti per incrementare il valore della variabile Limit di 1:
Proprietà valore Nome Selezionare la variabile Limit. valore 1 All'esterno e nell'azione Until, seguire questa procedura generale per aggiungere un'azione che invia messaggi di posta elettronica.
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:
Proprietà valore Descrizione Per <email-address@domain> Indirizzo e-mail del destinatario. Per il test è possibile usare l'indirizzo di posta elettronica personale. Argomento Il valore corrente per la variabile "Limit" è: Limit 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 Soggetto per visualizzare l'elenco di contenuti dinamici.
2. Nell'elenco dei contenuti dinamici, accanto all'intestazione della sezione Variabili, selezionare Vedi altro.
3. Selezionare Limit.Testo <contenuto del messaggio di posta elettronica> Il contenuto del messaggio di posta elettronica da inviare. Per questo esempio, immettere un testo desiderato. Al termine, l'azione di posta elettronica deve essere simile all'esempio seguente:
Salvare il flusso di lavoro.
Testare il flusso di lavoro
Per testare manualmente il flusso di lavoro dell'app per la logica, seguire la procedura a seconda che si abbia un'app per la logica a consumo o Standard.
Nella barra degli strumenti della finestra di progettazione, selezionare Esegui trigger>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 Until arresta l'esecuzione in base alle proprietà seguenti, che è possibile visualizzare selezionando Modifica limiti nell'azione. Assicurarsi di impostare questi valori delle proprietà di conseguenza:
Proprietà | Descrizione |
---|---|
Conteggio | 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. |
Definizione di "Until" (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
timeout
in 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",
"body": {
"resourceId": "@triggerBody()"
}
},
"runAfter": {},
"type": "ApiConnection"
}
},
"expression": "@equals(triggerBody(), 'Completed')",
"limit": {
"count": 10,
"timeout": "PT2H"
},
"runAfter": {}
}
}