Spouštění akcí na základě stavu skupiny pomocí oborů v Azure Logic Apps

Platí pro: Azure Logic Apps (Consumption)

Pokud chcete spustit akce pouze po úspěšném nebo neúspěšné jiné skupině akcí, seskupte tyto akce v rámci oboru. Tato struktura je užitečná, když chcete uspořádat akce jako logickou skupinu, vyhodnotit stav dané skupiny a provádět akce založené na stavu oboru. Jakmile se všechny akce v oboru dokončí, získá také svůj vlastní stav. Obory můžete použít například v případě, že chcete implementovat zpracování výjimek a chyb.

Ke kontrole stavu oboru můžete použít stejná kritéria, která používáte k určení stavu spuštění aplikace logiky, jako je Úspěch, Selhání, Zrušeno atd. Pokud jsou všechny akce oboru úspěšné, stav oboru se ve výchozím nastavení označí jako Úspěch. Pokud ale jakákoli akce v oboru selže nebo se zruší, stav oboru se označí jako Neúspěšný. Omezení oborů najdete v tématu Omezení a konfigurace.

Tady je například aplikace logiky vysoké úrovně, která používá obor ke spuštění konkrétních akcí a podmínky ke kontrole stavu oboru. Pokud některé akce v oboru selžou nebo skončí neočekávaně, obor se označí jako neúspěšný nebo přerušený a aplikace logiky odešle zprávu o selhání oboru. Pokud jsou všechny akce s vymezeným oborem úspěšné, aplikace logiky odešle zprávu "Rozsah byl úspěšný".

Diagram shows the logic app scope flow with examples of

Požadavky

Pokud chcete postupovat podle příkladu v tomto článku, potřebujete tyto položky:

  • Předplatné Azure. Pokud předplatné nemáte, zaregistrujte si bezplatný účet Azure.

  • E-mailový účet od libovolného poskytovatele e-mailu, který služba Logic Apps podporuje. Tento příklad používá Outlook.com. Pokud používáte jiného poskytovatele, obecný tok zůstane stejný, ale uživatelské rozhraní se zobrazí jinak.

  • Klíč Mapy Bingu. Pokud chcete získat tento klíč, přečtěte si téma Získání klíče Mapy Bingem.

  • Základní znalosti o aplikacích logiky

Vytvoření ukázkové aplikace logiky

Nejprve vytvořte tuto ukázkovou aplikaci logiky, abyste mohli později přidat obor:

Create sample logic app

  • Plán – trigger opakování, který kontroluje službu Bingu Mapy v zadaném intervalu
  • Mapy Bingu – Získání akce trasy, která kontroluje dobu cesty mezi dvěma umístěními
  • Akce podmínky, která kontroluje, jestli doba trvání cesty překračuje zadaný čas cesty
  • Akce, která vám pošle e-mail s aktuálním časem cesty, překračuje zadaný čas.

Aplikaci logiky můžete kdykoli uložit, takže si práci často uložte.

  1. Pokud jste to ještě neudělali, přihlaste se k webu Azure Portal. Vytvoření prázdné aplikace logiky

  2. Přidejte trigger Plán – Opakování s těmito nastaveními: Interval = "1" a Frekvence = "Minuta"

    Set up

    Tip

    Pokud chcete vizuálně zjednodušit zobrazení a skrýt podrobnosti jednotlivých akcí v návrháři, sbalte při procházení těmito kroky obrazec jednotlivých akcí.

  3. Přidejte Mapy Bingu – získání akce trasy.

    1. Pokud ještě nemáte připojení Bingu Mapy, zobrazí se výzva k vytvoření připojení.

      Nastavení Hodnota Popis
      Název připojení PřipojeníMapyBing Zadejte název připojení.
      Klíč API <klíč-služby-Mapy-Bing> Zadejte klíč Map Bing, který jste dříve dostali.
    2. Nastavte akci Získat trasu , jak je znázorněno v tabulce pod tímto obrázkem:

      Set up

      Další informace o těchto parametrech najdete v tématu Výpočet trasy.

      Nastavení Hodnota Popis
      Bod na trase 1 <start> Zadejte původ trasy.
      Bod na trase 2 <Konec> Zadejte cíl trasy.
      Vyhnutí se Nic Zadejte položky, kterým se chcete vyhnout na trase, jako jsou dálnice, placené poplatky atd. Možné hodnoty najdete v tématu Výpočet trasy.
      Optimalizovat timeWithTraffic Vyberte parametr pro optimalizaci trasy, jako je vzdálenost, čas s aktuálními informacemi o provozu atd. Tento příklad používá tuto hodnotu: timeWithTraffic.
      Jednotka vzdálenosti <vaše-volba> Zadejte jednotku vzdálenosti pro výpočet trasy. V tomto příkladu se používá tato hodnota: "Mile"
      Způsob cestování Autem Přejděte do režimu cesty pro vaši trasu. V tomto příkladu se používá tato hodnota "Řízení"
      Datum a čas přejezdu Nic Platí jenom pro režim přenosu.
      Typ data přenosu Nic Platí jenom pro režim přenosu.
  4. Přidejte podmínku , která kontroluje, jestli aktuální čas cesty s provozem překračuje zadaný čas. V tomto příkladu postupujte takto:

    1. Přejmenujte podmínku s tímto popisem: Pokud je doba provozu delší než zadaný čas.

    2. Ve sloupci úplně vlevo klikněte do pole Zvolit hodnotu , aby se zobrazil seznam dynamického obsahu. V seznamu vyberte pole Doba trvání cesty, které je v sekundách.

      Build condition

    3. V prostředním poli vyberte tento operátor: je větší než

    4. Do sloupce úplně vpravo zadejte tuto porovnávací hodnotu, která je v sekundách a odpovídá 10 minutě: 600.

      Jakmile budete hotovi, vaše podmínka bude vypadat jako v tomto příkladu:

      Finished condition

  5. Ve větvi If true přidejte akci "Odeslat e-mail" pro svého poskytovatele e-mailu. Tuto akci nastavte podle kroků pod tímto obrázkem:

    Add

    1. Do pole To zadejte svoji e-mailovou adresu pro účely testování.

    2. Do pole Předmět zadejte tento text:

    Time to leave: Traffic more than 10 minutes

    1. Do pole Text zadejte tento text s koncovou mezerou:

    Travel time:

    Když se kurzor zobrazí v poli Text , zůstane seznam dynamického obsahu otevřený, takže můžete vybrat všechny parametry, které jsou v tomto okamžiku k dispozici.

    1. V seznamu dynamického obsahu vyberte Výraz.

    2. Vyhledejte a vyberte funkci div(). Umístěte kurzor do závorek funkce.

    3. I když je kurzor uvnitř závorek funkce, zvolte dynamický obsah , aby se zobrazil seznam dynamického obsahu.

    4. V části Získat trasu vyberte pole Provoz doby trvání provozu.

      Select

    5. Po překladu pole do formátu JSON přidejte čárku (,) následovanou číslem60, abyste převedli hodnotu v provozu doby trvání provozu z sekund na minuty.

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

      Výraz teď vypadá jako v tomto příkladu:

      Finish expression

    6. Až budete hotovi, zvolte OK.

    1. Po vyřešení výrazu přidejte tento text s úvodní mezerou: minutes

      Pole Text teď vypadá jako v tomto příkladu:

      Finished

  6. Uložte aplikaci logiky.

Dále přidejte obor, abyste mohli seskupit konkrétní akce a vyhodnotit jejich stav.

Přidat obor

  1. Pokud jste to ještě neudělali, otevřete aplikaci logiky v Návrháři aplikací logiky.

  2. Přidejte obor do požadovaného umístění pracovního postupu. Pokud chcete například přidat obor mezi existující kroky v pracovním postupu aplikace logiky, postupujte takto:

    1. Přesuňte ukazatel myši na šipku, kam chcete přidat obor. Zvolte znaménko plus (+)> Přidat akci.

      Add a scope

    2. Do vyhledávacího pole zadejte jako filtr "scope" (obor). Vyberte akci Rozsah.

Přidání kroků do oboru

  1. Teď přidejte kroky nebo přetáhněte existující kroky, které chcete spustit uvnitř oboru. V tomto příkladu přetáhněte tyto akce do oboru:

    • Získání trasy
    • Pokud je doba provozu delší než zadaná doba, která zahrnuje větve true i false .

    Vaše aplikace logiky teď vypadá jako v tomto příkladu:

    Scope added

  2. Pod obor přidejte podmínku, která kontroluje stav oboru. Přejmenujte podmínku s tímto popisem: Pokud došlo k chybě oboru

    Add condition to check scope status

  3. V podmínce přidejte tyto výrazy, které kontrolují, jestli je stav oboru roven "Failed" nebo "Přerušeno".

    1. Pokud chcete přidat další řádek, zvolte Přidat.

    2. V každém řádku klikněte do levého pole, aby se zobrazil seznam dynamického obsahu. V seznamu dynamického obsahu zvolte Výraz. Do textového pole zadejte tento výraz a pak zvolte OK:

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

      Screenshot that shows the

    3. U obou řádků je výběr roven operátoru.

    4. Pro porovnávací hodnoty zadejte v prvním řádku Failed. Do druhého řádku zadejte Aborted.

      Jakmile budete hotovi, vaše podmínka bude vypadat jako v tomto příkladu:

      Add expression that checks the scope's status

      Nyní nastavte vlastnost podmínky runAfter tak, aby podmínka kontroluje stav oboru a spustí odpovídající akci, kterou definujete v pozdějších krocích.

    5. V podmínce Pokud došlo k selhání oboru, zvolte tlačítko se třemi tečkou (...) a potom zvolte Konfigurovat spuštění po.

      Configure runAfter property

    6. Vyberte všechny tyto stavy rozsahu: je úspěšný, selhal, byl vynechán a vypršel časový limit.

      Select scope statuses

    7. Jakmile budete hotovi, zvolte Done (Hotovo). Podmínka teď zobrazuje ikonu informace.

  4. Do větví If true a If false přidejte akce, které chcete provést na základě jednotlivých stavů oboru, například odeslat e-mail nebo zprávu.

    Add actions to take based on scope status

  5. Uložte aplikaci logiky.

Hotová aplikace logiky teď vypadá jako v tomto příkladu:

Finished logic app with scope

Otestování práce

Na panelu nástrojů návrháře zvolte Spustit. Pokud jsou všechny akce s vymezeným oborem úspěšné, zobrazí se zpráva "Rozsah byl úspěšný". Pokud některé akce s vymezeným oborem nebudou úspěšné, zobrazí se zpráva , že došlo k chybě oboru.

Definice JSON

Pokud pracujete v zobrazení kódu, můžete místo toho definovat strukturu oboru v definici JSON vaší aplikace logiky. Tady je například definice JSON pro trigger a akce v předchozí aplikaci logiky:

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

Technická podpora

Další kroky