Condividi tramite


Aggiungere cicli per ripetere le azioni nei flussi di lavoro per App per la logica di Azure

Si applica a: App per la logica di Azure (A consumo e Standard)

Per ripetere le azioni in un flusso di lavoro dell'app per la logica, è possibile aggiungere il ciclo Per ogni o Fino a al flusso di lavoro, in base alle esigenze dello scenario.

Note

Per informazioni sui cicli, vedere la documentazione di Power Automate. Vedere Usare i cicli.

In base al caso d'uso, è possibile scegliere tra i tipi di azioni del ciclo seguenti:

  • Per ripetere una o più azioni sugli elementi di una matrice o di una raccolta, aggiungere l'azione For each al flusso di lavoro.

    In alternativa, se si dispone di un trigger in grado di gestire matrici e si desidera eseguire un'istanza del flusso di lavoro per ogni elemento della matrice, è possibile dividere la matrice impostando la proprietà del trigger Split on.

  • Per ripetere una o più azioni fino a quando non viene soddisfatta una condizione o una modifica di stato specifica, 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

I passaggi seguenti usano il portale di Azure; tuttavia, con l'estensione App per la logica di Azure appropriata, è anche possibile usare gli strumenti seguenti per creare flussi di lavoro delle app per la logica:

Alcuni passaggi differiscono leggermente in base al fatto che si disponga di un flusso di lavoro A consumo o Standard.

For each

L'azione Per ogni funziona solo su matrici. Questo ciclo ripete una o più azioni su ogni elemento di una matrice. Esaminare le considerazioni seguenti per l'azione Per ogni:

  • 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. Se il caso d'uso richiede l'elaborazione sequenziale, è possibile configurare le interazioni Per ogni per eseguirne una alla volta. 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 azioni simultaneamente sugli elementi della matrice in un'azione annidata Per ogni, creare e chiamare un flusso di lavoro 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.

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

  2. Seguire la stessa procedura generale per aggiungere l'azione Per ogni 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. In Per ogni selezionare all'interno della casella Selezionare un output da passaggi precedenti, quindi selezionare l'icona a forma di fulmine.

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

      Screenshot che mostra il portale di Azure e la finestra di progettazione del flusso di lavoro con un'azione denominata Per ogni e l'elenco di contenuti dinamici aperto.

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

      Screenshot che mostra la finestra di progettazione del flusso di lavoro e l'azione denominata Per ogni con l'output 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 la finestra di progettazione del flusso di lavoro, l'azione denominata Per ogni e l'azione denominata Invia un messaggio di posta elettronica, ora all'interno del ciclo Per ogni.

  4. Al termine, salvare il flusso di lavoro.

  5. 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"
   }
},

For each: eseguire 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.

  1. Nella finestra di progettazione selezionare l'azione Per ogni per aprire il riquadro informazioni e quindi selezionare Impostazioni.

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

  3. Spostare il dispositivo di scorrimento Grado di parallelismo su 1.

    Screenshot che mostra l'azione Per ogni, la scheda Impostazioni e l'impostazione Controllo di concorrenza attivata con il dispositivo di scorrimento 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, 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"
   }
}

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 i limiti predefiniti e massimi sul numero di azioni o interazioneFino a 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.

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 su FailWhenLimitsReached, ad esempio:

    "Until": {
       "actions": {
         "Execute_stored_procedure": {
           <...>
           }
         },
         "expression": "@equals(variables('myUntilStop'), true)",
         "limit": {
           "count": 5,
           "timeout": "PT1H"
         },
         "operationOptions": "FailWhenLimitsReached",
         "runAfter": {
         "Initialize_variable_8": [
           "Succeeded"
         ]
       },
    "type": "Until"
    }
    

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

  1. Nel portale di Azure creare una risorsa dell'app per la logica con un flusso di lavoro vuoto. Fare riferimento alla procedura precedente.

  2. Nella finestra di progettazione seguire i passaggi generali per aggiungere il trigger predefinito Pianificazione denominato Ricorrenza al flusso di lavoro A consumo o Standard.

  3. Nel trigger Ricorrenza, specificare l'intervallo, la frequenza e l'ora per l'attivazione del trigger.

    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.

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

    Screenshot che mostra il portale di Azure e la finestra di progettazione del flusso di lavoro con i parametri trigger Ricorrenza configurati.

  4. Nel trigger, seguire questa procedura generale per aggiungere l'azione predefinita Variabili denominata Inizializza variabili al flusso di lavoro dell'app per la logica A consumo o Standard.

  5. Nell'azione Inizializza variabili specificare i valori seguenti:

    Parametro valore Descrizione
    Nome Limite Nome della variabile
    Tipo Integer Nome del tipo di dati della variabile
    Valore 0 Valore iniziale della variabile

    Screenshot che mostra il portale di Azure, la finestra di progettazione del flusso di lavoro e l'azione predefinita denominata Inizializza variabile con parametri.

  6. Nell'azione Inizializza variabili, seguire questa procedura generale per aggiungere l'azione predefinita Controlla denominata Fino a al flusso di lavoro dell'app per la logica A consumo o Standard.

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

    1. Selezionare all'interno della casella Loop fino a e selezionare l'icona a forma di fulmine per aprire l'elenco di contenuti dinamici.

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

    3. In Conteggio immettere 10 come valore di confronto.

    Screenshot che mostra un flusso di lavoro e un'azione predefinita denominata Fino a con i valori descritti.

  8. All'interno dell'azione Fino a selezionare +>Aggiungere un'azione.

  9. Seguire questi passaggi generali per aggiungere l'azione predefinita Variabili denominata Incrementa variabile all'azione Fino a nel flusso di lavoro dell'app per la logica A consumo o Standard.

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

    Screenshot che mostra un flusso di lavoro e l'azione predefinita denominata Fino a con limite impostato sulla variabile Limite e Valore impostato su 1.

  11. All'esterno e nell'azione Fino a seguire questa procedura generale per aggiungere un'azione che invia messaggi di posta elettronica nel flusso di lavoro dell'app per la logica A consumo o Standard.

    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:

    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.

    Al termine, l'azione di posta elettronica deve essere simile all'esempio seguente:

    Screenshot che mostra il flusso di lavoro 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:

  • 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:

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

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.

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"
            },
            "runAfter": {},
            "type": "ApiConnection"
         }
      },
      "expression": "@equals(body('Create_new_resource'), 'Completed')",
      "limit": {
         "count": 10,
         "timeout": "PT2H"
      },
      "runAfter": {}
   }
}