Erstellen von Schleifen in Workflows mit Azure Logic Apps, um Aktionen zu wiederholen
Gilt für: Azure Logic Apps (Verbrauch + Standard)
Azure Logic Apps enthält die folgenden Schleifenaktionen, die Sie in Ihren Workflows verwenden können:
Um eine oder mehrere Aktionen für Elemente in einem Array zu wiederholen, fügen Sie Ihrem Workflow die For each-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
Ein Azure-Konto und ein Azure-Abonnement. Falls Sie kein Abonnement besitzen, können Sie sich für ein kostenloses Azure-Konto registrieren.
Grundlegende Kenntnisse über Logik-App-Workflows
For each
Die For each-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:
Erstellen Sie im Azure-Portal einen Verbrauchs-Logik-App-Beispielworkflow mit den folgenden Schritten in der angegebenen Reihenfolge:
Der RSS-Trigger mit dem Namen Beim Veröffentlichen eines Feedelements
Für weitere Informationen führen Sie die folgenden allgemeinen Schritte aus, um einen Trigger hinzuzufügen.
Die Outlook.com- oder Office 365 Outlook-Aktion mit dem Namen E-Mail senden
Für weitere Informationen führen Sie die folgenden allgemeinen Schritte aus, um eine Aktion hinzuzufügen.
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.
Erstellen Sie jetzt die Schleife:
Wählen Sie das Feld Ausgabe aus vorherigen Schritten auswählen aus, damit die Liste mit dynamischen Inhalten geöffnet wird.
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.
Wenn Sie fertig sind, wird die ausgewählte Arrayausgabe wie im folgenden Beispiel angezeigt:
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:
Wenn Sie fertig sind, speichern Sie Ihren Workflow.
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.
Wählen Sie in der For each-Aktion rechts oben die Schaltfläche mit den Auslassungspunkten (...) und dann Einstellungen aus.
Ändern Sie die Einstellung Parallelitätssteuerung von Aus in Ein.
Ziehen Sie den Schieberegler Parallelitätsgrad auf 1, und wählen Sie Fertig aus.
„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.
Erstellen Sie im Azure-Portal eine Verbrauchs-Logik-App-Ressource mit einem leeren Workflow.
Führen Sie im Designer diese allgemeinen Schritte aus, um Ihrem Workflow den integrierten Wiederholungstrigger namens Zeitplan hinzuzufügen.
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.
Wenn Sie fertig sind, sollte der Wiederholungstrigger wie im folgenden Beispiel aussehen:
Geben Sie in der Aktion Variable initialisieren die folgenden Werte an:
Eigenschaft Wert Beschreibung Name Begrenzung Name Ihrer Variablen Typ Ganzzahl Datentyp Ihrer Variablen Wert 0 Startwert Ihrer Variablen Führen Sie unter der Aktion Variable initialisierendiese allgemeinen Schritte aus, um Ihrem Workflow die integrierte Steuerelement-Aktion mit dem Namen Until hinzuzufügen.
Geben Sie in der Until-Aktion die folgenden Werte an, um die Beendigungsbedingung für die Schleife einzurichten.
Wählen das Feld Wert auswählen ganz links aus. Dadurch wird die Liste mit dynamischen Inhalten automatisch geöffnet.
Wählen Sie in der Liste unter Variablen die Variable Limit aus.
Wählen Sie in der mittleren Operatorliste den Operator ist gleich aus.
Geben Sie im Feld Wert auswählen ganz rechts 10 als Vergleichswert ein.
Wählen Sie in Aktion Until die Option Aktion hinzufügen aus.
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.
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 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.
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. Betreff 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 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:
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.
Wenn Ihr Workflow ausgeführt wird, erhalten Sie eine E-Mail mit dem von Ihnen angegebenen Inhalt:
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": {}
}
}