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 (consumo + standard)
App per la logica di Azure include le azioni del ciclo 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 si dispone di un trigger che riceve una matrice e si vuole eseguire un'iterazione per ogni elemento della matrice, è possibile annullare il debatch della matrice con la proprietà trigger SplitOn.
Per ripetere una o più azioni fino a quando non viene soddisfatta una condizione o una modifica dello stato, aggiungere l'azione Until al flusso di lavoro.
Il flusso di lavoro esegue prima tutte le azioni all'interno del ciclo e 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 predefiniti e massimi per il numero di cicli Until che un flusso di lavoro può avere, vedere Limiti di concorrenza, ciclo e debatching.
Prerequisiti
Account e sottoscrizione di Azure. Se non si ha una sottoscrizione, è possibile iscriversi per creare un account Azure gratuito.
Conoscenza di base dei flussi di lavoro delle app per la logica
Per ogni
L'azione For each funziona solo su matrici e ripete una o più azioni su ogni elemento di una matrice. L'elenco seguente contiene alcune considerazioni relative all'uso di un'azione For each :
L'azione For each può elaborare un numero limitato di elementi di matrice. Per questo limite, vedere Concorrenza, ciclo e limiti di debatching.
Per impostazione predefinita, i cicli o le iterazioni in un'azione Per ogni azione 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 sequenziale Per ogni iterazione. Ad esempio, se si vuole sospendere l'iterazione successiva in un'azione For each usando l'azione Ritardo, è necessario configurare ogni iterazione per l'esecuzione sequenziale.
Come eccezione al comportamento predefinito, le iterazioni di ogni azione vengono sempre eseguite in sequenza, non in parallelo. Per eseguire operazioni in parallelo per gli elementi in un ciclo annidato, creare e chiamare un flusso di lavoro dell'app per la logica figlio.
Per ottenere risultati prevedibili dalle operazioni sulle variabili durante ogni iterazione, eseguire le iterazioni in sequenza. Ad esempio, quando termina un'iterazione contemporaneamente in esecuzione, la variabile Increment, la variabile Decrement e Le operazioni Append to variable 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
item()
funzione per fare riferimento ed elaborare ogni elemento nella matrice. Se si specificano dati non inclusi 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 oggetto For each action che invia un messaggio di posta elettronica per ogni nuovo elemento.
In base al fatto che si disponga di un flusso di lavoro a consumo o Standard, seguire i passaggi corrispondenti:
Nella portale di Azure creare un flusso di lavoro dell'app per la logica a consumo di esempio con i passaggi seguenti nell'ordine specificato:
Trigger RSS denominato Quando viene pubblicato un elemento del feed
Per altre informazioni, seguire questa procedura generale per aggiungere un trigger.
Azione Outlook.com o Office 365 Outlook denominata Invia un messaggio di posta elettronica
Per altre informazioni, seguire questa procedura generale per aggiungere un'azione.
Seguire gli stessi passaggi generali per aggiungere l'azione For each tra il trigger RSS e l'azione Invia un messaggio di posta elettronica nel flusso di lavoro.
Compilare ora il ciclo:
Selezionare all'interno della casella Selezionare un output dei passaggi precedenti in modo che venga aperto l'elenco di contenuto dinamico.
Nell'elenco Aggiungi contenuto dinamico, nella sezione When a feed item is published (Quando viene pubblicato un elemento feed) selezionare Feed links (Collegamenti feed), ovvero un output di matrice dal trigger RSS.
Nota
Se l'output dei collegamenti feed non viene visualizzato, accanto all'etichetta della sezione trigger selezionare Vedi altro. Dall'elenco di contenuto dinamico è possibile selezionare solo gli 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à ora simile all'esempio seguente:
Al termine, salvare il flusso di lavoro.
Per testare manualmente il flusso di lavoro, sulla barra degli strumenti della finestra di progettazione selezionare Esegui esecuzione trigger>.
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 ognuno: Eseguire in sequenza
Per impostazione predefinita, le iterazioni in un ciclo For each vengono eseguite contemporaneamente in parallelo. Tuttavia, quando sono presenti cicli o variabili annidati all'interno dei cicli in cui si prevedono risultati prevedibili, è necessario eseguire questi cicli uno alla volta o in sequenza.
Nell'angolo in alto a destra di ogni azione selezionare puntini di sospensione (...) >Impostazioni.
In Controllo concorrenza modificare l'impostazione da Disattivato a Sì.
Spostare il dispositivo di scorrimento Degree of Parallelism su 1 e selezionare Fine.
Per ogni definizione di azione (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 operationOptions
parametro , ad esempio:
"actions": {
"For_each": {
"actions": {
"Send_an_email_(V2)": { }
},
"foreach": "@triggerBody()?['links']",
"runAfter": {},
"type": "Foreach",
"operationOptions": "Sequential"
}
}
Fino a
L'azione Until viene eseguita 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 predefiniti e massimi per il numero di azioni o iterazioni fino a quando un flusso di lavoro può avere, vedere Limiti di concorrenza, ciclo 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 ogni giorno, l'azione Until incrementa una variabile fino a quando il valore della variabile è uguale a 10. Il flusso di lavoro invia quindi un messaggio di posta elettronica che conferma il valore corrente.
Nota
In questo esempio viene usato Office 365 Outlook, ma è possibile usare qualsiasi provider di posta elettronica supportato App per la logica di Azure. Se si usa un altro account di posta elettronica, la procedura generale resta invariata, ma l'interfaccia utente potrebbe essere leggermente diversa.
Nella 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 At these hours , 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 è 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 Controllo 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 un valore, che apre automaticamente l'elenco di contenuto dinamico.
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 Scegliere un valore immettere 10 come valore di confronto.
All'interno dell'azione Until selezionare Aggiungi un'azione.
Nella casella di ricerca Scegliere un'operazione seguire questa procedura generale per aggiungere l'azione predefinita Variabili denominata Increment variabile all'azione Until.
Nell'azione Increment variabile specificare i valori seguenti per incrementare il valore della variabile Limit di 1:
Proprietà valore Nome Selezionare la variabile Limite . valore 1 All'esterno e in Azione Until seguire questa procedura generale per aggiungere un'azione che invia un messaggio di posta elettronica.
Questo esempio continua con l'azione di Office 365 Outlook denominata Invia un messaggio di posta elettronica.
Nell'azione di posta elettronica specificare i valori seguenti:
Proprietà valore Descrizione Per <address@domain di posta elettronica> 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 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 in modo che venga visualizzato l'elenco di contenuto dinamico.
2. Nell'elenco di contenuto dinamico, accanto all'intestazione della sezione Variabili , selezionare Visualizza altro.
3. Selezionare Limite.Testo <contenuto del messaggio di posta elettronica> Contenuto del messaggio di posta elettronica da inviare. Per questo esempio, immettere il testo desiderato. Al termine, l'azione di posta elettronica sarà 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 in base alla presenza di un'app per la logica a consumo o standard.
Sulla barra degli strumenti della finestra di progettazione selezionare Esegui esecuzione trigger>.
Dopo l'avvio dell'esecuzione del flusso di lavoro, si riceve 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 | Numero massimo di iterazioni eseguite prima dell'uscita del ciclo. Per i limiti predefiniti e massimi per il numero di azioni Fino a quando un flusso di lavoro può avere, vedere Limiti di concorrenza, ciclo e debatching. |
Timeout | Tempo massimo di esecuzione dell'azione Until , incluse tutte le iterazioni, prima dell'uscita del ciclo. Questo valore viene specificato nel formato ISO 8601 e viene valutato per ogni iterazione. Se un'azione nel ciclo richiede più tempo del limite di timeout, l'iterazione corrente non si arresta. Tuttavia, l'iterazione successiva non viene avviata perché viene soddisfatta la condizione del limite di timeout. Per i limiti predefiniti e massimi per il valore di timeout , vedere Concorrenza, ciclo e limiti di 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"
]
}
}
}
In questo esempio il ciclo Until chiama un endpoint HTTP, che crea una risorsa. Il ciclo si arresta quando il corpo della risposta HTTP restituisce lo stato Completed
. Per evitare cicli infiniti, il ciclo si interrompe 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": {}
}
}