Acties uitvoeren op basis van groepsstatus met behulp van bereiken in Azure Logic Apps
Van toepassing op: Azure Logic Apps (verbruik)
Als u acties alleen wilt uitvoeren nadat een andere groep acties is geslaagd of mislukt, groepeer u deze acties binnen een bereik. Deze structuur is handig als u acties wilt ordenen als een logische groep, de status van die groep wilt evalueren en acties wilt uitvoeren die zijn gebaseerd op de status van het bereik. Nadat alle acties in een bereik zijn uitgevoerd, krijgt het bereik ook de eigen status. U kunt bijvoorbeeld bereiken gebruiken wanneer u uitzonderings- en foutafhandeling wilt implementeren.
Als u de status van een bereik wilt controleren, kunt u dezelfde criteria gebruiken die u gebruikt om de uitvoeringsstatus van een logische apps te bepalen, zoals Geslaagd, Mislukt, Geannuleerd, enzovoort. Wanneer alle acties van het bereik slagen, wordt de status van het bereik standaard gemarkeerd als Geslaagd. Maar wanneer een actie in het bereik mislukt of wordt geannuleerd, wordt de status van het bereik gemarkeerd als Mislukt. Zie Limieten en configuratie voor limieten voor bereiken.
Hier is bijvoorbeeld een logische app op hoog niveau die gebruikmaakt van een bereik om specifieke acties en een voorwaarde uit te voeren om de status van het bereik te controleren. Als acties in het bereik onverwacht mislukken of eindigen, wordt het bereik respectievelijk Mislukt of Afgebroken gemarkeerd en verzendt de logische app een bericht 'Bereik mislukt'. Als alle acties binnen het bereik slagen, verzendt de logische app een bericht 'Bereik geslaagd'.
Vereisten
Als u het voorbeeld in dit artikel wilt volgen, hebt u deze items nodig:
Een Azure-abonnement. Als u nog geen abonnement hebt, meld u dan aan voor een gratis Azure-account.
Een e-mailaccount van elke e-mailprovider die wordt ondersteund door Logic Apps. In dit voorbeeld wordt Outlook.com gebruikt. Als u een andere provider gebruikt, blijft de algemene stroom hetzelfde, maar wordt uw gebruikersinterface anders weergegeven.
Een Bing Kaarten-sleutel. Zie Een Bing Kaarten-sleutel ophalen om deze sleutel op te halen.
Basiskennis over logische apps
Voorbeeld van een logische app maken
Maak eerst deze voorbeeldlogica-app, zodat u later een bereik kunt toevoegen:
- Een schema - Terugkeerpatroontrigger die de Bing Kaarten-service controleert met een interval dat u opgeeft
- Een Bing Kaarten - Routeactie ophalen waarmee de reistijd tussen twee locaties wordt gecontroleerd
- Een voorwaardeactie waarmee wordt gecontroleerd of de reistijd de opgegeven reistijd overschrijdt
- Een actie waarmee u een e-mailbericht ontvangt dat de huidige reistijd de opgegeven tijd overschrijdt
U kunt uw logische app op elk gewenst moment opslaan, dus sla uw werk vaak op.
Meld u aan bij Azure Portal als u dat nog niet hebt gedaan. Een lege, logische app maken.
Voeg de schema- terugkeertrigger toe met deze instellingen: Interval = "1" en Frequency = "Minuut"
Tip
Als u de weergave visueel wilt vereenvoudigen en de details van elke actie in de ontwerpfunctie wilt verbergen, vouwt u de shape van elke actie samen terwijl u door deze stappen gaat.
Voeg de actie Bing Kaarten - Route ophalen toe.
Als u nog geen Verbinding met Bing Kaarten hebt, wordt u gevraagd een verbinding te maken.
Instelling Weergegeven als Beschrijving Naam verbinding BingMapsConnection Geef een naam op voor uw verbinding. API-sleutel <your-Bing-Maps-key> Voer de sleutel voor Bing Kaarten in die u eerder hebt ontvangen. Stel de routeactie Ophalen in, zoals wordt weergegeven in de tabel onder deze afbeelding:
Zie Een route berekenen voor meer informatie over deze parameters.
Instelling Weergegeven als Beschrijving Routepunt 1 <start> Voer de oorsprong van uw route in. Routepunt 2 <einde> Voer de bestemming van uw route in. Vermijden Geen Voer items in om te vermijden op uw route, zoals snelwegen, tolgelden, enzovoort. Zie Een route berekenen voor mogelijke waarden. Optimaliseren timeWithTraffic Selecteer een parameter om uw route te optimaliseren, zoals afstand, tijd met actuele verkeersinformatie, enzovoort. In dit voorbeeld wordt deze waarde gebruikt: "timeWithTraffic" Afstandseenheid <your-preference> Voer de afstandseenheid in om uw route te berekenen. In dit voorbeeld wordt deze waarde gebruikt: 'Mijl' Vervoermiddel Autorijden Voer de reismodus voor uw route in. In dit voorbeeld wordt deze waarde 'Rijden' gebruikt Datum/tijd openbaar vervoer Geen Alleen van toepassing op de transitmodus. Type transitdatum Geen Alleen van toepassing op de transitmodus.
Voeg een voorwaarde toe waarmee wordt gecontroleerd of de huidige reistijd met verkeer een opgegeven tijd overschrijdt. Voer voor dit voorbeeld de volgende stappen uit:
Wijzig de naam van de voorwaarde met deze beschrijving: Als de verkeerstijd groter is dan de opgegeven tijd
Selecteer in de meest linkse kolom het vak Een waarde kiezen, zodat de lijst met dynamische inhoud wordt weergegeven. Selecteer in die lijst het veld Reisduurverkeer , dat binnen enkele seconden is.
Selecteer in het middelste vak deze operator: groter dan
Voer in de meest rechtse kolom deze vergelijkingswaarde in, die in seconden is en gelijk is aan 10 minuten: 600
Wanneer u klaar bent, ziet de voorwaarde eruit zoals in dit voorbeeld:
Voeg in de vertakking Waar een actie 'e-mail verzenden' toe voor uw e-mailprovider. Stel deze actie in door de stappen onder deze afbeelding te volgen:
Voer in het veld Aan uw e-mailadres in voor testdoeleinden.
Voer in het veld Onderwerp deze tekst in:
Time to leave: Traffic more than 10 minutes
- Voer in het veld Hoofdtekst deze tekst in met een volgruimte:
Travel time:
Terwijl de cursor wordt weergegeven in het veld Hoofdtekst , blijft de lijst met dynamische inhoud geopend, zodat u op dit moment parameters kunt selecteren die beschikbaar zijn.
Selecteer in de lijst met dynamische inhoud de optie Expressie.
Zoek en selecteer de div() -functie. Plaats de cursor tussen de haakjes van de functie.
Terwijl de cursor zich tussen de haakjes van de functie bevindt, selecteert u Dynamische inhoud , zodat de lijst met dynamische inhoud wordt weergegeven.
Selecteer in de sectie Route ophalen het veld Verkeersduur.
Nadat het veld is omgezet in JSON-indeling, voegt u een komma (
,
) toe gevolgd door het getal60
, zodat u de waarde in verkeersduurverkeer van seconden naar minuten converteert.div(body('Get_route')?['travelDurationTraffic'],60)
Uw expressie ziet er nu als volgt uit:
Als u gereed bent, selecteert u OK.
Nadat de expressie is omgezet, voegt u deze tekst toe met een voorloopspatie:
minutes
Het veld Hoofdtekst ziet er nu als volgt uit:
Sla uw logische app op.
Voeg vervolgens een bereik toe, zodat u specifieke acties kunt groeperen en hun status kunt evalueren.
Een bereik toevoegen
Als u dat nog niet hebt gedaan, opent u uw logische app in de werkstroomontwerper.
Voeg een bereik toe op de gewenste werkstroomlocatie. Als u bijvoorbeeld een bereik wilt toevoegen tussen bestaande stappen in de werkstroom van de logische app, voert u de volgende stappen uit:
Verplaats de aanwijzer over de pijl waar u het bereik wilt toevoegen. Selecteer het plusteken (+) >Een actie toevoegen.
Voer in het zoekvak 'bereik' in als uw filter. Selecteer de actie Bereik .
Stappen toevoegen aan bereik
Voeg nu de stappen toe of sleep bestaande stappen die u binnen het bereik wilt uitvoeren. Voor dit voorbeeld sleept u deze acties naar het bereik:
- Route ophalen
- Als de verkeerstijd langer is dan de opgegeven tijd, die zowel de werkelijke als de onwaar-vertakkingen bevat
Uw logische app ziet er nu als volgt uit:
Voeg onder het bereik een voorwaarde toe waarmee de status van het bereik wordt gecontroleerd. Wijzig de naam van de voorwaarde met deze beschrijving: Als het bereik is mislukt
Voeg in de voorwaarde deze expressies toe die controleren of de status van het bereik gelijk is aan Mislukt of Afgebroken.
Als u nog een rij wilt toevoegen, selecteert u Toevoegen.
Selecteer in elke rij in het linkervak, zodat de lijst met dynamische inhoud wordt weergegeven. Selecteer Expressie in de lijst met dynamische inhoud. Voer deze expressie in het invoervak in en selecteer VERVOLGENS OK:
action('Scope')
Voor beide rijen is de selectie gelijk aan als de operator.
Voer voor de vergelijkingswaarden in de eerste rij het volgende in
Failed
. Voer in de tweede rij het volgende inAborted
.Wanneer u klaar bent, ziet de voorwaarde eruit zoals in dit voorbeeld:
Stel nu de eigenschap van
runAfter
de voorwaarde in, zodat de voorwaarde de bereikstatus controleert en de overeenkomende actie uitvoert die u in latere stappen definieert.Selecteer in de voorwaarde Als het bereik is mislukt de knop met het beletselteken (...) en selecteer vervolgens Uitvoeren configureren na.
Selecteer al deze bereikstatussen: is geslaagd, is mislukt, wordt overgeslagen en er is een time-out opgetreden
Wanneer u klaar bent, selecteert u Gereed. De voorwaarde toont nu een pictogram 'informatie'.
Voeg in de vertakkingen Waar en Onwaar de acties toe die u wilt uitvoeren op basis van elke bereikstatus, bijvoorbeeld een e-mailbericht of bericht verzenden.
Sla uw logische app op.
Uw voltooide logische app ziet er nu als volgt uit:
Uw werk testen
Selecteer Uitvoeren uitvoeren> op de werkbalk van de ontwerpfunctie. Als alle acties binnen het bereik zijn geslaagd, krijgt u het bericht Bereik voltooid. Als een bereik van acties niet slaagt, krijgt u het bericht Bereik is mislukt.
JSON-definitie
Als u in de codeweergave werkt, kunt u in plaats daarvan een bereikstructuur definiƫren in de JSON-definitie van uw logische app. Hier volgt bijvoorbeeld de JSON-definitie voor trigger en acties in de vorige logische 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_succeded": {
"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": {}
}
},