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'.

Diagram shows the logic app scope flow with examples of

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:

Create sample logic app

  • Een schema- terugkeertrigger die de Bing Kaarten-service controleert met een interval dat u opgeeft
  • Een Bing Kaarten - Routeactie ophalen die de reistijd tussen twee locaties controleert
  • 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.

  1. Meld u aan bij Azure Portal als u dat nog niet hebt gedaan. Een lege, logische app maken.

  2. Voeg de schema- terugkeertrigger toe met deze instellingen: Interval = "1" en Frequency = "Minuut"

    Set up

    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.

  3. Voeg de Bing Kaarten - Routeactie ophalen toe.

    1. 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.
    2. Stel de routeactie Ophalen in, zoals wordt weergegeven in de tabel onder deze afbeelding:

      Set up

      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.
  4. 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:

    1. Wijzig de naam van de voorwaarde met deze beschrijving: Als de verkeerstijd groter is dan de opgegeven tijd

    2. Klik in de meest linkse kolom in 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.

      Build condition

    3. Selecteer in het middelste vak deze operator: groter dan

    4. 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:

      Finished condition

  5. Voeg in de if true-vertakking een actie 'e-mail verzenden' toe voor uw e-mailprovider. Stel deze actie in door de stappen onder deze afbeelding te volgen:

    Add

    1. Voer in het veld Aan uw e-mailadres in voor testdoeleinden.

    2. Voer in het veld Onderwerp deze tekst in:

    Time to leave: Traffic more than 10 minutes

    1. 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.

    1. Kies in de lijst met dynamische inhoud voor Expressie.

    2. Zoek en selecteer de div() -functie. Plaats de cursor tussen de haakjes van de functie.

    3. Terwijl de cursor zich tussen de haakjes van de functie bevindt, kiest u Dynamische inhoud , zodat de lijst met dynamische inhoud wordt weergegeven.

    4. Selecteer in de sectie Route ophalen het veld Verkeersduur.

      Select

    5. Nadat het veld is omgezet in JSON-indeling, voegt u een komma (,) toe gevolgd door het getal 60 , 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:

      Finish expression

    6. Als u klaar bent, kiest u Done.

    1. Nadat de expressie is omgezet, voegt u deze tekst toe met een voorloopspatie: minutes

      Het veld Hoofdtekst ziet er nu als volgt uit:

      Finished

  6. Sla uw logische app op.

Voeg vervolgens een bereik toe, zodat u specifieke acties kunt groeperen en hun status kunt evalueren.

Een bereik toevoegen

  1. Als u dat nog niet hebt gedaan, opent u uw logische app in Logic App Designer.

  2. 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:

    1. Verplaats de aanwijzer over de pijl waar u het bereik wilt toevoegen. Kies het plusteken (+) >Een actie toevoegen.

      Add a scope

    2. Voer in het zoekvak 'bereik' in als uw filter. Selecteer de actie Bereik .

Stappen toevoegen aan bereik

  1. 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:

    Scope added

  2. 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

    Add condition to check scope status

  3. Voeg in de voorwaarde deze expressies toe die controleren of de status van het bereik gelijk is aan Mislukt of Afgebroken.

    1. Als u nog een rij wilt toevoegen, kiest u Toevoegen.

    2. Klik in elke rij in het linkervak, zodat de lijst met dynamische inhoud wordt weergegeven. Kies Expressie in de lijst met dynamische inhoud. Voer deze expressie in het invoervak in en kies VERVOLGENS OK:

      result('Scope')[0]['status']

      Screenshot that shows the

    3. Voor beide rijen is de selectie gelijk aan als de operator.

    4. Voer voor de vergelijkingswaarden in de eerste rij het volgende in Failed. Voer in de tweede rij het volgende in Aborted.

      Wanneer u klaar bent, ziet de voorwaarde eruit zoals in dit voorbeeld:

      Add expression that checks the scope's status

      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.

    5. Kies in de voorwaarde Als het bereik is mislukt de knop met het beletselteken (...) en kies Vervolgens Uitvoeren configureren na.

      Configure runAfter property

    6. Selecteer al deze bereikstatussen: is geslaagd, is mislukt, wordt overgeslagen en er is een time-out opgetreden

      Select scope statuses

    7. Wanneer u klaar bent, kiest u Gereed. De voorwaarde toont nu een pictogram 'informatie'.

  4. Voeg in de if true - en if false-vertakkingen de acties toe die u wilt uitvoeren op basis van elke bereikstatus, bijvoorbeeld een e-mailbericht of bericht verzenden.

    Add actions to take based on scope status

  5. Sla uw logische app op.

Uw voltooide logische app ziet er nu als volgt uit:

Finished logic app with scope

Uw werk testen

Kies 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: @{result('Scope')[0]['status']}",
            "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: @{result('Scope')[0]['status']}",
              "Subject": "Scope succeeded",
              "To": "<your-email@domain.com>"
            },
            "host": {
              "connection": {
               "name": "@parameters('$connections')['outlook']['connectionId']"
              }
            },
            "method": "post",
            "path": "/Mail"
          },
          "runAfter": {}
        }
      }
    },
    "expression": {
      "or": [ 
         {
            "equals": [ 
              "@result('Scope')[0]['status']", 
              "Failed"
            ]
         },
         {
            "equals": [
               "@result('Scope')[0]['status']", 
               "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": {}
  }
},

Support krijgen

Volgende stappen