Erstellen von Schleifen zum Wiederholen von Aktionen in Workflows mit Azure Logic Apps

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

Azure Logic Apps enthält die folgenden Schleifenaktionen, die Sie in Ihren Workflows verwenden können:

  • Wenn Sie eine oder mehrere Aktionen für Elemente in einem Array wiederholen möchten, fügen Sie der Workflowaktion "Für jede Aktion " hinzu.

    Wenn Sie einen Trigger verwenden, der ein Array empfängt, und für jedes Arrayelement einen Durchlauf ausführen möchten, können Sie dieses Array mit der SplitOn-Triggereigenschaftaus dem Batch lösen.

  • Um Aktionen zu wiederholen, bis eine Bedingung erfüllt ist oder sich ein Zustand ändert, fügen Sie dem Workflow die Until-Aktion hinzu.

    Ihr Workflow führt zuerst alle Aktionen innerhalb der Schleife aus und überprüft anschließend die Bedingung oder den Status. Wenn die Bedingung erfüllt ist, wird die Schleife beendet. Andernfalls wird die Schleife wiederholt. Informationen zu den Standard- und Höchstwerten für die Anzahl von Until-Schleifen in einem Workflow finden Sie unter Grenzwerte für Parallelität, Schleifen und Auflösen von Batches.

Voraussetzungen

For each

Die Aktion für jede Aktion funktioniert nur für Arrays und wiederholt eine oder mehrere Aktionen für jedes Element in einem Array. Die folgende Liste enthält einige Überlegungen zu Anwendungsfällen für die For each-Aktion:

  • Die For each-Aktion kann eine begrenzte Anzahl von Arrayelementen verarbeiten. Informationen zu diesem Grenzwert finden Sie unter Grenzwerte für Parallelität, Schleifen und Auflösen von Batches.

  • Standardmäßig werden die Zyklen oder Iterationen in einer For each-Aktion gleichzeitig parallel ausgeführt.

    Dieses Verhalten unterscheidet sich von der Apply to each-Schleife von Power Automate, bei der Iterationen einzeln bzw. nacheinander ausgeführt werden. Sie können jedoch sequenzielle For each-Iterationen einrichten. Wenn Sie beispielsweise die nächste Iteration in einer For each-Aktion mithilfe der Delay-Aktion anhalten möchten, müssen Sie die Schleife so einrichten, dass die Iterationen sequenziell ausgeführt werden.

    Eine Ausnahme zum Standardverhalten bilden geschachtelte For each-Aktionen, deren Iterationen immer nacheinander, nicht parallel ausgeführt werden. Um Vorgänge für Elemente in einer geschachtelten Schleife parallel auszuführen, erstellen Sie einen untergeordneten Logik-App-Workflow und rufen Sie diesen auf.

  • Um vorhersagbare Ergebnisse von Vorgängen mit Variablen während jeder Iteration zu erhalten, führen Sie die Iterationen nacheinander aus. Wenn beispielsweise eine gleichzeitig laufende Iteration endet, liefern die Vorgänge Variable schrittweise erhöhen, Variablenwert verringern und An Variable anfügen vorhersagbare Ergebnisse. Bei jeder Iteration in der gleichzeitig laufenden Schleife können diese Vorgänge jedoch zu unvorhersehbaren Ergebnissen führen.

  • Aktionen in einer For each-Schleife verwenden die item()-Funktion, um auf jedes Element im Array zu verweisen und es zu verarbeiten. Wenn Sie Daten angeben, die sich nicht in einem Array befinden, tritt im Workflow ein Fehler auf.

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

Je nachdem, ob Sie über einen Verbrauchs- oder Standardworkflow verfügen, führen Sie die entsprechenden Schritte aus:

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

  2. Führen Sie dieselben allgemeinen Schritte aus, um die For each-Aktion zwischen dem RSS-Trigger und der Aktion E-Mail senden in Ihrem Workflow hinzuzufügen.

  3. Erstellen Sie jetzt die Schleife:

    1. Wählen Sie das Feld Ausgabe aus vorherigen Schritten auswählen aus, damit die Liste mit dynamischen Inhalten geöffnet wird.

    2. Wählen Sie in der Liste Dynamischen Inhalt hinzufügen im Abschnitt Beim Veröffentlichen eines Feedelements die Option Feedlinks 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 des Triggerabschnitts die Option Mehr anzeigen aus. Sie können in der Liste mit dynamischen Inhalten nur Ausgaben aus den vorherigen Schritten auswählen.

      Screenshot shows Azure portal, Consumption workflow designer, action named For each, and opened dynamic content list.

      Wenn Sie fertig sind, wird die ausgewählte Arrayausgabe wie im folgenden Beispiel angezeigt:

      Screenshot shows Consumption workflow, action named For each, and selected array output.

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

      Ihr Workflow sollte wie im folgenden Beispiel aussehen:

      Screenshot shows Consumption workflow, action named For each, and action named Send an email, now inside For each loop.

  4. Wenn Sie fertig sind, speichern Sie Ihren Workflow.

  5. Wählen Sie auf der Symbolleiste des Designers Trigger ausführen>Ausführen aus, um Ihren Workflow manuell zu testen.

Für jede 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"
   }
},

For each: Sequenzielle Ausführung

Standardmäßig werden Iterationen in einer For each-Schleife gleichzeitig bzw. parallel ausgeführt. Wenn Sie jedoch geschachtelte Schleifen oder Variablen in den Schleifen haben und vorhersagbare Ergebnisse erwarten, müssen Sie diese Schleifen einzeln also sequenziell ausführen.

  1. Wählen Sie in der For each-Aktion rechts oben die Schaltfläche mit den Auslassungspunkten (...) und dann Einstellungen aus.

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

  3. Ziehen Sie den Schieberegler Parallelitätsgrad auf 1, und wählen Sie Fertig aus.

    Screenshot shows Consumption workflow, action named For each, concurrency control setting turned on, and degree of parallelism slider set to 1.

„For each“-Aktionsdefinition (JSON): Sequenzielle Ausführung

Wenn Sie in der Codeansicht mit der JSON-Definition der For_each-Aktion in Ihrem Workflow arbeiten, können Sie die Option Sequential verwenden, indem Sie den operationOptions-Parameter hinzufügen, z. B.:

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

Until

Die Until-Aktion wird ausgeführt (und wiederholt eine oder mehrere Aktionen), bis die angegebene Bedingung erfüllt ist. Wenn die Bedingung erfüllt ist, wird die Schleife beendet. Andernfalls wird die Schleife wiederholt. Informationen zu den Standard- und Höchstwerten für die Anzahl von Iterationen der Until-Aktion in einem Workflow finden Sie unter Grenzwerte für Parallelität, Schleifen und Auflösen von Batches.

Die folgende Liste enthält einige gängige Szenarien, in denen Sie eine Until-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.

Im folgenden Beispielworkflow erhöht die Until-Aktion jeden Tag um 8:00 Uhr eine Variable, bis der Wert der Variable 10 ist. Dann sendet der Workflow eine E-Mail, die den aktuellen Wert bestätigt.

Hinweis

In diesem Beispiel wird Office 365 Outlook verwendet, aber Sie können jeden E-Mail-Anbieter verwenden, der Azure Logic Apps unterstützt. Bei Verwendung eines anderen E-Mail-Kontos bleiben die allgemeinen Schritte zwar gleich, die Benutzeroberfläche sieht aber unter Umständen etwas anders aus.

  1. Erstellen Sie im Azure-Portal eine Verbrauchs-Logik-App-Ressource mit einem leeren Workflow.

  2. Führen Sie im Designer diese allgemeinen Schritte aus, um Ihrem Workflow den integrierten Wiederholungstrigger namens Zeitplan hinzuzufügen.

  3. Geben Sie im Wiederholungstrigger das Intervall, die Häufigkeit und die Stunde an, zu der der Trigger ausgelöst werden soll.

    Eigenschaft Wert
    Intervall 1
    Frequency Tag
    Zu diesen Stunden 8

    Um den Parameter Zu diesen Stunden hinzuzufügen, öffnen Sie die Liste Neuen Parameter hinzufügen und wählen Zu diesen Stunden aus. Diese Option wird erst angezeigt, nachdem Sie die Häufigkeit auf Tag festgelegt haben.

    Screenshot shows Azure portal, Consumption workflow designer, and Recurrence trigger parameters with selected option for At these hours.

    Wenn Sie fertig sind, sollte der Wiederholungstrigger wie im folgenden Beispiel aussehen:

    Screenshot shows Azure portal, Consumption workflow, and Recurrence trigger parameters set up.

  4. Führen Sie unter dem Trigger die folgenden allgemeinen Schritte aus, um Ihrem Workflow die integrierte Variablen-Aktion mit dem Namen Variable initialisieren hinzuzufügen.

  5. Geben Sie in der Aktion Variable initialisieren die folgenden Werte an:

    Eigenschaft Wert Beschreibung
    Name Begrenzung Name Ihrer Variablen
    Typ Integer Datentyp Ihrer Variablen
    Wert 0 Startwert Ihrer Variablen

    Screenshot shows Azure portal, Consumption workflow, and parameters for built-in action named Initialize variable.

  6. Führen Sie unter der Aktion Variable initialisierendiese allgemeinen Schritte aus, um Ihrem Workflow die integrierte Steuerelement-Aktion mit dem Namen Until hinzuzufügen.

  7. Geben Sie in der Until-Aktion die folgenden Werte an, um die Beendigungsbedingung für die Schleife einzurichten.

    1. Wählen das Feld Wert auswählen ganz links aus. Dadurch wird die Liste mit dynamischen Inhalten automatisch geöffnet.

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

    3. Wählen Sie in der mittleren Operatorliste den Operator ist gleich aus.

    4. Geben Sie im Feld Wert auswählen ganz rechts 10 als Vergleichswert ein.

    Screenshot shows Consumption workflow and built-in action named Until with finished stop condition.

  8. Wählen Sie in Aktion Until die Option Aktion hinzufügen aus.

  9. Führen Sie im Suchfeld Vorgang auswählendie folgenden allgemeinen Schritte aus, um der Until-Aktion die integrierte Variablen-Aktion mit dem Namen Variable schrittweise erhöhen hinzuzufügen.

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

    Eigenschaft Wert
    Name Wählen Sie die Variable Limit aus.
    Wert 1

    Screenshot shows Consumption workflow and built-in action named Until with Name set to the Limit variable and Value set to 1.

  11. Führen Sie außerhalb und unter der Until-Aktion diese allgemeinen Schritte aus, um eine Aktion hinzuzufügen, die E-Mails sendet.

    In diesem Beispiel wird die Office 365 Outlook-Aktion E-Mail senden verwendet.

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

    Eigenschaft 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 in diesem Beispiel sicher, dass Sie die Limit-Variable einschließen, um zu bestätigen, dass der aktuelle Wert Ihre angegebene Bedingung erfüllt:

    1. Wählen Sie das Feld Betreff aus, sodass die Liste mit dynamischen Inhalten angezeigt wird.

    2. Wählen Sie in der Liste mit dynamischen Inhalten neben der Abschnittsüberschrift Variablen die Option Mehr anzeigen aus.

    3. Wählen Sie Limit aus.
    Text <E-Mail-Inhalt> Der Inhalt der E-Mail-Nachricht, die Sie senden möchten. In diesem Beispiel können Sie beliebigen Text eingeben.

    Wenn Sie fertig sind, sieht Ihre E-Mail-Aktion ähnlich wie im folgenden Beispiel aus:

    Screenshot shows Consumption workflow and action named Send an email with property values.

  13. Speichern Sie den Workflow.

Testen Ihres Workflows

Führen Sie zum manuellen Testen Ihres Logik-App-Workflows die Schritte aus, je nachdem, ob Sie über eine Verbrauchs- oder Standard-Logik-App verfügen.

Wählen Sie auf der Symbolleiste des Designers Trigger ausführen>Ausführen aus.

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

Screenshot shows sample email received from example workflow.

Verhindern von Endlosschleifen

Die Ausführung der Until-Aktion wird basierend auf den folgenden Eigenschaften beendet, die Sie anzeigen können, indem Sie in der Aktion Grenzwerte ändern auswählen. Sie müssen diese Eigenschaftswerte entsprechend festlegen:

Eigenschaft Beschreibung
Count 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 Until-Aktionen in einem Workflow finden Sie unter Grenzwerte für Parallelität, Schleifen und Auflösen von Batches.
Timeout Die maximale Zeit, die die Until-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.

„Until“-Definition (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 Until-Schleife ruft einen HTTP-Endpunkt auf, der eine Ressource erstellt. 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",
               "body": {
                  "resourceId": "@triggerBody()"
               }
            },
            "runAfter": {},
            "type": "ApiConnection"
         }
      },
      "expression": "@equals(triggerBody(), 'Completed')",
      "limit": {
         "count": 10,
         "timeout": "PT2H"
      },
      "runAfter": {}
   }
}

Nächste Schritte