Loops ausführen, um Actions in Workflows for Azure Logic Apps zu wiederholen

Gilt für: Azure Logic Apps (Verbrauch + Standard)

Um dieselben Aktionen auf jedem Element in einem Array oder einer Sammlung auszuführen oder Aktionen zu wiederholen, bis etwas in deinem Logik-App-Workflow abgeschlossen ist, füge die Kontrollaktion namens For each oder Until zu deinem Workflow hinzu:

Action Aufgabe
Für jede(n) Wiederhole eine oder mehrere Aktionen auf Array- oder Sammelobjekte. Gilt nur für Arrays und Sammlungen.

Tipp: Wenn du einen Trigger hast, der Arrays verarbeitet, und für jedes Array-Element eine Workflow-Instanz ausführen möchtest, setze die Split-on-Eigenschaft des Triggers, um das Array zu debatchen.

Weitere Informationen finden Sie unter Nebenläufigkeit, Schleifen und Debatching-Grenzwerte.
Until Wiederholen Sie eine oder mehrere Aktionen, bis eine Bedingung erfüllt ist oder sich ein bestimmter Zustand ändert.

Dein Workflow führt zuerst alle Aktionen in der Schleife aus und überprüft dann den Zustand oder Status. Wenn die Bedingung erfüllt ist, wird die Schleife beendet. Andernfalls wird die Schleife wiederholt.

Für Informationen siehe Nebenläufigkeit, Schleifen- und Debatching-Grenzen.

Dieser Leitfaden zeigt, wie Sie eine Schleife in Ihren Workflow integrieren, Iterationen sequenziell ausführen und endlose Schleifen vermeiden. Springen Sie zu der Aufgabe, die Sie möchten:

Hinweis

Für die Power Automate-Dokumentation siehe Use loops.

Voraussetzungen

  • Ein Azure-Konto und ein Azure-Abonnement. Erhalten Sie ein kostenloses Azure-Konto.

  • Der Logik-App-Workflow, bei dem du die Schleife ausführen möchtest, einschließlich eines Triggers, der den Workflow startet.

    Bevor du eine Schleifenaktion hinzufügen kannst, muss dein Workflow mit einem Trigger als ersten Schritt beginnen.

Dieser Leitfaden verwendet das Azure-Portal, aber Sie können Visual Studio Code und die entsprechende Azure Logic Apps-Erweiterung verwenden, um Logik-App-Workflows zu erstellen:

Für jede Schleife sind Überlegungen

Die Aktion Für jedes wiederholt eine oder mehrere Aktionen für jedes Element eines Arrays oder einer Sammlung.

  • Die Aktion For each funktioniert nur mit Arrays und Sammlungen.

  • Die For jede Aktion verarbeitet eine begrenzte Anzahl von Array-Elementen.

  • Standardmäßig laufen für jede Aktion die Iterationen parallel. Wichtige Verhaltensweisen, die Sie kennen sollten:

    Behavior Was dies bedeutet
    Standardmäßig parallel Im Gegensatz zu der Apply to each-Schleife in Power Automate werden Iterationen nicht nacheinander ausgeführt.

    Wenn Ihr Szenario eine sequenzielle Verarbeitung erfordert, finden Sie weitere Informationen unter For each-Iterationen sequenziell ausführen. Zum Beispiel, um die nächste Iteration in einer Für jede Aktion mit der Verzögerungsaktion zu pausieren, richten Sie jede Iteration so ein, dass sie sequentiell ausgeführt wird.
    Verschachtelte Schleifen Eine verschachtelte Für jeden-Aktion wird immer sequenziell ausgeführt. Um parallel auszuführen, erstellen und aufrufen Sie einen Kind-Workflow.
    Variables Variable inkrementieren, Variable dekrementieren und An Variable anfügen können in parallelen Schleifen unvorhersehbare Ergebnisse liefern. Um sicherzustellen, dass Variablen in einer Schleife während jeder Iteration vorhersehbare Ergebnisse aus Operationen auf diesen Variablen liefern, führen Sie die Schleife sequentiell aus.
  • Aktionen in einer For each-Schleife verwenden die item()-Funktion, um auf jedes Element im Array zu referenzieren und zu verarbeiten. Wenn Sie Daten angeben, die sich nicht in einem Array befinden, tritt beim Workflow ein Fehler auf.

Füge deinem Workflow eine For-Each-Schleife hinzu

Der folgende Beispielworkflow sendet eine tägliche Zusammenfassung für einen RSS-Feed einer Website. Der Workflow verwendet eine For each-Aktion, die eine E-Mail für jedes neue Element sendet.

  1. Erstellen Sie im Azure-Portal einen Logik-App-Workflow mit den folgenden Schritten in der angegebenen Reihenfolge:

    • RSS-Trigger mit dem Namen Wenn ein Feedelement veröffentlicht wird

      Führen Sie die folgenden allgemeinen Schritte aus, um einem Logik-App-Workflow Verbrauch oder Standard einen Trigger hinzuzufügen.

    • Outlook.com- oder Office 365 Outlook-Aktion mit dem Namen E-Mail senden

      Führen Sie die folgenden allgemeinen Schritte aus, um einem Logik-App-Workflow Verbrauch oder Standard eine Aktion hinzuzufügen.

  2. Im Designer fügen Sie zwischen Auslöser und Senden einer E-Mail-Aktion die Aktion namens For Each ein, indem Sie den allgemeinen Schritten basierend auf Ihrem Workflow-Typ folgen:

  3. Erstellen Sie nun die Schleife:

    1. Im Feld Für jede Aktion wählen Sie im Feld "Wählen Sie einen Output aus vorherigen Schritten" aus , um die Eingabeoptionen anzuzeigen, und wählen Sie dann das Blitz-Symbol.

    2. Wählen Sie in der daraufhin geöffneten Liste dynamischer Inhalte unter Wenn ein Feedelement veröffentlicht wird die OptionFeedlinks aus, bei der es sich um eine Arrayausgabe des RSS-Triggers handelt.

      Hinweis

      Wenn die Ausgabe Feedlinks nicht angezeigt wird, wählen Sie neben der Bezeichnung für den Triggerabschnitt Mehr anzeigen aus. In der Liste der dynamischen Inhalte können Sie nur Ausgaben von vorherigen Schritten auswählen.

      Screenshot, der den Azure-Portal- und Workflow-Designer mit einer Aktion namens For Each und die offene dynamische Inhaltsliste zeigt.

      Das folgende Beispiel zeigt die ausgewählte Array-Ausgabe:

      Screenshot, der den Workflow-Designer und die Aktion namens For Each mit ausgewählter Array-Ausgabe zeigt.

    3. Um eine vorhandene Aktion für jedes Arrayelement auszuführen, ziehen Sie die Aktion E-Mail senden in die For each-Schleife.

      Ihr Arbeitsablauf sieht folgendes Beispiel aus:

      Screenshot, der den Workflow-Designer zeigt, die Aktion namens „Für jeden“ und die Aktion namens „Eine E-Mail senden“, jetzt innerhalb der Aktion „Für jeden“.

  4. Speichern Sie den Workflow.

  5. Um Ihren Workflow manuell zu testen, wählen Sie auf der Designersymbolleiste Ausführen>Ausführen aus.

For each-Aktionsdefinition (JSON)

Wenn Sie in der Codeansicht arbeiten, können Sie die For_each-Aktion in der JSON-Definition Ihres Workflows definieren, z. B.:

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

Für jeden: Führen Sie Loop-Iterationen nacheinander aus

Standardmäßig werden die Iterationen in einer For each-Aktion gleichzeitig parallel ausgeführt. Wenn Sie jedoch geschachtelte Schleifen verwenden oder Variablen innerhalb von Schleifen haben, in denen sie vorhersagbare Ergebnisse erwarten, müssen Sie diese Schleifen jeweils einzeln ausführen.

  1. Wählen Sie im Designer die Aktion For each aus, um den Informationsbereich zu öffnen, und wählen Sie dann Einstellungen aus.

  2. Ändern Sie unter Parallelitätssteuerung die Einstellung von Aus in Ein.

  3. Verschieben Sie den Schieberegler für den Grad der Parallelität auf 1.

    Screenshot, der die Aktion „Für jede“, die Registerkarte „Einstellungen“ und die aktivierte Einstellung „Parallelitätssteuerung“ mit dem auf 1 festgelegten Schieberegler für den Grad der Parallelität zeigt.

For each-Aktionsdefinition (JSON): Sequenziell ausführen

Wenn Sie in der Codeansicht mit der For_each-Aktion in der JSON-Definition Ihres Workflows arbeiten, fügen Sie den Parameter operationOptions hinzu, und legen Sie den Parameterwert auf Sequential fest:

"actions": {
   "For_each": {
      "actions": {
         "Send_an_email_(V2)": { }
      },
      "foreach": "@triggerBody()?['links']",
      "runAfter": {},
      "type": "Foreach",
      "operationOptions": "Sequential"
   }
}

Überlegungen zur Bis-Schleife

Die Bis-Aktion wird ausgeführt und wiederholt eine oder mehrere Aktionen, bis die erforderliche angegebene Bedingung erfüllt ist. Wenn die Bedingung erfüllt ist, wird die Schleife beendet. Andernfalls wird die Schleife wiederholt. Weitere Informationen finden Sie unter Nebenläufigkeits-, Schleifen- und Debatching-Einschränkungen.

Die folgende Liste enthält einige häufige Szenarien, in denen Sie eine Bis-Aktion verwenden können:

  • Rufen Sie einen Endpunkt auf, bis Sie die gewünschte Antwort erhalten.

  • Erstellen Sie einen Datensatz in der Datenbank. Warten Sie, bis ein bestimmtes Feld in diesem Datensatz genehmigt wird. Setzen Sie die Verarbeitung fort.

Standardmäßig ist die Aktion Until erfolgreich oder schlägt auf folgende Weisen fehl:

  • Die "Until "-Schleife ist erfolgreich, wenn alle Aktionen innerhalb der Schleife erfolgreich ausgeführt werden und der Schleifengrenzwert erreicht ist, basierend auf dem Verhalten nach der Ausführung.

  • Wenn alle Aktionen in der letzten Iteration der Until-Schleife erfolgreich ausgeführt werden, wird die gesamte Until-Schleife als erfolgreich markiert.

  • Wenn eine Aktion in der letzten Iteration der Until-Schleife fehlschlägt, wird die gesamte Until-Schleife als fehlgeschlagen markiert.

  • Wenn eine Aktion in einer anderen Iteration als der letzten Iteration fehlschlägt, wird die nächste Iteration weiterhin ausgeführt, und die gesamte Aktion Until wird nicht als Fehler markiert.

    Wenn die Aktion fehlschlägt, ändern Sie stattdessen das Standardverhalten in der JSON-Definition der Schleife, indem Sie den Parameter namens operationOptions hinzufügen und den Wert z. B. auf FailWhenLimitsReached festlegen:

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

Fügen Sie Ihrem Workflow eine Bis-Schleife hinzu

Der folgende Beispiel-Workflow beginnt jeden Tag um 8:00 Uhr. Der Workflow verwendet die Aktion Bis, um eine Variable so lange zu erhöhen, bis der Wert 10 erreicht. Der Workflow sendet dann eine E-Mail, die den aktuellen Wert bestätigt. Im Beispiel wird Office 365 Outlook verwendet, Sie können jedoch jeden E-Mail-Anbieter verwenden, den Azure Logic Apps unterstützt. Wenn Sie ein anderes E-Mail-Konto verwenden, bleiben die allgemeinen Schritte gleich, sehen aber etwas anders aus.

  1. Erstellen Sie im Azure-Portal eine Logik-App-Ressource und einen leeren Workflow.

  2. Im Designer fügen Sie den eingebauten Schedule-Trigger namens Recurrence hinzu, indem Sie den allgemeinen Schritten basierend auf Ihrem Workflow-Typ folgen:

  3. Im Rekurrence-Trigger geben Sie folgende Informationen an:

    Parameter Wert
    Intervall 1
    Frequenz Day
    Zu diesen Stunden 8
    Zu diesen Minuten 00

    Zu diesen Stunden und Zu diesen Minuten werden nach dem Festlegen von Häufigkeit auf Tag angezeigt.

    Das folgende Beispiel zeigt, wie der Recurrence-Trigger aussieht:

    Screenshot, der den Azure-Portal- und Workflow-Designer mit eingerichteten Recurrence-Trigger-Parametern zeigt.

  4. Im Designer fügen Sie die eingebaute Aktion Variablen namens Variable initialisieren hinzu, indem Sie den allgemeinen Schritten basierend auf Ihrem Workflow-Typ folgen:

  5. In der Aktion "Variable initialisieren " geben Sie folgende Informationen an:

    Parameter Wert BESCHREIBUNG
    Name Begrenzung Der Name deiner Variablen.
    Typ Integer Der Datentyp deiner Variable.
    Wert 0 Der Anfangswert deiner Variablen.

    Screenshot, der das Azure-Portal, den Workflow-Designer und die integrierte Aktion namens Initialize Variable sowie die Parameter zeigt.

  6. Unter der Aktion Variable initialisieren fügen Sie die eingebaute Aktion Control namens Until hinzu, indem Sie die allgemeinen Schritte basierend auf Ihrem Workflow-Typ befolgen:

  7. In der Aktion Until setzen Sie die Stoppbedingung für die Schleife ein:

    1. Wählen Sie im Loop Until Feld aus und wählen Sie dann das Lightning-Symbol, um die dynamische Inhaltsliste zu öffnen.

    2. Wählen Sie in der Liste unter Variablen die Variable mit dem Namen Limit aus.

    3. Geben Sie unter Count den Wert 10 als Vergleichswert ein.

    Screenshot, der den Workflow und eine eingebaute Aktion namens Until mit den beschriebenen Werten zeigt.

  8. Wählen Sie in der Until-Aktion die Option +>Add an action aus.

  9. Füge der Aktion Until die integrierte Aktion Variables namens Variable inkrementieren hinzu, indem du je nach Workflowtyp die allgemeinen Schritte ausführst:

  10. Geben Sie in der Aktion Variablenwert erhöhen die folgenden Werte an, um den Wert der Variable Limit um 1 zu erhöhen:

    Parameter Wert
    Begrenzung Wählen Sie die Variable Limit aus.
    Wert 1

    Screenshot, der den Workflow und eine integrierte Aktion namens Until zeigt, bei der Limit auf die Variable „Limit“ und Wert auf 1 festgelegt ist.

  11. Außerhalb und unter der Aktion Bis fügen Sie eine Aktion hinzu, die eine E-Mail sendet, indem Sie den allgemeinen Schritten basierend auf Ihrem Workflow-Typ folgen:

    In diesem Beispiel wird als Nächstes die Office 365 Outlook-Aktion mit dem Namen E-Mail senden verwendet.

  12. Geben Sie in der E-Mail-Aktion die folgenden Werte an:

    Parameter Wert BESCHREIBUNG
    An < E-Mail-Adress@Domäne> Die E-Mail-Adresse des Empfängers. Geben Sie zum Testen Ihre eigene E-Mail-Adresse an.
    Subject Der aktuelle Wert für die Variable „Limit“ ist:Limit Der E-Mail-Betreff. Stellen Sie für dieses Beispiel sicher, dass Sie die Variable Limit einschließen, um zu bestätigen, dass der aktuelle Wert die angegebene Bedingung erfüllt:

    1. Wählen Sie darin das Feld Betreff aus, und wählen Sie dann das Blitzsymbol aus.

    2. Wählen Sie in der daraufhin geöffneten dynamischen Inhaltsliste neben der Abschnittsüberschrift Variablen die Option Weitere Informationen aus.

    3. Wählen Sie Limit aus.
    Text < E-Mail-Inhalt> Der Inhalt der E-Mail-Nachricht, die Sie senden möchten. Geben Sie in diesem Beispiel den gewünschten Text ein.

    Das folgende Beispiel zeigt, wie Ihre E-Mail-Aktion aussieht:

    Screenshot, der einen Workflow und eine Aktion namens Eine E-Mail mit Eigenschaftswerten senden zeigt.

  13. Speichern Sie den Workflow.

Testen des Workflows

So testen Sie den Logik-App-Workflow manuell:

  • Wählen Sie in der Designersymbolleiste in der Option Ausführen die Option Ausführen aus.

Wenn Ihr Workflow ausgeführt wird, erhalten Sie eine E-Mail mit dem angegebenen Inhalt:

Screenshot, der eine Beispiel-E-Mail aus dem Beispiel-Workflow zeigt.

Verhindern von Endlosschleifen

Die Aktion Until beendet die Ausführung basierend auf den optionalen Parametern Anzahl und Timeout. Stellen Sie sicher, dass Sie diese Parameterwerte entsprechend festlegen:

Parameter BESCHREIBUNG
Zählen Die maximale Anzahl von Iterationen, die ausgeführt werden, bevor die Schleife beendet wird.

Informationen zu den Standard- und Höchstwerten für die Anzahl von Bis-Aktionen in einem Workflow finden Sie unter Grenzwerte für Parallelität, Schleifen und Auflösen von Batches.
Timeout Die maximale Zeit, die die Bis-Aktion einschließlich aller Iterationen ausgeführt wird, bevor die Schleife beendet wird. Dieser Wert wird im ISO 8601-Format angegeben und für jede Iteration ausgewertet.

Wenn eine Aktion in der Schleife länger als das Timeout dauert, wird die aktuelle Iteration nicht beendet. Die nächste Iteration beginnt jedoch nicht, da die Timeoutbedingung nicht erfüllt ist.

Informationen zu den Standard- und Höchstwerten für den Timeout-Wert finden Sie unter Grenzwerte für Parallelität, Schleifen und Auflösen von Batches.

Überprüfung der Ausführungshistorie für Until-Loop-Iterationen

Wenn Sie den Ausführungsverlauf für einen Workflow anzeigen, der eine Until-Schleife enthält, sind der detaillierte Status und die Ergebnisse für Aktionen innerhalb der Schleife erst verfügbar, nachdem die gesamte Schleife die Ausführung abgeschlossen hat. Während die Until-Schleife ihre Iterationen noch ausführt, zeigt die Schleifenaktion den Status Wird ausgeführt an, aber Sie können die Ergebnisse der einzelnen Iterationen erst erweitern oder durchgehen, wenn die Schleife beendet ist.

Die Schleife endet, wenn eine der folgenden Bedingungen erfüllt ist:

  • Der angegebene Ausdruck wird als "true" ausgewertet.
  • Die Schleife erreicht das Count-Limit.
  • Die Schleife erreicht die Timeout-Grenze.

Nach Abschluss der Schleife können Sie im Ausführungsverlauf die Aktion Until auswählen, um jede Iteration und den Status der untergeordneten Aktionen innerhalb dieser Iteration anzuzeigen.

Hinweis

Wenn die Until-Schleife für einen längeren Zeitraum ausgeführt wird, müssen Sie warten, bis die Schleife vollständig abgeschlossen ist, bevor Sie den Ausführungsverlauf für die Ergebnisse aus einzelnen Iterationen überprüfen können. Um lang andauernde, bereits laufende Schleifen zu überwachen, sollten Sie erwägen, innerhalb der Schleife Protokollierungs- oder Benachrichtigungsaktionen hinzuzufügen, die eigenständig Statusinformationen ausgeben, beispielsweise durch das Senden einer Nachricht an eine Warteschlange oder das Aktualisieren einer Variablen, die von einem parallelen Zweig gelesen werden kann.

Bis zur Aktionsdefinition (JSON)

Wenn Sie in der Codeansicht arbeiten, können Sie eine Until-Aktion in der JSON-Definition Ihres Workflows definieren, z. B.:

"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"
         ]
      }
   }
}

Diese beispielhafte Bis-Schleife ruft einen HTTP-Endpunkt auf, der eine Ressource erzeugt. Die Schleife wird angehalten, wenn der HTTP-Antworttext mit dem Status Completed zurückgegeben wird. Um Endlosschleifen zu verhindern, wird die Schleife auch beendet, wenn eine der folgenden Bedingungen erfüllt ist:

  • Die Schleife wurde gemäß count-Attribut 10-mal ausgeführt. Der Standardwert ist 60-mal.

  • Die Schleife wurde gemäß timeout-Attribut im ISO 8601-Format zwei Stunden ausgeführt. Der Standardwert ist eine Stunde.

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

Nächste Schritte