Sdílet prostřednictvím


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 Smyčky Použití.

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ždou akci funguje pouze u polí. 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í:

  • 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ě. 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 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 akce současně u položek pole vnořených pro každou akci, vytvořte a volejte 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ě. 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.

  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 Při publikování položky informačního kanálu

      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 každou akci mezi triggerem RSS a odesláním e-mailové akce v 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 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ů.

      Snímek obrazovky s webem Azure Portal a návrhářem pracovního postupu s akcí s názvem Pro každou 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:

      Snímek obrazovky znázorňující návrháře pracovního postupu a akci s názvem Pro každý 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 znázorňující návrháře pracovního postupu, akci s názvem Pro každou a akci s názvem Odeslat e-mail, teď uvnitř akce Pro každou akci

  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í se iterace v jednotlivých akcích spouští 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 pro každou akci, aby se otevřelo informační podokno, 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"
   }
}

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í , viz omezení souběžnosti, smyčky a debaty.

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

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 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. 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 webu 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ů a přidejte předdefinovaný trigger plánu 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.

    Po dokončení bude trigger Opakování 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 integrovanou akci Variables s názvem Initialize variables (Inicializovat proměnné).

  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 uvnitř okna Opakovat do pole a výběrem ikony 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 předdefinované akce Proměnné s názvem Increment proměnnou do akce Until v pracovním postupu aplikacelogiky Consumption nebo Standard.

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

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

    Snímek obrazovky ukazuje pracovní postup a integrovanou akci s názvem Until (Do) a Limit (Limit) nastavenou na Limit (Limit) a Value (Hodnota nastavena na hodnotu 1).

  11. Pokud chcete přidat akci, která odesílá e-maily do pracovního postupu aplikace logiky Consumption nebo Standard, postupujte podle těchto obecných kroků mimo akci Do.

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

    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.

Prevence nekonečných smyček

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é 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"
            },
            "runAfter": {},
            "type": "ApiConnection"
         }
      },
      "expression": "@equals(body('Create_new_resource'), 'Completed')",
      "limit": {
         "count": 10,
         "timeout": "PT2H"
      },
      "runAfter": {}
   }
}