Spouštění smyček pro opakování akcí v pracovních postupech služby Azure Logic Apps

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

Chcete-li spouštět stejné akce na každé položce v poli nebo kolekci, nebo opakovat akce, dokud něco nedokončíte ve vašem workflow logické aplikace, přidejte do svého workflow akci Control s názvem For Each nebo Until podle toho:

Action Úkol
Pro každý Opakujte jednu nebo více akcí pro položky pole nebo kolekce. Platí pouze pro pole a kolekce.

Tip: Pokud máte trigger, který zpracovává pole, a chcete spustit instanci pracovního postupu pro každou položku pole, nastavte u triggeru vlastnost Split on tak, aby se pole rozdělilo na jednotlivé položky.

Pro informace viz Souběžnost, smyčkování a debatní limity.
Until Opakujte jednu nebo více akcí, dokud není splněna podmínka nebo se nezmění konkrétní stav.

Váš workflow nejprve spustí všechny akce v cyklu a pak zkontroluje stav nebo podmínku. Pokud je podmínka splněná, smyčka se zastaví. V opačném případě se smyčka opakuje.

Pro informace viz Souběžnost, smyčkování a debatní limity.

Tento průvodce ukazuje, jak přidat smyčku do vašeho workflow, spouštět iterace postupně a zabránit nekonečným smyčkám. Přejděte k úkolu, který chcete:

Poznámka:

Dokumentaci k Power Automate najdete v tématu Používejte smyčky.

Požadavky

  • Účet a předplatné Azure. Získejte bezplatný účet Azure.

  • Pracovní postup logické aplikace, ve kterém chcete spustit smyčku, včetně spouštěče, který pracovní postup spustí.

    Než budete moct přidat akci smyčky, musí váš pracovní postup začínat triggerem jako prvním krokem.

Tento průvodce používá portál Azure, ale můžete použít Visual Studio Code a odpovídající rozšíření Azure Logic Apps k tvorbě workflowů logických aplikací:

Pro každou smyčku jsou úvahy

Akce For each opakuje jednu nebo více akcí pro každou položku pole nebo kolekce.

  • Akce Pro každou funguje pouze na polích a kolekcích.

  • Akce Pro každou zpracovává omezený počet položek pole.

  • Ve výchozím nastavení běží pro každou akci iterace paralelně. Klíčové chování, které je třeba znát:

    Behavior Co to znamená
    Paralelní režim ve výchozím nastavení Na rozdíl od aplikace Apply to each loop v Power Automate se iterace nespouštějí po jednom.

    Pokud váš scénář vyžaduje sekvenční zpracování, podívejte se na Spustit každou iteraci postupně. Například pro pozastavení další iterace v akci Pro každou akci pomocí akce Delay nastavte každou iteraci tak, aby běžela postupně.
    Vnořené smyčky Vnořená akce For each se vždy spouští sekvenčně. Chcete-li spouštět paralelně, vytvořte a spusťte podřízený pracovní postup.
    Variables Přírůstková proměnná, Redukční proměnná a Přidávání k proměnné mohou v paralelních smyčkách přinést nepředvídatelné výsledky. Aby proměnné v smyčce produkovaly předvídatelné výsledky operací s těmito proměnnými během každé iterace, spouštějte smyčku postupně.
  • Akce ve smyčce For each používají funkci item() k odkazování na a zpracování každé položky v poli. Pokud zadáte data, která nejsou v poli, pracovní postup selže.

Přidejte smyčku For each do svého pracovního postupu

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.

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

    • Trigger RSS s názvem Když je položka kanálu publikována

      Pokud chcete přidat trigger do pracovního postupu aplikace logiky Consumption nebo Standard , postupujte podle těchto obecných kroků.

    • Akce Outlook.com nebo Office 365 Outlook s názvem Odeslat e-mail

      Pokud chcete přidat akci do pracovního postupu aplikace logiky Consumption nebo Standard , postupujte podle těchto obecných kroků.

  2. V návrháři mezi trigger a akci Odeslat e-mail přidejte akci s názvem Pro každou podle obecných kroků pro váš typ pracovního postupu:

  3. Teď sestavte smyčku:

    1. V akci For each vyberte pole Select An Output From Previous Steps, aby se zobrazily možnosti vstupu, a potom vyberte ikonu blesku.

    2. V seznamu dynamického obsahu, který se otevře, v části Po publikování položky kanálu vyberte Odkazy kanálu, což je pole vrácené triggerem RSS.

      Poznámka:

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

      Snímek obrazovky zobrazující portál Azure a návrhář pracovního postupu s akcí s názvem For each a otevřeným seznamem dynamického obsahu.

      Následující příklad ukazuje výstup vybraného pole:

      Snímek obrazovky zobrazující návrhář pracovního postupu a akci s názvem For each s vybraným výstupem pole.

    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 .

      Váš pracovní postup vypadá jako následující příklad:

      Snímek obrazovky zobrazující návrháře pracovního postupu, akci s názvem For each a akci s názvem Odeslat e-mail, nyní uvnitř akce For each.

  4. Uložte pracovní postup.

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

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ějte iterace smyček postupně

Ve výchozím nastavení iterace v akci For each probíhají současně paralelně. Pokud však máte vnořené smyčky nebo máte proměnné uvnitř smyček, ve kterých očekáváte předvídatelné výsledky, musíte tyto smyčky spustit postupně po jednom.

  1. V návrháři vyberte akci For each, čímž otevřete podokno s informacemi, a pak vyberte Nastavení.

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

  3. Posunutí posuvníku stupně paralelismu na 1

    Snímek obrazovky zobrazující akci For each, kartu Nastavení a zapnuté nastavení Řízení souběžnosti s posuvníkem stupně paralelismu nastaveným na 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, přidejte operationOptions parametr a nastavte hodnotu parametru na Sequential:

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

Úvahy o smyčce Until

Akce Dokud spustí a opakuje jednu nebo více akcí, dokud není splněna zadaná podmínka. Pokud je podmínka splněná, smyčka se zastaví. V opačném případě se smyčka opakuje. Pro více informací viz limity souběžnosti, smyček a debatování.

Následující seznam obsahuje některé běžné scénáře, v nichž můžete použít akci Until:

  • 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í.

Ve výchozím nastavení akce Until uspěje nebo selže následujícími způsoby:

  • Smyčka Until proběhne úspěšně, pokud jsou všechny akce uvnitř smyčky úspěšné a je dosaženo limitu smyčky, a to na základě chování po spuštění.

  • Pokud jsou všechny akce v poslední iteraci smyčky Until úspěšné, celá smyčka Until je označena jako Úspěšná.

  • Pokud v poslední iteraci smyčky Until selže nějaká akce, označí se celá smyčka Until jako neúspěšná.

  • Pokud jakákoli akce selže v jiné iteraci než v poslední iteraci, další iterace se bude dál spouštět a celá akce Until není označena jako Neúspěšná.

    Pokud chcete místo toho provést selhání akce, změňte výchozí chování v definici JSON smyčky přidáním parametru s názvem operationOptionsa nastavením hodnoty na FailWhenLimitsReached, například:

    "Until": {
       "actions": {
         "Execute_stored_procedure": {
           <...>
           }
         },
         "expression": "@equals(variables('myUntilStop'), true)",
         "limit": {
           "count": 5,
           "timeout": "PT1H"
         },
         "operationOptions": "FailWhenLimitsReached",
         "runAfter": {
         "Initialize_variable": [
           "Succeeded"
         ]
       },
    "type": "Until"
    }
    

Přidejte do svého pracovního postupu smyčku Until

Následující příklad pracovního postupu začíná každý den v 8:00 ráno. Pracovní postup používá akci Until k inkrementaci proměnné, dokud hodnota nebude 10. Pracovní postup pak odešle e-mail, který potvrdí aktuální hodnotu. 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 vypadají trochu jinak.

  1. Na portálu Azure portal vytvořte prostředek aplikace logiky s prázdným pracovním postupem.

  2. V návrháři přidejte vestavěný trigger Schedule s názvem Recurrence podle obecných kroků pro typ vašeho workflow:

  3. V spouštěči Recurrence uveďte následující informace:

    Parameter Hodnota
    Interval 1
    Četnost den
    V těchto hodinách 8
    V těchto minutách 00

    V těchto hodinách a v těchto minutách se zobrazí po nastavení Frekvence na Den.

    Následující příklad ukazuje, jak se spouštěč Recurrence objevuje:

    Snímek obrazovky zobrazující portál Azure a návrhář pracovního postupu se nastavenými parametry triggeru Recurrence.

  4. V designéru přidejte vestavěnou akci Proměnné nazvanou Initialize variable podle obecných kroků podle typu vašeho workflow:

  5. V akci Inicializovat proměnnou uveďte následující informace:

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

    Screenshot, který ukazuje Azure portál, workflow designer a vestavěnou akci s názvem Initialize variable, plus parametry.

  6. Pod akcí Initialize variable přidejte vestavěnou akci Control s názvem Until podle obecných kroků podle typu workflow:

  7. V akci Until nastavte podmínku stop pro smyčku:

    1. Vyberte uvnitř pole Loop Until a poté vyberte ikonu blesku pro otevření dynamického seznamu obsahu.

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

    3. V části Počet zadejte jako hodnotu porovnání hodnotu 10 .

    Screenshot, který ukazuje workflow a vestavěnou akci s názvem Until s popsanými hodnotami.

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

  9. Přidejte vestavěnou akci Proměnné nazvanou Přírůstková proměnná do akce Dokud dodržíte obecné kroky podle typu vašeho pracovního postupu:

  10. V akci Increment variable zadejte následující hodnoty, aby se hodnota proměnné Limit zvýšila o 1:

    Parameter Hodnota
    Omezení Vyberte proměnnou Limit .
    Hodnota 1

    Screenshot, který ukazuje workflow a vestavěnou akci s názvem Until s limitem nastaveným na Limit proměnného a hodnotou nastavenou na 1.

  11. Mimo a pod akcí Until přidejte akci, která odešle e-mail, podle obecných kroků podle typu vašeho workflow:

    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:

    Parameter Hodnota Popis
    Na < e-mailová-adresa@domain> 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 a pak vyberte ikonu blesku.

    2. V seznamu dynamického obsahu, který se otevře, vedle záhlaví oddílu Proměnné vyberte Zobrazit více.

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

    Následující příklad ukazuje, jak se zobrazuje akce vašeho e-mailu:

    Screenshot, který ukazuje pracovní postup a akci s názvem Pošlete e-mail s hodnotami vlastností.

  13. Uložte pracovní postup.

Otestování pracovního postupu

Ruční testování pracovního postupu aplikace logiky:

  • Na panelu nástrojů návrháře v možnosti Spustit vyberte Spustit.

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

Screenshot, který ukazuje ukázkový e-mail přijatý z příkladu workflow.

Zabraňte nekonečným smyčkám

Akce Until zastaví provádění na základě volitelných parametrů Count (Počet ) a Timeout (Časový limit ). Ujistěte se, že jste odpovídajícím způsobem nastavili tyto hodnoty parametrů:

Parameter Popis
Počet Maximální počet iterací, které proběhnou před ukončením smyčky.

Informace o výchozích a maximálních limitech počtu akcí Until, které může pracovní postup obsahovat, najdete v tématu Omezení souběžnosti, smyček a rozdělování dávek.
Časový limit Maximální doba, po kterou akce Until, včetně všech iterací, běží, než se smyčka ukončí. Tato hodnota je zadána ve formátu ISO 8601 a je vyhodnocena pro každou iteraci.

Pokud některá akce ve smyčce trvá déle, než je nastavený časový limit, aktuální iterace se nezastaví. Další iterace se ale nespustí, protože byl dosažen časový limit.

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

Zkontrolovat historii spuštění iterací smyčky Until

Když zobrazíte historii spuštění pracovního postupu, který obsahuje smyčku Until , bude podrobný stav a výsledky akcí uvnitř smyčky k dispozici až po dokončení celé smyčky. Zatímco smyčka Until stále provádí iterace, akce smyčky zobrazuje stav Spuštěno, ale výsledky jednotlivých iterací nemůžete rozbalit ani procházet, dokud smyčka neskončí.

Smyčka se ukončí, když je splněna jedna z následujících podmínek:

  • Zadaný výraz se vyhodnotí jako true.
  • Smyčka dosáhne limitu Count.
  • Smyčka dosáhne limitu Timeout.

Po dokončení smyčky můžete vybrat akci Until v historii spuštění a zobrazit jednotlivé iterace a stav podřízených akcí v rámci této iterace.

Poznámka:

Pokud vaše smyčka Until běží delší dobu, musíte počkat, až se smyčka úplně dokončí, než budete moci v historii spuštění zkontrolovat výsledky jednotlivých iterací. Pokud chcete monitorovat dlouho probíhající smyčky, zvažte přidání akcí protokolování nebo oznámení do smyčky, které nezávisle generují stav, například odesláním zprávy do fronty nebo aktualizací proměnné, kterou může paralelní větev číst.

Do definice akce (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ž tělo odpovědi HTTP vrátí stav 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 probíhala po dobu dvou hodin, jak určuje atribut 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"
            },
            "runAfter": {},
            "type": "ApiConnection"
         }
      },
      "expression": "@equals(body('Create_new_resource'), 'Completed')",
      "limit": {
         "count": 10,
         "timeout": "PT2H"
      },
      "runAfter": {}
   }
}

Další kroky