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

Diagram shows the logic app scope flow with examples of

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-Kartor nyckel. Information om hur du hämtar den här nyckeln finns i Hämta en Kartor nyckel i Bing.

  • 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:

Create sample logic app

  • Ett schema – upprepningsutlösare som kontrollerar tjänsten Bing Kartor med ett intervall som du anger
  • En Bing-Kartor – 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"

    Set up

    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 Kartor – Hämta väg.

    1. Om du inte redan har en Bing-Kartor-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:

      Set up

      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) <Slutet> 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 klickar 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.

      Build condition

    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:

      Finished condition

  5. I grenen Om sant 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:

    Add

    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. Välj Expression (Uttryck) i listan med dynamiskt innehåll.

    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 .

      Select

    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:

      Finish expression

    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:

      Finished

  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 Logic App Designer.

  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.

      Add a scope

    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:

    Scope added

  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

    Add condition to check scope status

  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 klickar 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:

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

      Screenshot that shows the

    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:

      Add expression that checks the scope's 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ör efter.

      Configure runAfter property

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

      Select scope statuses

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

  4. I grenarna Om sant och Om 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.

    Add actions to take based on scope status

  5. Spara logikappen.

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

Finished logic app with scope

Testa ditt arbete

Välj 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: @{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": {}
  }
},

Få support

Nästa steg