Přidání smyček pro opakování akcí v pracovních postupech pro Azure Logic Apps

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

Pokud chcete opakovat akce v pracovním postupu aplikace logiky, můžete do pracovního postupu přidat smyčku For each nebo Until ,podle potřeb pro váš scénář.

Poznámka:

Hledáte dokumentaci ke smyčkám Power Automate? Viz Použití smyček.

Na základě vašeho případu použití si můžete vybrat z následujících typů akcí smyčky:

  • Pokud chcete opakovat jednu nebo více akcí u položek v poli nebo kolekci, přidejte do pracovního postupu akci Pro každou.

    Případně, pokud máte spouštěč, který dokáže zpracovat pole a chcete spustit instanci pracovního postupu pro každou položku pole, můžete pole rozčlenit nastavením vlastnosti spouštěče Split on.

  • Chcete-li opakovat jednu nebo více akcí, dokud není splněna podmínka nebo se změní určitý stav, přidejte akci Until do pracovního postupu.

    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

Následující kroky používají Azure Portal, ale s příslušným rozšířením Azure Logic Apps můžete k vytváření pracovních postupů aplikace logiky použít také následující nástroje:

Některé kroky se mírně liší podle toho, jestli máte pracovní postup Consumption nebo Standard.

Pro každou

Akce Pro každý funguje pouze pro pole. Tato smyčka opakuje jednu nebo více akcí pro každou položku v poli. Projděte si následující aspekty jednotlivých akcí:

  • Akce For each může zpracovat omezený počet položek pole. Informace o tomto limitu najdete v části Omezení souběžnosti, smyček a debatchingu.

  • Ve výchozím nastavení se cykly nebo iterace v akci For each spouští paralelně.

    Toto chování se liší od smyčky Apply to each v Power Automate, kde iterace probíhají po jedné, tedy sekvenčně. Pokud váš případ použití vyžaduje sekvenční zpracování, můžete nastavit , aby se jednotlivé iterace spouštěly postupně. Pokud například chcete pomocí akce Zpoždění pozastavit následující iteraci v akci Pro každou, musíte nastavit spouštění jednotlivých iterací tak, aby probíhaly postupně.

    Jako výjimka z výchozího chování se iterace vnořené akce For each vždy spouštějí sekvenčně, ne paralelně. Chcete-li spouštět akce souběžně nad položkami pole ve vnořené akci For each, vytvořte a zavolejte podřízený pracovní postup.

  • Pokud chcete získat předvídatelné výsledky z operací s proměnnými během každé iterace, spusťte iterace postupně. Například když skončí souběžně běžící iterace, operace Inkrementace proměnné, Dekrementace proměnné a Připojení k proměnné vracejí 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 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.

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. Postupujte podle stejných obecných kroků a přidejte akci Pro každou mezi trigger RSS a akci Odeslat e-mail ve vašem pracovním postupu.

  3. Teď sestavte smyčku:

    1. V poli Pro každou položku vyberte v poli Vybrat výstup z předchozích kroků a pak 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 zobrazuje portál Azure a návrhář pracovních postupů s akcí s názvem For each a otevřeným seznamem dynamického obsahu.

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

      Na snímku obrazovky je vidět návrhář pracovního postupu a akce 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 .

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

      Snímek obrazovky zobrazuje návrháře pracovního postupu, akci s názvem For each a akci s názvem Send an email, která se nyní nachází uvnitř akce For each.

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

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í 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 ukazuje akci Pro každou akci, kartu Nastavení a zapnuté nastavení řízení souběžnosti s posuvníkem paralelismu nastaveným na hodnotu 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"
   }
}

Až do

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. Informace o výchozích a maximálních limitech počtu akcí nebo iterací Until najdete v tématu Souběžnost, smyčky a limity debatchingu.

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_8": [
           "Succeeded"
         ]
       },
    "type": "Until"
    }
    

V následujícím ukázkovém pracovním postupu akce Until každý den od 8:00 zvyšuje hodnotu proměnné, dokud hodnota proměnné nedosáhne 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. Projděte si předchozí postup.

  2. V návrháři postupujte podle obecných kroků pro přidání předdefinované aktivační události Plán s názvem Opakování do pracovního postupu Consumption nebo Standard.

  3. V triggeru Opakování zadejte interval, frekvenci a čas aktivace triggeru.

    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.

    Až budete hotovi, aktivační událost Opakování bude vypadat jako v následujícím příkladu:

    Snímek obrazovky s webem Azure Portal a návrhářem pracovního postupu s nastavenými parametry triggeru opakování

  4. Pod triggerem přidejte do pracovního postupu aplikace logiky Consumption nebo Standard předdefinovanou akci Variables s názvem Initialize variables podle těchto obecných kroků.

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

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

    Snímek obrazovky s webem Azure Portal, návrhářem pracovního postupu a integrovanou akcí s názvem Inicializovat proměnnou s parametry

  6. V rámci akce Inicializace proměnných přidejte pomocí těchto obecných kroků integrovanou akci Control s názvem Dokud do pracovního postupu aplikace logiky Consumption nebo Standard .

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

    1. Vyberte pole v rámečku Opakovat, dokud a kliknutím na ikonu blesku otevřete seznam dynamického 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 .

    Snímek obrazovky ukazuje pracovní postup a integrovanou akci s názvem Until s popisem hodnot.

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

  9. Pomocí těchto obecných kroků přidejte do akce Until v pracovním postupu aplikace logiky Consumption nebo Standard předdefinovanou akci Variables s názvem Increment variable.

  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

    Snímek obrazovky zobrazuje pracovní postup a integrovanou akci s názvem Until s položkou Limit nastavenou na proměnnou Limit a položkou Value nastavenou na 1.

  11. Vně akce Until i v ní postupujte při přidávání akce, která odesílá e-maily, v pracovním postupu aplikace logiky Consumption nebo Standard podle těchto obecných kroků.

    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.

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

    Snímek obrazovky ukazuje pracovní postup a akci s názvem Odeslat 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:

Snímek obrazovky ukazuje ukázkový e-mail přijatý z ukázkového pracovního postupu.

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.

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