Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: Azure Logic Apps (Förbrukning + Standard)
Om du vill utföra samma åtgärder för varje objekt i en matris eller samling, eller upprepa åtgärder tills något slutförs i arbetsflödet i din logikapp, lägger du till åtgärden Kontroll med namnet För varje eller Tills i arbetsflödet, respektive:
| Action | Task |
|---|---|
| För varje | Upprepa en eller flera åtgärder för objekt i en array eller samling. Gäller endast matriser och samlingar. Tips: Om du har en trigger som hanterar arrayer och vill köra en arbetsflödesinstans för varje arrayobjekt, ställ in triggerns egenskap Split on för att debatcha arrayen. Mer information finns i gränser för samtidighet, loopning och debatching. |
| Until | Upprepa en eller flera handlingar tills ett villkor uppfylls eller ett specifikt tillstånd ändras. Ditt arbetsflöde kör först alla åtgärder i slingan och kontrollerar sedan villkoret eller tillståndet. Om villkoret uppfylls stoppas loopen. Annars upprepas loopen. För information, se gränser för samtidighet, loopning och debatching. |
Den här guiden visar hur du lägger till en loop i ditt arbetsflöde, kör iterationer sekventiellt och förhindrar oändliga loopar. Hoppa till uppgiften du vill ha:
- Lägg till en for each-loop i ditt arbetsflöde
- Kör för varje iteration sekventiellt
- Lägg till en Till-loop i ditt arbetsflöde
- Förhindra oändliga loopar
Kommentar
För Power Automate-dokumentation, se Use loops.
Förutsättningar
Ett Azure-konto och prenumeration. Skaffa ett kostnadsfritt Azure-konto.
Arbetsflödet i logikappen där du vill köra slingan, inklusive en utlösare som startar arbetsflödet.
Innan du kan lägga till en loop-åtgärd måste ditt arbetsflöde börja med en trigger som första steg.
Den här guiden använder Azure-portalen, men du kan använda Visual Studio Code och motsvarande Azure Logic Apps-tillägg för att bygga logikapp-arbetsflöden:
För varje loop övervägs
Åtgärden För varje upprepar en eller flera åtgärder för varje objekt i en matris eller samling.
För varje åtgärd fungerar endast på arrayer och samlingar.
För varje åtgärd bearbetar en begränsad mängd array-objekt.
Som standard körs Iterationerna parallellt för varje åtgärd. Viktiga beteenden att känna till:
Behavior Vad det innebär Parallell som standard Till skillnad från Power Automate:s Apply to each loop, körs inte iterationerna en i taget.
Om ditt scenario behöver sekventiell bearbetning, se Kör för varje iteration sekventiellt. Till exempel, för att pausa nästa iteration i en För varje åtgärd genom att använda Delay-åtgärden, ställ in varje iteration att köras sekventiellt.Nästlade loopar En nästlad För varje objekt-åtgärd körs alltid sekventiellt. För att köra parallellt, skapa och anropa ett underarbetsflöde. Variables Inkrementvariabel, Minskningsvariabel och Tillägg till variabeln kan ge oförutsägbara resultat i parallella loopar. För att säkerställa att variabler i en loop ger förutsägbara resultat från operationer på dessa variabler under varje iteration, kör loopen sekventiellt. Åtgärder i en För varje loop använder
item()funktionen för att referera till och bearbeta varje objekt i matrisen. Om du anger data som inte finns i en matris misslyckas arbetsflödet.
Lägg till en för varje-loop i ditt arbetsflöde
I följande exempelarbetsflöde skickas en daglig sammanfattning för en webbplats RSS-feed. Arbetsflödet använder en För varje åtgärd som skickar ett e-postmeddelande för varje nytt objekt.
I Azure-portalen skapar du ett arbetsflöde för logikappen med följande steg i den angivna ordningen:
RSS-utlösaren med namnet När ett flödesobjekt publiceras
Följ de här allmänna stegen om du vill lägga till en utlösare i ett arbetsflöde för en Consumption- eller Standard-logikapp.
Åtgärden Outlook.com eller Office 365 Outlook med namnet Skicka ett e-postmeddelande
Följ dessa allmänna steg för att lägga till en åtgärd i arbetsflödet för en Consumption- eller Standard-logikapp.
I designern, mellan triggern och Skicka ett e-post , lägger du till åtgärden som heter For each genom att följa de allmänna stegen baserat på din arbetsflödestyp:
Skapa nu loopen:
I För varje åtgärd, välj i rutan Välj en utgång från tidigare steg för att se inmatningsalternativen, och välj sedan blixtikonen.
I listan med dynamiskt innehåll som öppnas under När ett flödesobjekt publiceras väljer du Feed-länkar, vilket är en matrisutdata från RSS-utlösaren.
Kommentar
Om feedlänkarnainte visas bredvid utlösaravsnittsetiketten väljer du Visa mer. I listan med dynamiskt innehåll kan du bara välja utdata från föregående steg.
Följande exempel visar den valda arrayutgången:
Om du vill köra en befintlig åtgärd för varje matrisobjekt drar du åtgärden Skicka ett e-postmeddelande till för varje loop.
Ditt arbetsflöde ser ut som följande exempel:
Spara arbetsflödet.
Om du vill testa arbetsflödet manuellt går du till verktygsfältet designer och väljer Kör>kör.
För varje åtgärdsdefinition (JSON)
Om du arbetar i kodvyn kan du definiera For_each åtgärden i arbetsflödets JSON-definition, till exempel:
"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"
}
},
För varje: Kör loopiterationer sekventiellt
Som standard körs iterationerna i en För varje åtgärd samtidigt parallellt. Men om du har kapslade loopar eller har variabler inuti loopar där du förväntar dig förutsägbara resultat, måste du köra dessa loopar en i taget sekventiellt.
I designern väljer du åtgärden För varje för att öppna informationsfönstret och väljer sedan Inställningar.
Under Samtidighetskontroll ändrar du inställningen från Av till På.
Flytta skjutreglaget grad av parallellitet till 1.
För varje åtgärdsdefinition (JSON): Kör sekventiellt
Om du arbetar i kodvyn med For_each åtgärden i arbetsflödets JSON-definition lägger du till parametern operationOptions och anger parametervärdet till Sequential:
"actions": {
"For_each": {
"actions": {
"Send_an_email_(V2)": { }
},
"foreach": "@triggerBody()?['links']",
"runAfter": {},
"type": "Foreach",
"operationOptions": "Sequential"
}
}
Överväganden för until-loopar
Until-åtgärden kör och upprepar en eller flera åtgärder tills det angivna villkoret som krävs är uppfyllt. Om villkoret uppfylls stoppas loopen. Annars upprepas loopen. För mer information, se Gränser för samtidighet, loopning och debatching.
Följande lista innehåller några vanliga scenarier där du kan använda en Until-åtgärd :
Anropa en slutpunkt tills du får det svar du vill ha.
Skapa en post i en databas. Vänta tills ett visst fält i den posten blir godkänt. Fortsätt bearbetningen.
Som standard lyckas eller misslyckas Until-åtgärden på följande sätt:
Until-loopen lyckas om alla åtgärder i loopen lyckas och om loopgränsen nås, baserat på beteendet efter körning.
Om alla åtgärder i den senaste iterationen av Until-loopen lyckas markeras hela Until-loopen som Lyckades.
Om någon åtgärd misslyckas i den sista iterationen av Until-loopenmarkeras hela Until-loopen som Misslyckad.
Om någon åtgärd misslyckas i en annan iteration än den senaste iterationen fortsätter nästa iteration att köras och hela till-åtgärden markeras inte som Misslyckad.
Om du vill att åtgärden ska misslyckas i stället ändrar du standardbeteendet i loopens JSON-definition genom att lägga till parametern med namnet
operationOptionsoch ange värdet tillFailWhenLimitsReached, till exempel:"Until": { "actions": { "Execute_stored_procedure": { <...> } }, "expression": "@equals(variables('myUntilStop'), true)", "limit": { "count": 5, "timeout": "PT1H" }, "operationOptions": "FailWhenLimitsReached", "runAfter": { "Initialize_variable": [ "Succeeded" ] }, "type": "Until" }
Lägg till en Till-loop i ditt arbetsflöde
Följande exempel på arbetsflöde börjar klockan 08:00 varje dag. Arbetsflödet använder åtgärden Tills för att öka en variabel tills värdet är lika med 10. Arbetsflödet skickar sedan ett e-postmeddelande som bekräftar det aktuella värdet. I exemplet används Office 365 Outlook, men du kan använda valfri e-postprovider som Azure Logic Apps stöder. Om du använder ett annat e-postkonto förblir de allmänna stegen desamma, men de ser lite annorlunda ut.
I Azure-portalen skapar du en logikappresurs med ett tomt arbetsflöde.
I designern lägger du till den inbyggda Schema-triggern som heter Recurrence genom att följa de allmänna stegen baserat på din arbetsflödestyp:
I återkomstutlösaren , ange följande information:
Parameter Värde Intervall 1 Frekvens Dag Vid dessa timmar 8 Vid dessa tidpunkter 00 Vid dessa tider och Vid dessa minuter visas när du har angett Frekvens till Dag.
Följande exempel visar hur återkomstutlösaren ser ut:
I designern lägger du till den inbyggda åtgärden Variables som heter Initialisera variabeln genom att följa de allmänna stegen baserat på din arbetsflödestyp:
I åtgärden Initialisera variabel , ange följande information:
Parameter Värde Beskrivning Namn Gräns Din variabels namn. Typ Heltal Din variabels datatyp. Värde 0 Din variabels startvärde. Under åtgärden Initialisera variabel , lägg till den inbyggda åtgärden Control med namnet Until genom att följa de allmänna stegen baserat på din arbetsflödestyp:
I åtgärden Tills ställs stoppvillkoret för loopen:
Välj i Loop Until och välj sedan blixtikonen för att öppna listan med dynamiskt innehåll.
I listan under Variabler väljer du variabeln Med namnet Gräns.
Under Antal anger du 10 som jämförelsevärde.
I åtgärden Till väljer du +>Lägg till en åtgärd.
Lägg till den inbyggda åtgärden Variabler med namnet Öka variabel i åtgärden Tills genom att följa de allmänna stegen för din arbetsflödestyp:
I åtgärden Öka variabel anger du följande värden för att öka värdet för gränsvariabeln med 1:
Parameter Värde Gräns Välj variabeln Gräns . Värde 1 Utanför och inom åtgärden Until lägger du till en åtgärd som skickar e-post genom att följa de allmänna stegen beroende på arbetsflödestyp:
Det här exemplet fortsätter med office 365 Outlook-åtgärden med namnet Skicka ett e-postmeddelande.
Ange följande värden i e-poståtgärden:
Parameter Värde Beskrivning till < e-address@domain> Mottagarens e-postadress. Använd din egen e-postadress för testning. Ämne Aktuellt värde för variabeln "Gräns" är:Gräns E-postämnet. I det här exemplet kontrollerar du att du inkluderar variabeln Gräns för att bekräfta att det aktuella värdet uppfyller ditt angivna villkor:
1. Välj i rutan Ämne och välj sedan blixtikonen.
2. Välj Visa mer i listan med dynamiskt innehåll som öppnas bredvid avsnittet Variabler.
3. Välj Gräns.Brödtext < e-postinnehåll> E-postmeddelandets innehåll som du vill skicka. I det här exemplet anger du vilken text du vill. Följande exempel visar hur din e-poståtgärd ser ut:
Spara arbetsflödet.
Testa arbetsflödet
Så här testar du logikappens arbetsflöde manuellt:
- I designerverktygsfältet går du till alternativet Kör och väljer Kör.
När arbetsflödet har börjat köras får du ett e-postmeddelande med det innehåll som du har angett:
Förhindra oändliga loopar
Åtgärden Until stoppar körningen baserat på de valfria parametrarna Antal och Tidsgräns. Kontrollera att du anger dessa parametervärden i enlighet med detta:
| Parameter | Beskrivning |
|---|---|
| Antal | Det maximala antalet iterationer som körs innan loopen avslutas. För standard- och maxgränser för antalet Till-åtgärder som ett arbetsflöde kan ha, se Begränsningar för samtidighet, loopning och utfasning. |
| Tidsgräns | Den längsta tid som åtgärden Until, inklusive alla iterationer, körs innan loopen avslutas. Det här värdet anges i ISO 8601-format och utvärderas för varje iteration. Om någon åtgärd i loopen tar längre tid än tidsgränsen stoppas inte den aktuella iterationen. Nästa iteration startar dock inte eftersom tidsgränsvillkoret är uppfyllt. Standard- och maxgränser för tidsgränsvärdetfinns i Begränsningar för samtidighet, loopning och utfasning. |
Granska körningshistorik för Until-loopars iterationer
När du visar körningshistoriken för ett arbetsflöde som innehåller en Until-loop är detaljerad status och resultat för åtgärder i loopen endast tillgängliga när hela loopen har slutfört körningen. Medan Until-loopen fortfarande körs visar loopåtgärden Körs-statusen, men du kan inte expandera eller gå igenom resultaten för de enskilda iterationerna förrän loopen avslutas.
Loopen avslutas när något av följande villkor uppfylls:
- Det angivna uttrycket utvärderas till sant.
- Slingan når gränsen för Count.
- Loopen når gränsen för Timeout.
När loopen har slutförts kan du välja åtgärden Till i körningshistoriken för att visa varje iteration och status för de underordnade åtgärderna i iterationen.
Kommentar
Om din Until-loop körs under en längre period måste du vänta tills loopen har slutförts helt innan du kan kontrollera körningshistoriken efter resultaten från enskilda iterationer. Om du vill övervaka långvariga pågående loopar kan du överväga att lägga till loggnings- eller meddelandeåtgärder i loopen som genererar status oberoende av varandra, till exempel genom att skicka ett meddelande till en kö eller uppdatera en variabel som en parallell gren kan läsa.
Fram till handlingsdefinitionen (JSON)
Om du arbetar i kodvyn kan du definiera en Until åtgärd i arbetsflödets JSON-definition, till exempel:
"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"
]
}
}
}
I det här exemplet anropar Until-loopen en HTTP-slutpunkt som skapar en resurs. Loopen stoppas när HTTP-svarstexten returneras med Completed status. För att förhindra oändliga loopar stoppas loopen även om något av följande villkor inträffar:
Loopen kördes 10 gånger enligt attributet
count. Standardvärdet är 60 gånger.Loopen kördes i två timmar enligt
timeoutattributet i ISO 8601-format. Standardvärdet är en timme.
"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": {}
}
}