Sdílet prostřednictvím


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 znázorňuje tok oboru aplikace logiky s příklady Selhání oboru a Rozsah byl úspěšný.

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íč Map Bing. Pokud chcete získat tento klíč, přečtěte si téma Získání klíče Map Bing.

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

Vytvoření ukázkové aplikace logiky

  • Plán – trigger opakování , který kontroluje službu Mapy Bing v zadaném intervalu
  • Mapy Bing – 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"

    Nastavení triggeru Plán – Opakování

    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 Bing – Získání akce trasy.

    1. Pokud ještě nemáte připojení k Mapám Bing, 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:

      Nastavení akce Mapy Bing – Získání trasy

      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 vyberte v poli Zvolit hodnotu , aby se zobrazil seznam dynamického obsahu. V seznamu vyberte pole Doba trvání cesty, které je v sekundách.

      Vytvoření podmínky

    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:

      Dokončená podmínka

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

    Přidání akce Odeslat e-mail do větve True

    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. Když je kurzor uvnitř závorek funkce, vyberte dynamický obsah , aby se zobrazil seznam dynamického obsahu.

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

      Vyberte Traffic Duration Traffic (Provoz doby trvání provozu).

    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:

      Výraz Dokončení

    6. Jakmile budete hotovi, vyberte tlačítko 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:

      Pole Text dokončeno

  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 pracovního postupu.

  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. Vyberte znaménko plus (+)> Přidat akci.

      Přidat obor

    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:

    Přidaný obor

  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

    Přidání podmínky pro kontrolu stavu oboru

  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, vyberte Přidat.

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

      action('Scope')

      Snímek obrazovky znázorňující pole Výraz se zvýrazněným výrazem výsledku

    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:

      Přidání výrazu, který kontroluje stav oboru

      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 chybě oboru, vyberte tlačítko se třemi tečkou (...) a pak vyberte Konfigurovat spuštění po.

      Konfigurace vlastnosti runAfter

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

      Výběr stavů oboru

    7. Jakmile budete hotovi, vyberte Hotovo. Podmínka teď zobrazuje ikonu informace.

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

    Přidání akcí k provedení na základě stavu oboru

  5. Uložte aplikaci logiky.

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

Dokončená aplikace logiky s oborem

Otestování práce

Na panelu nástrojů návrháře vyberte 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: @{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": {}
  }
},

Další kroky