Vytváření smyček pro opakování akcí v pracovních postupech pomocí Azure Logic Apps

Platí pro: Azure Logic Apps (Consumption + Standard)

Azure Logic Apps obsahuje následující akce smyčky, které můžete použít ve svém pracovním postupu:

  • Pokud chcete opakovat jednu nebo více akcí u položek v poli, přidejte do pracovního postupu jednotlivé akce.

    Případně pokud máte aktivační událost, která přijímá pole a chcete spustit iteraci pro každou položku pole, můžete toto pole debatovat s SplitOn trigger vlastnost.

  • Pokud chcete opakovat jednu nebo více akcí, dokud se podmínka nesplní nebo změní stav, přidejte do pracovního postupu akci Dokud.

    Váš pracovní postup nejprve spustí všechny akce uvnitř smyčky a pak zkontroluje podmínku nebo stav. Pokud je podmínka splněná, smyčka se zastaví. V opačném případě se smyčka opakuje. Výchozí a maximální omezení počtu smyček Until , které může mít pracovní postup, najdete v tématu Omezení souběžnosti, smyček a debat.

Požadavky

Pro každou

Akce Pro každou akci funguje pouze na polích a opakuje jednu nebo více akcí u každé položky v poli. Následující seznam obsahuje některé důležité informace o tom, kdy chcete pro každou akci použít:

  • Pro každou akci může zpracovat omezený počet položek pole. Informace o tomto limitu najdete v tématu Omezení souběžnosti, smyčky a debaty.

  • Ve výchozím nastavení se cykly nebo iterace v každé akci spouští paralelně.

    Toto chování se liší od použití Power Automate u každé smyčky , ve které iterace běží postupně nebo postupně. Můžete ale nastavit sekvenční postup pro každou iteraci. Pokud například chcete pozastavit další iteraci v akci Pro každou akci pomocí akce Zpoždění, musíte nastavit každou iteraci tak, aby běžela postupně.

    Jako výjimka výchozího chování se vnořená iterace každé akce vždy spouští postupně, ne paralelně. Pokud chcete spouštět operace paralelně pro položky ve vnořené smyčce, vytvořte a volejte pracovní postup podřízené aplikace logiky.

  • Pokud chcete získat předvídatelné výsledky z operací s proměnnými během každé iterace, spusťte iterace postupně. Když například skončí souběžná iterace, vrátí proměnná inkrementace, dekrementační proměnná a připojení k operacím proměnných předvídatelné výsledky. Během každé iterace v souběžné smyčce však tyto operace můžou vracet nepředvídatelné výsledky.

  • Akce v každé smyčce používají item() funkci k odkazování a zpracování každé položky v poli. Pokud zadáte data, která nejsou v poli, pracovní postup selže.

Následující ukázkový pracovní postup odešle denní souhrn pro informační kanál RSS webu. Pracovní postup používá pro každou akci, která odešle e-mail pro každou novou položku.

Na základě toho, jestli máte pracovní postup Consumption nebo Standard, postupujte podle odpovídajících kroků:

  1. Na webu Azure Portal vytvořte ukázkový pracovní postup aplikace logiky Consumption s následujícími kroky v zadaném pořadí:

  2. Postupujte podle stejných obecných kroků a přidejte každou akci mezi triggerem RSS a odesláním e-mailové akce v pracovním postupu.

  3. Teď sestavte smyčku:

    1. Vyberte uvnitř pole Vybrat výstup z předchozích kroků , aby se otevřel seznam dynamického obsahu.

    2. V seznamu Přidat dynamický obsah v části Při publikování položky informačního kanálu vyberte odkazy informačního kanálu, což je výstup pole z triggeru RSS.

      Poznámka:

      Pokud se výstup odkazů informačního kanálu nezobrazí, vedle popisku oddílu triggeru vyberte Zobrazit více. V seznamu dynamického obsahu můžete vybrat pouze výstupy z předchozích kroků.

      Screenshot shows Azure portal, Consumption workflow designer, action named For each, and opened dynamic content list.

      Po dokončení se vybraný výstup pole zobrazí jako v následujícím příkladu:

      Screenshot shows Consumption workflow, action named For each, and selected array output.

    3. Pokud chcete spustit existující akci pro každou položku pole, přetáhněte akci Odeslat e-mail do smyčky For each .

      Pracovní postup teď vypadá jako v následujícím příkladu:

      Screenshot shows Consumption workflow, action named For each, and action named Send an email, now inside For each loop.

  4. Po dokončení uložte pracovní postup.

  5. Pokud chcete pracovní postup otestovat ručně, vyberte na panelu nástrojů návrháře možnost Spustit spuštění triggeru>.

Pro každou definici akce (JSON)

Pokud pracujete v zobrazení kódu, můžete definovat For_each akci v definici JSON pracovního postupu, například:

"actions": {
   "For_each": {
      "actions": {
         "Send_an_email_(V2)": {
            "type": "ApiConnection",
            "inputs": {
               "body": {
                  "Body": "@{item()}",
                  "Subject": "New CNN post @{triggerBody()?['publishDate']}",
                  "To": "me@contoso.com"
               },
               "host": {
                  "connection": {
                     "name": "@parameters('$connections')['office365']['connectionId']"
                  }
               },
               "method": "post",
               "path": "/v2/Mail"
            },
            "runAfter": {}
         }
      },
      "foreach": "@triggerBody()?['links']",
      "runAfter": {},
      "type": "Foreach"
   }
},

Pro každou z nich: Spouštět postupně

Ve výchozím nastavení se iterace ve smyčce pro každou smyčku spouští paralelně současně. Pokud však máte vnořené smyčky nebo proměnné uvnitř smyček, ve kterých očekáváte předvídatelné výsledky, musíte tyto smyčky spustit postupně nebo postupně.

  1. V pravém horním rohu každé akce vyberte tři tečky (...). >Nastavení.

  2. V části Řízení souběžnosti změňte nastavení z Vypnuto na Zapnuto.

  3. Přesuňte posuvník Stupně paralelismu na 1 a vyberte Hotovo.

    Screenshot shows Consumption workflow, action named For each, concurrency control setting turned on, and degree of parallelism slider set to 1.

Pro každou definici akce (JSON): Spouštět postupně

Pokud pracujete v zobrazení kódu s For_each akcí v definici JSON pracovního postupu, můžete tuto možnost použít Sequential přidáním parametru operationOptions , například:

"actions": {
   "For_each": {
      "actions": {
         "Send_an_email_(V2)": { }
      },
      "foreach": "@triggerBody()?['links']",
      "runAfter": {},
      "type": "Foreach",
      "operationOptions": "Sequential"
   }
}

Do

Akce Dokud se nespustí a opakuje jednu nebo více akcí, dokud nebude splněna požadovaná zadaná podmínka. Pokud je podmínka splněná, smyčka se zastaví. V opačném případě se smyčka opakuje. Výchozí a maximální omezení počtu akcí nebo iterací, které může pracovní postup obsahovat, najdete v tématu Omezení souběžnosti, smyček a debat.

Následující seznam obsahuje některé běžné scénáře, ve kterých můžete použít akci Do :

  • Zavolejte koncový bod, dokud nedostanete požadovanou odpověď.

  • Vytvořte záznam v databázi. Počkejte na schválení konkrétního pole v daném záznamu. Pokračujte ve zpracování.

V následujícím ukázkovém pracovním postupu počínaje 8:00 každý den akce Until zvýší proměnnou, dokud se hodnota proměnné rovná 10. Pracovní postup pak odešle e-mail, který potvrdí aktuální hodnotu.

Poznámka:

Tento příklad používá Office 365 Outlook, ale můžete použít libovolného poskytovatele e-mailu, kterého Azure Logic Apps podporuje. Pokud používáte jiný e-mailový účet, obecné kroky zůstanou stejné, ale uživatelské rozhraní se může mírně lišit.

  1. Na webu Azure Portal vytvořte prostředek aplikace logiky Consumption s prázdným pracovním postupem.

  2. V návrháři postupujte podle těchto obecných kroků a přidejte do pracovního postupu předdefinovaný trigger Opakování s názvem Plán.

  3. V triggeru Opakování zadejte interval, frekvenci a hodinu dne, po který se má aktivační událost aktivovat.

    Vlastnost Hodnota
    Interval 1
    Četnost Day
    V těchto hodinách 8

    Pokud chcete přidat parametr At these hours , otevřete seznam Přidat nový parametr a vyberte V těchto hodinách, který se zobrazí až po nastavení Frekvence na Den.

    Screenshot shows Azure portal, Consumption workflow designer, and Recurrence trigger parameters with selected option for At these hours.

    Po dokončení bude trigger Opakování vypadat jako v následujícím příkladu:

    Screenshot shows Azure portal, Consumption workflow, and Recurrence trigger parameters set up.

  4. Pod triggerem přidejte do pracovního postupu integrovanou akci Variables s názvem Initialize variable (Inicializovat proměnnou) podle těchto obecných kroků.

  5. V akci Inicializovat proměnnou zadejte následující hodnoty:

    Vlastnost Hodnota Popis
    Jméno Omezení Název proměnné
    Typ Celé číslo Datový typ proměnné
    Hodnota 0 Počáteční hodnota proměnné

    Screenshot shows Azure portal, Consumption workflow, and parameters for built-in action named Initialize variable.

  6. V rámci akce Inicializovat proměnnou podle těchto obecných kroků přidejte předdefinované akce Control s názvem Until do pracovního postupu.

  7. V akci Until zadejte následující hodnoty pro nastavení podmínky zastavení smyčky.

    1. Vyberte uvnitř pole úplně vlevo s názvem Zvolit hodnotu, která automaticky otevře seznam dynamického obsahu.

    2. V seznamu v části Proměnné vyberte proměnnou s názvem Limit.

    3. V prostředním seznamu operátorů vyberte operátor se rovná operátoru.

    4. Do pole úplně vpravo s názvem Zvolit hodnotu zadejte 10 jako porovnávací hodnotu.

    Screenshot shows Consumption workflow and built-in action named Until with finished stop condition.

  8. Uvnitř akce Until (Dokud) vyberte Add an action (Přidat akci).

  9. Do vyhledávacího pole Zvolit operaci přidejte pomocí těchto obecných kroků předdefinované akce Proměnné s názvem Přírůstková proměnná do akce Until.

  10. V akci proměnné přírůstku zadejte následující hodnoty pro zvýšení hodnoty limitu proměnné o 1:

    Vlastnost Hodnota
    Název Vyberte proměnnou Limit .
    Hodnota 1

    Screenshot shows Consumption workflow and built-in action named Until with Name set to the Limit variable and Value set to 1.

  11. Pokud chcete přidat akci, která odesílá e-maily, postupujte podle těchto obecných kroků mimo akci a v části Dokud akci nedodržte.

    Tento příklad pokračuje akcí Office 365 Outlook s názvem Odeslat e-mail.

  12. V e-mailové akci zadejte následující hodnoty:

    Vlastnost Hodnota Popis
    Na <address@domain e-mailu> E-mailová adresa příjemce. K testování použijte vlastní e-mailovou adresu.
    Předmět Aktuální hodnota proměnné Limit je:Limit Předmět e-mailu. V tomto příkladu nezapomeňte zahrnout proměnnou Limit , abyste potvrdili, že aktuální hodnota splňuje zadanou podmínku:

    1. Vyberte uvnitř pole Předmět , aby se zobrazil seznam dynamického obsahu.

    2. V seznamu dynamického obsahu vedle záhlaví oddílu Proměnné vyberte Zobrazit další.

    3. Vyberte limit.
    Text <obsah e-mailu> Obsah e-mailové zprávy, který chcete odeslat. V tomto příkladu zadejte požadovaný text.

    Po dokončení bude akce e-mailu vypadat podobně jako v následujícím příkladu:

    Screenshot shows Consumption workflow and action named Send an email with property values.

  13. Uložte pracovní postup.

Otestování pracovního postupu

Pokud chcete pracovní postup aplikace logiky ručně otestovat, postupujte podle pokynů na základě toho, jestli máte aplikaci logiky Consumption nebo Standard.

Na panelu nástrojů návrháře vyberte Spustit spuštění triggeru>.

Po spuštění pracovního postupu dostanete e-mail s obsahem, který jste zadali:

Screenshot shows sample email received from example workflow.

Prevence nekonečných smyček

Akce Until zastaví provádění na základě následujících vlastností, které můžete zobrazit výběrem možnosti Změnit limity v akci. Ujistěte se, že jste nastavili tyto hodnoty vlastností odpovídajícím způsobem:

Vlastnost Popis
Počet Maximální počet iterací, které se spouští před ukončením smyčky.

Výchozí a maximální omezení počtu akcí, které může pracovní postup obsahovat, najdete v tématu Omezení souběžnosti, smyček a debat.
Časový limit Maximální doba, po kterou se akce Until (včetně všech iterací) spustí před ukončením smyčky. Tato hodnota je zadána ve formátu ISO 8601 a je vyhodnocena pro každou iteraci.

Pokud jakákoli akce ve smyčce trvá déle, než je limit časového limitu, aktuální iterace se nezastaví. Další iterace se ale nespustí, protože je splněna podmínka limitu časového limitu.

Výchozí a maximální limity pro hodnotu časového limitu najdete v tématu Omezení souběžnosti, smyčky a debaty.

Definice Until (JSON)

Pokud pracujete v zobrazení kódu, můžete definovat Until akci v definici JSON pracovního postupu, například:

"actions": {
   "Initialize_variable": {
      // Definition for initialize variable action
   },
   "Send_an_email": {
      // Definition for send email action
   },
   "Until": {
      "type": "Until",
      "actions": {
         "Increment_variable": {
            "type": "IncrementVariable",
            "inputs": {
               "name": "Limit",
               "value": 1
            },
            "runAfter": {}
         }
      },
      "expression": "@equals(variables('Limit'), 10)",
      // To prevent endless loops, an "Until" loop 
      // includes these default limits that stop the loop. 
      "limit": { 
         "count": 60,
         "timeout": "PT1H"
      },
      "runAfter": {
         "Initialize_variable": [
            "Succeeded"
         ]
      }
   }
}

V tomto příkladu smyčka Until volá koncový bod HTTP, který vytvoří prostředek. Smyčka se zastaví, když se tělo odpovědi HTTP vrátí se stavem Completed . Pokud chcete zabránit nekonečným smyčkám, smyčka se zastaví také v případě, že dojde k některé z následujících podmínek:

  • Smyčka běžela 10krát podle zadání atributu count . Výchozí hodnota je 60krát.

  • Smyčka běžela dvě hodiny podle atributu timeout ve formátu ISO 8601. Výchozí hodnota je jedna hodina.

"actions": {
   "myUntilLoopName": {
      "type": "Until",
      "actions": {
         "Create_new_resource": {
            "type": "Http",
            "inputs": {
               "body": {
                  "resourceId": "@triggerBody()"
               },
               "url": "https://domain.com/provisionResource/create-resource",
               "body": {
                  "resourceId": "@triggerBody()"
               }
            },
            "runAfter": {},
            "type": "ApiConnection"
         }
      },
      "expression": "@equals(triggerBody(), 'Completed')",
      "limit": {
         "count": 10,
         "timeout": "PT2H"
      },
      "runAfter": {}
   }
}

Další kroky