Dela via


Köra åtgärder baserat på gruppstatus med hjälp av omfång i Azure Logic Apps

Gäller för: Azure Logic Apps (förbrukning)

Om du bara vill köra åtgärder efter att en annan åtgärdsgrupp har lyckats eller misslyckats grupperar du åtgärderna i ett omfång. Den här strukturen är användbar när du vill organisera åtgärder som en logisk grupp, utvärdera gruppens status och utföra åtgärder som baseras på omfångets status. När alla åtgärder i ett omfång har körts får omfånget också sin egen status. Du kan till exempel använda omfång när du vill implementera undantags- och felhantering.

Om du vill kontrollera statusen för ett omfång kan du använda samma villkor som du använder för att fastställa en logikapps körningsstatus, till exempel Lyckades, Misslyckades, Avbröts och så vidare. När alla omfångsåtgärder lyckas markeras omfångets status som Lyckades som standard. Men när någon åtgärd i omfånget misslyckas eller avbryts markeras omfångets status som Misslyckad. Begränsningar för omfång finns i Gränser och konfiguration.

Här är till exempel en logikapp på hög nivå som använder ett omfång för att köra specifika åtgärder och ett villkor för att kontrollera omfångets status. Om några åtgärder i omfånget misslyckas eller slutar oväntat markeras omfånget misslyckades respektive avbröts och logikappen skickar ett meddelande om att omfånget misslyckades. Om alla begränsade åtgärder lyckas skickar logikappen meddelandet "Omfånget lyckades".

Diagrammet visar logikappens omfångsflöde med exempel på

Förutsättningar

Om du vill följa exemplet i den här artikeln behöver du följande:

  • En Azure-prenumeration Om du inte har någon prenumeration kan du registrera ett kostnadsfritt Azure-konto.

  • Ett e-postkonto från alla e-postleverantörer som stöds av Logic Apps. I det här exemplet används Outlook.com. Om du använder en annan provider förblir det allmänna flödet detsamma, men användargränssnittet ser annorlunda ut.

  • En Bing Maps-nyckel. Information om hur du hämtar den här nyckeln finns i Hämta en Bing Maps-nyckel.

  • Grundläggande kunskaper om logikappar

Skapa exempellogikapp

Skapa först den här exempellogikappen så att du kan lägga till ett omfång senare:

Skapa exempellogikapp

  • Ett schema – upprepningsutlösare som kontrollerar Bing Maps-tjänsten med ett intervall som du anger
  • En Bing Maps – Hämta vägåtgärd som kontrollerar restiden mellan två platser
  • En villkorsåtgärd som kontrollerar om restiden överskrider din angivna restid
  • En åtgärd som skickar e-post till dig som den aktuella restiden överskrider den angivna tiden

Du kan spara logikappen när som helst, så spara ofta ditt arbete.

  1. Logga in på Azure-portalen om du inte redan har gjort det. Skapa en tom logikapp.

  2. Lägg till utlösaren Schema – upprepning med följande inställningar: Intervall = "1" och Frekvens = "Minut"

    Konfigurera utlösaren

    Dricks

    Om du vill förenkla vyn visuellt och dölja varje åtgärds information i designern döljer du varje åtgärds form under de här stegen.

  3. Lägg till åtgärden Bing Maps – Hämta väg.

    1. Om du inte redan har en Bing Maps-anslutning uppmanas du att skapa en anslutning.

      Inställning Värde beskrivning
      Anslutningsnamn BingMapsConnection Ange ett namn på anslutningen.
      API-nyckel <your-Bing-Maps-key> Ange Bing Maps-nyckeln som du fick tidigare.
    2. Konfigurera åtgärden Hämta väg enligt tabellen under den här bilden:

      Konfigurera åtgärden

      Mer information om dessa parametrar finns Calculate a route (Beräkna en resväg).

      Inställning Värde beskrivning
      Waypoint 1 (Platsmarkör 1) <start> Ange vägens ursprung.
      Waypoint 2 (Platsmarkör 2) <ände> Ange ruttens mål.
      Undvik Ingen Ange objekt som du vill undvika på din väg, till exempel motorvägar, vägtullar och så vidare. Möjliga värden finns i Beräkna en väg.
      Optimize (Optimera) timeWithTraffic Välj en parameter för att optimera din väg, till exempel avstånd, tid med aktuell trafikinformation och så vidare. I det här exemplet används det här värdet: "timeWithTraffic"
      Avståndsenhet <your-preference> Ange avståndethet för att beräkna din väg. Det här exemplet använder det här värdet: "Mile"
      Travel mode (Färdsätt) Driving (Bil) Ange färdläget för din väg. I det här exemplet används det här värdet "Driving" (Körning)
      Transit Date-Time (Tid/datum för kollektivtrafik) Ingen Gäller endast för överföringsläge.
      Typ av överföringsdatumtyp Ingen Gäller endast för överföringsläge.
  4. Lägg till ett villkor som kontrollerar om den aktuella restiden med trafik överskrider en angiven tid. I det här exemplet följer du dessa steg:

    1. Byt namn på villkoret med den här beskrivningen: Om trafiktiden är mer än den angivna tiden

    2. I kolumnen längst till vänster väljer du i rutan Välj ett värde så att listan med dynamiskt innehåll visas. I den listan väljer du fältet Resevaraktighetstrafik , som är i sekunder.

      Skapa villkor

    3. I mittenrutan väljer du den här operatorn: är större än

    4. I kolumnen längst till höger anger du det här jämförelsevärdet, som är i sekunder och motsvarar 10 minuter: 600

      När du är klar ser villkoret ut som i det här exemplet:

      Slutfört villkor

  5. I true-grenen lägger du till en "skicka e-post"-åtgärd för din e-postleverantör. Konfigurera den här åtgärden genom att följa stegen under den här bilden:

    Lägg till åtgärden

    1. I fältet Till anger du din e-postadress i testsyfte.

    2. I fältet Ämne anger du följande text:

    Time to leave: Traffic more than 10 minutes

    1. I fältet Brödtext anger du den här texten med ett avslutande blanksteg:

    Travel time:

    Markören visas i fältet Brödtext , men listan med dynamiskt innehåll förblir öppen så att du kan välja alla parametrar som är tillgängliga just nu.

    1. I listan med dynamiskt innehåll väljer du Uttryck.

    2. Leta upp och välj funktionen div(). Placera markören i funktionens parenteser.

    3. När markören finns inom funktionens parenteser väljer du Dynamiskt innehåll så att listan med dynamiskt innehåll visas.

    4. I avsnittet Hämta väg väljer du fältet Trafikvaraktighetstrafik .

      Välj

    5. När fältet har matchats till JSON-format lägger du till ett kommatecken (,) följt av talet 60 så att du konverterar värdet i Trafikvaraktighetstrafik från sekunder till minuter.

      div(body('Get_route')?['travelDurationTraffic'],60)
      

      Uttrycket ser nu ut som i det här exemplet:

      Slututtryck

    6. När du är klar väljer du OK.

    1. När uttrycket har lösts lägger du till den här texten med ett inledande blanksteg: minutes

      Fältet Brödtext ser nu ut så här:

      Fältet

  6. Spara logikappen.

Lägg sedan till ett omfång så att du kan gruppera specifika åtgärder och utvärdera deras status.

Lägg till omfång

  1. Om du inte redan har gjort det öppnar du logikappen i arbetsflödesdesignern.

  2. Lägg till ett omfång på den arbetsflödesplats som du vill ha. Om du till exempel vill lägga till ett omfång mellan befintliga steg i logikappens arbetsflöde följer du dessa steg:

    1. Flytta pekaren över pilen där du vill lägga till omfånget. Välj plustecknet (+) >Lägg till en åtgärd.

      Lägg till omfång

    2. I sökrutan anger du "omfång" som filter. Välj åtgärden Omfång .

Lägga till steg i omfånget

  1. Lägg nu till stegen eller dra befintliga steg som du vill köra i omfånget. I det här exemplet drar du dessa åtgärder till omfånget:

    • Hämta väg
    • Om trafiktiden är mer än den angivna tiden, vilket omfattar både sanna och falska grenar

    Logikappen ser nu ut så här:

    Omfång har lagts till

  2. Under omfånget lägger du till ett villkor som kontrollerar omfångets status. Byt namn på villkoret med den här beskrivningen: Om omfånget misslyckades

    Lägg till villkor för att kontrollera omfångsstatus

  3. I villkoret lägger du till de här uttrycken som kontrollerar om omfångets status är lika med "Misslyckades" eller "Avbröts".

    1. Om du vill lägga till ytterligare en rad väljer du Lägg till.

    2. I varje rad väljer du i den vänstra rutan så att listan med dynamiskt innehåll visas. I listan med dynamiskt innehåll väljer du Uttryck. I redigeringsrutan anger du det här uttrycket och väljer sedan OK:

      action('Scope')

      Skärmbild som visar rutan

    3. För båda raderna är valet lika med som operatorn.

    4. För jämförelsevärdena anger du Failedpå den första raden . På den andra raden anger du Aborted.

      När du är klar ser villkoret ut som i det här exemplet:

      Lägg till uttryck som kontrollerar omfångets status

      Ange nu villkorets runAfter egenskap så att villkoret kontrollerar omfångsstatusen och kör den matchande åtgärd som du definierar i senare steg.

    5. I villkoret Om omfånget misslyckades väljer du ellipsknappen (...) och väljer sedan Konfigurera körning efter.

      Konfigurera egenskapen runAfter

    6. Markera alla dessa omfångsstatusar: lyckas, har misslyckats, hoppas över och har överskridit tidsgränsen

      Välj omfångsstatusar

    7. När du är klar väljer du Klar. Villkoret visar nu en "informationsikon".

  4. I grenarna Sant och Falskt lägger du till de åtgärder som du vill utföra baserat på varje omfångsstatus, till exempel skicka ett e-postmeddelande eller ett meddelande.

    Lägga till åtgärder som ska utföras baserat på omfångsstatus

  5. Spara logikappen.

Den färdiga logikappen ser nu ut så här:

Logikappen har slutförts med omfång

Testa ditt arbete

Välj Kör>kör i designerverktygsfältet. Om alla begränsade åtgärder lyckas får du meddelandet "Omfånget lyckades". Om några begränsade åtgärder inte lyckas visas meddelandet "Omfånget misslyckades".

JSON-definition

Om du arbetar i kodvyn kan du definiera en omfångsstruktur i logikappens JSON-definition i stället. Här är till exempel JSON-definitionen för utlösare och åtgärder i föregående logikapp:

"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": {}
  }
},

Nästa steg