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

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:

  1. 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:

  2. 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.

  3. A questo punto creare il ciclo:

    1. Selezionare all'interno della casella Seleziona un output dai passaggi precedenti per aprire l'elenco di contenuti dinamici.

    2. 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.

      Screenshot che mostra il portale di Azure, Progettazione flussi di lavoro a consumo, l'azione denominata For each e l'elenco di contenuti dinamici aperto.

      Al termine, l'output della matrice selezionato viene visualizzato come nell'esempio seguente:

      Screenshot che mostra il flusso di lavoro a consumo, l'azione denominata For each e l'output della matrice selezionato.

    3. 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:

      Screenshot che mostra il flusso di lavoro a consumo, l'azione denominata For each e l'azione denominata Invia un messaggio di posta elettronica, ora all'interno del ciclo For each.

  4. Al termine, salvare il flusso di lavoro.

  5. 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.

  1. Nell'angolo superiore destro dell'azione For each, selezionare puntini di sospensione (...) >Impostazioni.

  2. In Controllo della concorrenza, modificare l'impostazione da Disattivato a Attivato.

  3. Spostare il dispositivo di scorrimento Grado di parallelismo su 1 e scegliere Fine.

    Screenshot che mostra il flusso di lavoro a consumo, l'azione denominata For each, l'impostazione Controllo della concorrenza attivata e il dispositivo di scorrimento del grado di parallelismo impostato 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, è 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.

  1. Nel portale di Azure creare una risorsa dell'app per la logica a consumo con un flusso di lavoro vuoto.

  2. Nella finestra di progettazione, seguire questa procedura generale per aggiungere il trigger predefinito Ricorrenza denominato Pianificazione al flusso di lavoro.

  3. 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.

    Screenshot che mostra il portale di Azure, la finestra di progettazione del flusso di lavoro a consumo e i parametri trigger Ricorrenza con l'opzione selezionata per In queste ore.

    Al termine, il trigger Ricorrenza ha un aspetto simile all'esempio seguente:

    Screenshot che mostra il portale di Azure, il flusso di lavoro a consumo e i parametri trigger Ricorrenza configurati.

  4. Nel trigger seguire questa procedura generale per aggiungere l'azione predefinita Variabili denominata Inizializza variabile al flusso di lavoro.

  5. 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

    Screenshot che mostra il portale di Azure, il flusso di lavoro a consumo e i parametri per l'azione predefinita denominati Inizializza variabile.

  6. Nell'azione Inizializza variabile, seguire questa procedura generale per aggiungere l'azione predefinita Controlla denominata Until al flusso di lavoro.

  7. Nell'azione Until, specificare i valori seguenti per configurare la condizione di arresto per il ciclo.

    1. Selezionare all'interno della casella più a sinistra denominata Scegli valore, che apre automaticamente l'elenco dei contenuti dinamici.

    2. Nell'elenco, in Variabili, selezionare la variabile denominata Limit.

    3. Nell'elenco degli operatori intermedi, selezionare l'operatoreè uguale a.

    4. Nella casella più a destra denominata Scegli un valore, immettere 10 come valore di confronto.

    Screenshot che mostra il flusso di lavoro a consumo e l'azione predefinita denominata Until con condizione di arresto completata.

  8. Nell'azione Until, selezionare Aggiungi un'azione.

  9. Nella casella di ricerca Scegli un'operazione, seguire questa procedura generale per aggiungere l'azione predefinita Variabili denominata Incrementa variabile all'azione Until.

  10. 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

    Screenshot che mostra il flusso di lavoro a consumo e l'azione predefinita denominata Until con Nome impostato sulla variabile Limit e Valore impostato su 1.

  11. 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.

  12. 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:

    Screenshot che mostra il flusso di lavoro a consumo e l'azione denominata Invia un messaggio di posta elettronica con i valori delle proprietà.

  13. 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:

Screenshot che mostra un esempio di messaggio di posta elettronica ricevuto dal flusso di lavoro di esempio.

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": {}
   }
}

Passaggi successivi