Cicli, ambiti e debatching delle app per la logicaLogic Apps Loops, Scopes, and Debatching

Le app per la logica offrono una serie di metodi per usare matrici, raccolte, batch e cicli all'interno di un flusso di lavoro.Logic Apps provides a number of ways to work with arrays, collections, batches, and loops within a workflow.

Matrici e cicli ForEachForEach loop and arrays

App per la logica consente di eseguire un ciclo su un set di dati e di eseguire un'azione per ogni elemento.Logic Apps allows you to loop over a set of data and perform an action for each item. Ciclo su una raccolta è possibile tramite il foreach azione.Looping over a collection is possible via the foreach action. Nella finestra di progettazione, è possibile aggiungere un ciclo for each.In the designer, you can add a for each loop. Dopo aver selezionato la matrice su cui si vuole eseguire un'iterazione, è possibile iniziare ad aggiungere azioni.After selecting the array you wish to iterate over, you can begin adding actions. È possibile aggiungere più azioni per ciclo foreach.You may add multiple actions per foreach loop. Una volta all'interno del ciclo, è possibile iniziare a specificare cosa dovrebbe accadere in ogni valore della matrice.Once within the loop, you can begin to specify what should occur at each value of the array.

Questo esempio viene inviato un messaggio di posta elettronica per ogni indirizzo di posta elettronica che contiene 'microsoft.com'.This example sends an email for each email address that contains 'microsoft.com'. In visualizzazione codice, è possibile specificare un ciclo for each analogo al seguente:If using code-view, you can specify a for each loop like the following example:

{
    "email_filter": {
        "type": "query",
        "inputs": {
            "from": "@triggerBody()['emails']",
            "where": "@contains(item()['email'], 'microsoft.com')"
        }
    },
    "forEach_email": {
        "type": "foreach",
        "foreach": "@body('email_filter')",
        "actions": {
            "send_email": {
                "type": "ApiConnection",
                "inputs": {
                "body": {
                    "to": "@item()",
                    "from": "me@contoso.com",
                    "message": "Hello, thank you for ordering"
                },
                "host": {
                    "connection": {
                        "id": "@parameters('$connections')['office365']['connection']['id']"
                    }
                },
                }
            }
        },
        "runAfter":{
            "email_filter": [ "Succeeded" ]
        }
    }
}

Oggetto foreach azione possibile scorrere le matrici con migliaia di entità.A foreach action can iterate over arrays with thousands of entities. Per impostazione predefinita, le iterazioni eseguite in parallelo.Iterations execute in parallel by default. Vedere limiti e configurazione per ulteriori informazioni sui limiti della matrice e la concorrenza.See Limits and configuration for details on array and concurrency limits.

Cicli ForEach sequenzialiSequential ForEach loops

Per abilitare l'esecuzione sequenziale di un ciclo ForEach è necessario aggiungere l'opzione di operazione Sequential.To enable a foreach loop to execute sequentially, the Sequential operation option should be added.

"forEach_email": {
        "type": "foreach",
        "foreach": "@body('email_filter')",
        "operationOptions": "Sequential",
        "..."
}

Ciclo UntilUntil loop

È possibile eseguire un'azione o una serie di azioni finché non viene soddisfatta una condizione.You can perform an action or series of actions until a condition is met. Lo scenario più comune per l'utilizzo di un fino a quando non è chiamata di un endpoint ciclo fino a ottenere la risposta desiderata.The most common scenario for using an until loop is calling an endpoint until you get the response you are looking for. Nella finestra di progettazione è possibile specificare l'aggiunta di un loop Until.In the designer, you can specify to add an until loop. Dopo avere aggiunto le azioni nel loop, è possibile impostare la condizione di uscita, nonché i limiti del loop.After adding actions inside the loop, you can set the exit condition, as well as the loop limits.

Questo esempio viene chiamato un endpoint HTTP finché il corpo della risposta è il valore 'Completed'.This example calls an HTTP endpoint until the response body has the value 'Completed'. Viene completato quando entrambi:It completes when either:

  • Lo stato della risposta HTTP è "Completed"HTTP Response has status of 'Completed'
  • È tentato per un'oraIt has tried for one hour
  • Il ciclo è stato eseguito 100 volteIt has looped 100 times

    In visualizzazione codice, è possibile specificare un fino al ciclo analogo al seguente:If using code-view, you can specify an until loop like the following example:

    {
      "until_successful":{
        "type": "until",
        "expression": "@equals(actions('http')['status'], 'Completed')",
        "limit": {
            "count": 100,
            "timeout": "PT1H"
        },
        "actions": {
            "create_resource": {
                "type": "http",
                "inputs": {
                    "url": "http://provisionRseource.com",
                    "body": {
                        "resourceId": "@triggerBody()"
                    }
                }
            }
        }
      }
    }
    

SplitOn e scomposizione batchSplitOn and debatching

In alcuni casi un trigger può ricevere una matrice di elementi che si preferisce separare per avviare un flusso di lavoro per ogni elemento.Sometimes a trigger may receive an array of items that you want to debatch and start a workflow per item. La scomposizione dei batch può essere eseguita tramite il spliton comando.This debatching can be accomplished via the spliton command. Per impostazione predefinita, se il swagger trigger consente di specificare un payload che è una matrice, un spliton viene aggiunto.By default, if your trigger swagger specifies a payload that is an array, a spliton is added. Il spliton comando avvia un'esecuzione per ogni elemento nella matrice.The spliton command starts a run per item in the array. SplitOn possono essere aggiunti solo a un trigger che può essere configurato manualmente o sottoposto a override.SplitOn can only be added to a trigger which can be manually configured or overridden. Non è possibile usare spliton e implementare anche il modello di risposta sincrona.You cannot have a spliton and also implement the synchronous response pattern. Qualsiasi flusso di lavoro denominato che ha un response azione oltre a spliton viene eseguito in modo asincrono e invia immediatamente 202 Accepted risposta.Any workflow called that has a response action in addition to spliton runs asynchronously and sends an immediate 202 Accepted response.

In questo esempio riceve una matrice di elementi e debatches in ogni riga.This example receives an array of items and debatches on each row. SplitOn può essere specificato nella visualizzazione codice come nell'esempio seguente:SplitOn can be specified in code-view as the following example:

{
    "myDebatchTrigger": {
        "type": "Http",
        "inputs": {
            "url": "http://getNewCustomers",
        },
        "recurrence": {
            "frequencey": "Second",
            "interval": 15
        },
        "spliton": "@triggerBody()['rows']"
    }
}

AmbitiScopes

È possibile raggruppare una serie di azioni tra loro usando un ambito.It is possible to group a series of actions together using a scope. Gli ambiti sono utili per l'implementazione di gestione delle eccezioni.Scopes are useful for implementing exception handling. Nella finestra di progettazione è possibile aggiungere un nuovo ambito e iniziare ad aggiungere tutte le azioni all'interno di esso.In the designer you can add a new scope, and begin adding any actions inside of it. È possibile definire gli ambiti nella visualizzazione di codice simile al seguente:You can define scopes in code-view like the following example:

{
    "myScope": {
        "type": "scope",
        "actions": {
            "call_bing": {
                "type": "http",
                "inputs": {
                    "url": "http://www.bing.com"
                }
            }
        }
    }
}