Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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:
- Přidejte do svého pracovního postupu smyčku For each
- Spustit pro každou iteraci postupně
- Přidejte do svého pracovního postupu smyčku Until
- Zabránit nekonečným smyčkám
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í:
- Vytváření pracovních postupů Create Consumption v aplikaci Visual Studio Code
- Vytvořte standardní pracovní postupy ve Visual Studio Code
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.
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ů.
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:
Teď sestavte smyčku:
V akci For each vyberte pole Select An Output From Previous Steps, aby se zobrazily možnosti vstupu, a potom vyberte ikonu blesku.
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ů.
Následující příklad ukazuje výstup vybraného pole:
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:
Uložte pracovní postup.
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.
V návrháři vyberte akci For each, čímž otevřete podokno s informacemi, a pak vyberte Nastavení.
V části Řízení souběžnosti změňte nastavení z Vypnuto na Zapnuto.
Posunutí posuvníku stupně paralelismu 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 naFailWhenLimitsReached, 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.
Na portálu Azure portal vytvořte prostředek aplikace logiky s prázdným pracovním postupem.
V návrháři přidejte vestavěný trigger Schedule s názvem Recurrence podle obecných kroků pro typ vašeho workflow:
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:
V designéru přidejte vestavěnou akci Proměnné nazvanou Initialize variable podle obecných kroků podle typu vašeho workflow:
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é. Pod akcí Initialize variable přidejte vestavěnou akci Control s názvem Until podle obecných kroků podle typu workflow:
V akci Until nastavte podmínku stop pro smyčku:
Vyberte uvnitř pole Loop Until a poté vyberte ikonu blesku pro otevření dynamického seznamu obsahu.
V seznamu v části Proměnné vyberte proměnnou s názvem Limit.
V části Počet zadejte jako hodnotu porovnání hodnotu 10 .
Uvnitř akce Until (Dokud ) vyberte +>Add an action (Přidat akci).
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:
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 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.
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:
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:
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
timeoutve 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": {}
}
}