Ausführen von Aktionen basierend auf dem Gruppenstatus unter Verwendung von Bereichen in Azure Logic Apps
Gilt für: Azure Logic Apps (Verbrauch)
Wenn Aktionen nur ausgeführt werden sollen, nachdem eine andere Gruppe von Aktionen erfolgreich oder nicht erfolgreich war, gruppieren Sie diese Aktionen in einem Bereich. Diese Struktur ist hilfreich, wenn Sie Aktionen als logische Gruppe organisieren, den Status dieser Gruppe auswerten und Aktionen durchführen möchten, die auf dem Status des Bereichs basieren. Nachdem die Ausführung aller Aktionen in einem Bereich beendet ist, erhält der Bereich auch einen eigenen Status. Beispielsweise können Sie Bereiche verwenden, wenn Sie die Ausnahme- und Fehlerbehandlung implementieren möchten.
Zum Überprüfen des Status eines Bereichs können Sie die gleichen Kriterien wie zum Bestimmen des Ausführungsstatus einer Logik-App verwenden, z.B. Erfolgreich, Fehlerhaft, Abgebrochen usw. Bei erfolgreicher Ausführung aller Aktionen des Bereichs wird der Status des Bereichs standardmäßig als Erfolgreich gekennzeichnet. Wenn jedoch eine Aktion im Bereich nicht ausgeführt werden kann oder abgebrochen wird, erhält der Bereich den Status Fehlerhaft. Grenzwerte für Bereiche finden Sie unter Grenzwerte und Konfiguration.
Hier sehen Sie beispielsweise eine allgemeine Logik-App, die einen Bereich zum Ausführen bestimmter Aktionen und eine Bedingung zum Überprüfen des Bereichsstatus verwendet. Wenn Aktionen im Bereich nicht ausgeführt werden können oder unerwartet beendet werden, wird der Bereich als Fehlerhaft bzw. Abgebrochen gekennzeichnet, und die Logik-App sendet eine Nachricht, dass der Bereich fehlerhaft ist. Wenn alle Aktionen im Bereich erfolgreich sind, sendet die Logik-App ebenfalls eine entsprechende Nachricht.
Voraussetzungen
Um dem Beispiel in diesem Artikel zu folgen, benötigen Sie diese Elemente:
Ein Azure-Abonnement. Falls Sie kein Abonnement besitzen, können Sie sich für ein kostenloses Azure-Konto registrieren.
Ein E-Mail-Konto bei einem von Logic Apps unterstützten E-Mail-Anbieter. In diesem Beispiel wird Outlook.com verwendet. Wenn Sie einen anderen Anbieter verwenden, bleibt der allgemeine Ablauf gleich, das Erscheinungsbild der Benutzeroberfläche weicht jedoch ab.
Ein Bing Karten-Schlüssel. Informationen zum Abrufen eines Bing Karten-Schlüssels finden Sie hier.
Grundlegende Kenntnisse zu Logik-Apps
Erstellen einer Beispiel-Logik-App
Erstellen Sie zunächst diese Beispiel-Logik-App, damit Sie später einen Bereich hinzufügen können:
- Ein Auslöser vom Typ „Zeitplan: Wiederholung“ der den Bing Karten-Dienst in einem von Ihnen festgelegten Intervall überprüft
- Die Aktion Bing Maps - Get-Route (Bing Karten – Route ermitteln), die die Reisezeit zwischen zwei Standorten überprüft
- Eine Bedingungsaktion, die überprüft, ob die Reisezeit Ihre angegebene Reisezeit überschreitet
- Eine Aktion, die Ihnen eine E-Mail sendet, wenn die aktuelle Reisezeit Ihre angegebene Zeit überschreitet
Sie können Ihre Logik-App jederzeit speichern, machen Sie also häufig Gebrauch davon.
Melden Sie sich beim Azure-Portal an, falls Sie dies noch nicht getan haben. Erstellen einer leeren Logik-App
Fügen Sie den Auslöser Zeitplan – Wiederholung mit folgenden Einstellungen hinzu: Intervall = "1" und Häufigkeit = "Minute"
Tipp
Zum visuellen Vereinfachen der Ansicht und zum Ausblenden von Details der einzelnen Aktionen im Designer reduzieren Sie die Form jeder Aktion, während Sie diese Schritte nacheinander ausführen.
Fügen Sie die Aktion Bing Maps - Get route (Bing Karten– Route ermitteln) hinzu.
Falls noch keine Verbindung mit Bing Karten besteht, werden Sie aufgefordert, eine Verbindung herzustellen.
Einstellung Wert BESCHREIBUNG Verbindungsname BingMapsConnection Geben Sie einen Namen für die Verbindung an. API-Schlüssel <Ihr Bing Maps-Schlüssel> Geben Sie den Bing Maps-Schlüssel ein, den Sie zuvor abgerufen haben. Richten Sie die Aktion Route ermitteln wie in der Tabelle unter dieser Grafik gezeigt ein:
Weitere Informationen zu diesen Parametern finden Sie unter Calculate a route (Berechnen einer Route).
Einstellung Wert BESCHREIBUNG Wegpunkt 1 <Start> Geben Sie den Ausgangspunkt Ihrer Route ein. Wegpunkt 2 <Ende> Geben Sie das Ziel Ihrer Route ein. Vermeiden Keine Geben Sie Elemente ein, die auf der Route vermieden werden sollen, etwa Autobahnen, Mautgebühren usw. Mögliche Werte finden Sie im Artikel zum Berechnen einer Route. Optimieren timeWithTraffic Wählen Sie einen Parameter zur Optimierung der Route aus, z.B. Entfernung, Reisezeit basierend auf der aktuellen Verkehrslage, usw. In diesem Beispiel wird der „timeWithTraffic“ verwendet. Distance unit (Einheit für Entfernung) <Ihre Präferenz> Geben Sie die Einheit der Entfernung ein, um die Route zu berechnen. In diesem Beispiel wird folgender Wert verwendet: „Meile“ Travel mode (Reisemodus) Driving (Auto) Geben Sie das Fortbewegungsmittel für die Route ein. In diesem Beispiel wird „Driving“ (Auto) verwendet. Transit Date-Time (Datum und Uhrzeit für Transit) Keine Gilt für nur für den Transitmodus. Transit Date-Time Type (Typ für Datum und Uhrzeit für Transit) Keine Gilt für nur für den Transitmodus.
Fügen Sie eine Bedingung hinzu, die überprüft, ob die aktuelle Reisezeit mit Verkehr eine angegebene Zeit überschreitet. Führen Sie für dieses Beispiel die folgenden Schritte aus:
Benennen Sie die Bedingung wie folgt um: Wenn die Verkehrszeit die angegebene Zeit überschreitet
Klicken Sie in der linken Spalte ganz links in das Feld Wert auswählen, damit die Liste dynamischer Inhalte angezeigt wird. Wählen Sie in der Liste das Feld Travel Duration Traffic (Reisedauer (Verkehr)) aus, das in Sekunden angegeben wird.
Wählen Sie im mittleren Feld den folgenden Operator aus: ist größer als.
Geben Sie in der rechten Spalte diesen Vergleichswert ein, der in Sekunden angegeben ist und 10 Minuten entspricht: 600
Danach sieht Ihre Bedingung wie im folgenden Beispiel aus:
Fügen Sie im Branch True eine Aktion zum Senden einer E-Mail für Ihren E-Mail-Anbieter hinzu. Richten Sie diese Aktion ein, indem Sie den Schritten unter dieser Abbildung folgen:
Geben Sie im Feld An Ihre E-Mail-Adresse für Testzwecke an.
Geben Sie im Feld Betreff diesen Text ein:
Time to leave: Traffic more than 10 minutes
- Geben Sie im Feld Text diesen Text mit einem nachgestellten Leerzeichen ein:
Travel time:
Während der Cursor im Feld Text angezeigt wird, bleibt die Liste mit den dynamischen Inhalten geöffnet, damit Sie alle Parameter auswählen können, die an diesem Punkt verfügbar sind.
Wählen Sie in der Liste mit den dynamischen Inhalten die Option Ausdruck aus.
Suchen Sie die Funktion div() , und wählen Sie sie aus. Setzen Sie den Cursor zwischen die Klammern der Funktion.
Während sich der Cursor innerhalb der Klammern der befindet, wählen Sie Dynamischer Inhalt aus, damit die Liste dynamischer Inhalte angezeigt wird.
Wählen Sie im Abschnitt Route abrufen das Feld Traffic Duration Traffic (Reisedauer (Verkehr)) aus.
Nachdem das Feld in das JSON-Format aufgelöst wurde, fügen Sie ein Komma (
,
) gefolgt von der Zahl60
hinzu, damit Sie den Wert Traffic Duration Traffic (Reisedauer (Verkehr)) von Sekunden in Minuten umwandeln können.div(body('Get_route')?['travelDurationTraffic'],60)
Nun sieht Ihr Ausdruck wie in diesem Beispiel aus:
Wenn Sie fertig sind, wählen Sie OK.
Nachdem der Ausdruck aufgelöst wurde, fügen Sie diesen Text mit einem vorangestellten Leerzeichen hinzu:
minutes
Nun sieht Ihr Textfeld wie in diesem Beispiel aus:
Speichern Sie Ihre Logik-App.
Fügen Sie als nächstes einen Bereich hinzu, damit Sie bestimmte Aktionen gruppieren und ihren Status auswerten können.
Hinzufügen eines Bereichs
Öffnen Sie Ihre Logik-App im Logik-App-Designer, sofern Sie dies noch nicht getan haben.
Fügen im gewünschten Workflow-Speicherort einen Bereich hinzu. Um z. B. einen Bereich zwischen bestehenden Schritten im Workflow der Logik-App hinzuzufügen, führen Sie diese Schritte aus:
Bewegen Sie den Mauszeiger über den Pfeil, wo Sie den Bereich hinzufügen möchten. Wählen Sie das Pluszeichen (+) >Aktion hinzufügen aus.
Geben Sie im Suchfeld den Begriff „Bereich“ als Filter ein. Wählen Sie die Aktion Bereich aus.
Hinzufügen von Schritten zum Bereich
Fügen Sie jetzt die Schritte hinzu, oder ziehen Sie vorhandene Schritte, die Sie ausführen möchten, in den Bereich. Ziehen Sie für dieses Beispiel diese Aktionen in den Bereich:
- Get route (Route ermitteln)
- If traffic time is more than specified time (Wenn Verkehrszeit die angegebene Zeit überschreitet); enthält die beiden Branches true und false
Nun sieht Ihre Logik-App wie dieses Beispiel aus:
Fügen Sie unter dem Bereich eine Bedingung hinzu, die den Status des Bereichs prüft. Benennen Sie die Bedingung wie folgt um: Wenn im Bereich ein Fehler auftritt
Fügen Sie in der Bedingung diese Ausdrücke hinzu, die prüfen, ob der Status des Bereichs gleich „Fehler“ oder „Abgebrochen“ ist.
Wählen Sie Hinzufügen aus, um eine weitere Zeile hinzuzufügen.
Klicken Sie in den einzelnen Zeilen in das linke Feld, damit die Liste der dynamischen Inhalte angezeigt wird. Wählen Sie in der Liste mit den dynamischen Inhalten die Option Ausdruck aus. Geben Sie im Bearbeitungsfeld diesen Ausdruck ein, und wählen Sie dann OK aus:
action('Scope')
Wählen Sie für beide Zeilen ist gleich als Operator aus.
Geben Sie für die Vergleichswerte in der ersten Zeile
Failed
ein. Geben Sie in der zweiten ZeileAborted
ein.Danach sieht Ihre Bedingung wie im folgenden Beispiel aus:
Legen Sie jetzt die Eigenschaft
runAfter
der Bedingung so fest, dass die Bedingung den Bereichsstatus überprüft und die passende Aktion ausführt, die Sie in späteren Schritten definieren.Wählen Sie für die Bedingung If scope failed (Bei fehlerhaftem Bereich) die Schaltfläche mit den Auslassungspunkten (...) und dann Ausführung konfigurieren nach aus.
Wählen Sie alle genannten Bereichsstatus aus: is successful (ist erfolgreich), has failed (ist fehlerhaft), is skipped (wurde übersprungen) und has timed out (hat ein Timeout verursacht).
Klicken Sie auf Fertig, wenn Sie fertig sind. Die Bedingung zeigt jetzt ein „Informationssymbol“ an.
Fügen Sie in den Branches True und False die Aktionen hinzu, die Sie auf Basis der einzelnen Bereichsstatus ausführen möchten, z. B. das Senden einer E-Mail oder einer Nachricht.
Speichern Sie Ihre Logik-App.
Nun sieht Ihre fertige Logik-App wie dieses Beispiel aus:
Testen Ihrer Arbeit
Wählen Sie auf der Symbolleiste des Designers Ausführen>Ausführen aus. Wenn alle Aktionen im Bereich erfolgreich sind, erhalten Sie eine entsprechende Nachricht. Wenn Aktionen im Bereich nicht erfolgreich sind, erhalten Sie ebenfalls entsprechende Nachricht.
JSON-Definition
Wenn Sie in der Codeansicht arbeiten, können Sie stattdessen in der JSON-Definition Ihrer Logik-App eine Bereichsstruktur definieren. Hier sehen Sie z.B. die JSON-Definition für Auslöser und Aktionen in der vorherigen Logik-App:
"triggers": {
"Recurrence": {
"type": "Recurrence",
"recurrence": {
"frequency": "Minute",
"interval": 1
}
}
}
"actions": {
"If_scope_failed": {
"type": "If",
"actions": {
"Scope_failed": {
"type": "ApiConnection",
"inputs": {
"body": {
"Body": "Scope failed. Scope status: @{action('Scope')}",
"Subject": "Scope failed",
"To": "<your-email@domain.com>"
},
"host": {
"connection": {
"name": "@parameters('$connections')['outlook']['connectionId']"
}
},
"method": "post",
"path": "/Mail"
},
"runAfter": {}
}
},
"else": {
"actions": {
"Scope_succeeded": {
"type": "ApiConnection",
"inputs": {
"body": {
"Body": "Scope succeeded. Scope status: @{action('Scope')}",
"Subject": "Scope succeeded",
"To": "<your-email@domain.com>"
},
"host": {
"connection": {
"name": "@parameters('$connections')['outlook']['connectionId']"
}
},
"method": "post",
"path": "/Mail"
},
"runAfter": {}
}
}
},
"expression": {
"or": [
{
"equals": [
"@action('Scope')",
"Failed"
]
},
{
"equals": [
"@action('Scope')",
"Aborted"
]
}
]
},
"runAfter": {
"Scope": [
"Failed",
"Skipped",
"Succeeded",
"TimedOut"
]
}
},
"Scope": {
"type": "Scope",
"actions": {
"Get_route": {
"type": "ApiConnection",
"inputs": {
"host": {
"connection": {
"name": "@parameters('$connections')['bingmaps']['connectionId']"
}
},
"method": "get",
"path": "/REST/V1/Routes/Driving",
"queries": {
"distanceUnit": "Mile",
"optimize": "timeWithTraffic",
"travelMode": "Driving",
"wp.0": "<start>",
"wp.1": "<end>"
}
},
"runAfter": {}
},
"If_traffic_time_is_more_than_specified_time": {
"type": "If",
"actions": {
"Send_mail_when_traffic_exceeds_10_minutes": {
"type": "ApiConnection",
"inputs": {
"body": {
"Body": "Travel time:@{div(body('Get_route')?['travelDurationTraffic'],60)} minutes",
"Subject": "Time to leave: Traffic more than 10 minutes",
"To": "<your-email@domain.com>"
},
"host": {
"connection": {
"name": "@parameters('$connections')['outlook']['connectionId']"
}
},
"method": "post",
"path": "/Mail"
},
"runAfter": {}
}
},
"expression": {
"and" : [
{
"greater": [
"@body('Get_route')?['travelDurationTraffic']",
600
]
}
]
},
"runAfter": {
"Get_route": [
"Succeeded"
]
}
}
},
"runAfter": {}
}
},