Skapa loopar för att upprepa åtgärder i arbetsflöden med Azure Logic Apps

Gäller för: Azure Logic Apps (Förbrukning + Standard)

Azure Logic Apps innehåller följande loopåtgärder som du kan använda i arbetsflödet:

  • Om du vill upprepa en eller flera åtgärder för objekt i en matris lägger du till åtgärden För varje i arbetsflödet.

    Om du har en utlösare som tar emot en matris och vill köra en iteration för varje matrisobjekt kan du också diskutera matrisen med egenskapen SplitOn-utlösare.

  • Om du vill upprepa en eller flera åtgärder tills ett villkor uppfylls eller ett tillstånd ändras lägger du till åtgärden Till i arbetsflödet.

    Arbetsflödet kör först alla åtgärder i loopen och kontrollerar sedan villkoret eller tillståndet. Om villkoret uppfylls stoppas loopen. Annars upprepas loopen. För standard- och maxgränser för antalet Until-loopar som ett arbetsflöde kan ha, se Begränsningar för samtidighet, loopning och utfasning.

Förutsättningar

För varje

Åtgärden För varje fungerar bara på matriser och upprepar en eller flera åtgärder för varje objekt i en matris. Följande lista innehåller några saker att tänka på när du vill använda en För varje åtgärd:

  • Åtgärden För varje kan bearbeta ett begränsat antal matrisobjekt. Den här gränsen finns i Begränsningar för samtidighet, loopning och utfasning.

  • Som standard körs cyklerna eller iterationerna i en För varje åtgärd samtidigt parallellt.

    Det här beteendet skiljer sig från Power Automate's Apply för varje loop där iterationer körs en i taget eller sekventiellt. Du kan dock konfigurera sekventiella för varje iterationer. Om du till exempel vill pausa nästa iteration i en För varje åtgärd med hjälp av åtgärden Fördröjning måste du konfigurera varje iteration så att den körs sekventiellt.

    Ett undantag från standardbeteendet är att en kapslad för varje åtgärds iterationer alltid körs sekventiellt, inte parallellt. Om du vill köra åtgärder parallellt för objekt i en kapslad loop skapar och anropar du ett underordnat logikapparbetsflöde.

  • Kör iterationerna sekventiellt för att få förutsägbara resultat från åtgärder på variabler under varje iteration. När en iteration som körs samtidigt slutar returnerar variabeln Increment, Decrement variable och Append to variable operations förutsägbara resultat. Men under varje iteration i loopen som körs samtidigt kan dessa åtgärder returnera oförutsägbara resultat.

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

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.

Baserat på om du har ett förbruknings- eller standardarbetsflöde följer du motsvarande steg:

  1. I Azure-portalen skapar du ett exempel på arbetsflödet för förbrukningslogikappen med följande steg i den angivna ordningen:

  2. Följ samma allmänna steg för att lägga till åtgärden För varje mellan RSS-utlösaren och Skicka en e-poståtgärd i arbetsflödet.

  3. Skapa nu loopen:

    1. Välj i rutan Välj utdata från föregående steg så att listan med dynamiskt innehåll öppnas.

    2. I listan Lägg till dynamiskt innehåll går du till avsnittet När ett flödesobjekt publiceras och väljer Feed-länkar, som ä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.

      Screenshot shows Azure portal, Consumption workflow designer, action named For each, and opened dynamic content list.

      När du är klar visas de valda matrisutdata som i följande exempel:

      Screenshot shows Consumption workflow, action named For each, and selected array output.

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

      Nu ser arbetsflödet ut som i följande exempel:

      Screenshot shows Consumption workflow, action named For each, and action named Send an email, now inside For each loop.

  4. Spara arbetsflödet när du är klar.

  5. Om du vill testa arbetsflödet manuellt går du till verktygsfältet designer och väljer Kör utlösarkörning>.

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 sekventiellt

Som standard körs iterationerna i en För varje loop samtidigt parallellt. Men när du har kapslade loopar eller variabler i looparna där du förväntar dig förutsägbara resultat måste du köra dessa loopar en i taget eller sekventiellt.

  1. I för varje åtgärds övre högra hörn väljer du ellipser (...) >Inställningar.

  2. Under Samtidighetskontroll ändrar du inställningen från Av till .

  3. Flytta skjutreglaget Grad av parallellitet till 1 och välj Klar.

    Screenshot shows Consumption workflow, action named For each, concurrency control setting turned on, and degree of parallelism slider set to 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 kan du använda Sequential alternativet genom att lägga till parametern operationOptions , till exempel:

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

Do Until

Till-åtgärden körs och upprepar en eller flera åtgärder tills det angivna villkoret är uppfyllt. Om villkoret uppfylls stoppas loopen. Annars upprepas loopen. För standard- och maxgränser för antalet Till-åtgärder eller iterationer som ett arbetsflöde kan ha, se Samtidighet, loopning och utfasningsgränser.

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 posten godkänns. Fortsätt bearbetningen.

I följande exempelarbetsflöde, som börjar kl. 08:00 varje dag, ökar åtgärden Until en variabel tills variabelns värde är lika med 10. Arbetsflödet skickar sedan ett e-postmeddelande som bekräftar det aktuella värdet.

Kommentar

Det här exemplet använder 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 användargränssnittet kan se lite annorlunda ut.

  1. I Azure-portalen skapar du en förbrukningslogikappresurs med ett tomt arbetsflöde.

  2. I designern följer du de här allmänna stegen för att lägga till den inbyggda utlösaren Återkommande med namnet Schema i arbetsflödet.

  3. I upprepningsutlösaren anger du intervallet, frekvensen och timmen på dagen för utlösaren som utlöses.

    Property Värde
    Intervall 1
    Frekvens dag
    Vid dessa timmar 8

    Om du vill lägga till parametern Vid dessa timmar öppnar du listan Lägg till ny parameter och väljer Vid dessa tider, som visas först när du har angett Frekvens till Dag.

    Screenshot shows Azure portal, Consumption workflow designer, and Recurrence trigger parameters with selected option for At these hours.

    När du är klar ser upprepningsutlösaren ut som i följande exempel:

    Screenshot shows Azure portal, Consumption workflow, and Recurrence trigger parameters set up.

  4. Under utlösaren följer du de här allmänna stegen för att lägga till den inbyggda åtgärden Variabler med namnet Initiera variabel i arbetsflödet.

  5. I åtgärden Initiera variabel anger du följande värden:

    Property Värde Beskrivning
    Namn Gräns Variabelns namn
    Typ Heltal Din variabels datatyp
    Värde 0 Variabelns startvärde

    Screenshot shows Azure portal, Consumption workflow, and parameters for built-in action named Initialize variable.

  6. Under åtgärden Initiera variabel följer du de här allmänna stegen för att lägga till den inbyggda åtgärden Kontroll med namnet Until to your workflow (Kontrollera inbyggd åtgärd med namnet Until to your workflow).

  7. I åtgärden Till anger du följande värden för att konfigurera stoppvillkoret för loopen.

    1. Välj i rutan längst till vänster med namnet Välj ett värde, som automatiskt öppnar listan med dynamiskt innehåll.

    2. I listan under Variabler väljer du variabeln Med namnet Gräns.

    3. I listan med mellanoperatorer väljer du är lika med operatorn.

    4. I den högra rutan med namnet Välj ett värde anger du 10 som jämförelsevärde.

    Screenshot shows Consumption workflow and built-in action named Until with finished stop condition.

  8. I åtgärden Till väljer du Lägg till en åtgärd.

  9. I sökrutan Välj en åtgärd följer du de här allmänna stegen för att lägga till den inbyggda åtgärden Variabler med namnet Increment variable (Öka variabel) i åtgärden Until (Till).

  10. I åtgärden Öka variabel anger du följande värden för att öka värdet för gränsvariabeln med 1:

    Property Värde
    Namn Välj variabeln Gräns .
    Värde 1

    Screenshot shows Consumption workflow and built-in action named Until with Name set to the Limit variable and Value set to 1.

  11. Utanför och under Till-åtgärd följer du dessa allmänna steg för att lägga till en åtgärd som skickar e-post.

    Det här exemplet fortsätter med office 365 Outlook-åtgärden med namnet Skicka ett e-postmeddelande.

  12. Ange följande värden i e-poståtgärden:

    Property Värde beskrivning
    To <e-address@domain> Mottagarens e-postadress. Använd din egen e-postadress för testning.
    Ämne Aktuellt värde för variabeln "Limit" är:Limit 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 så att listan med dynamiskt innehåll visas.

    2. I listan med dynamiskt innehåll bredvid avsnittet Variabler väljer du Visa mer.

    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.

    När du är klar ser e-poståtgärden ut ungefär som i följande exempel:

    Screenshot shows Consumption workflow and action named Send an email with property values.

  13. Spara arbetsflödet.

Testa arbetsflödet

Om du vill testa logikappens arbetsflöde manuellt följer du stegen baserat på om du har en förbruknings- eller standardlogikapp.

I designerverktygsfältet väljer du Kör utlösarkörning>.

När arbetsflödet har börjat köras får du ett e-postmeddelande med det innehåll som du har angett:

Screenshot shows sample email received from example workflow.

Förhindra oändliga loopar

Åtgärden Till stoppar körningen baserat på följande egenskaper, som du kan visa genom att välja Ändra gränser i åtgärden. Kontrollera att du anger dessa egenskapsvärden i enlighet med detta:

Property 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 maximala tid som till-åtgärden , 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.

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

Nästa steg