Delen via


Lussen toevoegen om acties te herhalen in werkstromen voor Azure Logic Apps

Van toepassing op: Azure Logic Apps (Verbruik + Standard)

Als u acties in een werkstroom van een logische app wilt herhalen, kunt u de Voor elke lus of Until-lus toevoegen aan uw werkstroom, op basis van de behoeften voor uw scenario.

Notitie

Op zoek naar Power Automate-documentatie over lussen? Zie Use-lussen.

Op basis van uw use-case kunt u kiezen uit de volgende typen lusacties:

  • Als u één of meer acties wilt herhalen op items in een array of verzameling, voegt u de Voor elke actie toe aan uw werkstroom.

    Als u een trigger hebt die arrays kan verwerken en een werkstroominstantie voor elk array-item wilt uitvoeren, kunt u de array opsplitsen door de triggereigenschap 'Splitsen op' in te stellen.

  • Als u een of meer acties wilt herhalen totdat aan een voorwaarde wordt voldaan of een bepaalde status wordt gewijzigd, voegt u de actie Until toe aan uw werkstroom.

    Uw werkstroom voert eerst alle acties in de lus uit en controleert vervolgens de voorwaarde of status. Als aan de voorwaarde wordt voldaan, stopt de lus. Anders wordt de lus herhaald. Voor de standaard- en maximumlimieten voor het aantal Until-lussen dat een werkstroom kan hebben, raadpleegt u Gelijktijdigheid, lussen en debatching-limieten.

Vereisten

In de volgende stappen wordt Azure Portal gebruikt, maar met de juiste Azure Logic Apps-extensie kunt u ook de volgende hulpprogramma's gebruiken om werkstromen voor logische apps te bouwen:

Sommige stappen verschillen enigszins, afhankelijk van of u een verbruikswerkstroom of een standaardwerkstroom hebt.

Voor elk

De actie Voor elke actie werkt alleen op matrices. Deze lus herhaalt een of meer acties voor elk item in een matrix. Bekijk de volgende overwegingen voor de actie Voor elke actie:

  • De actie Voor elke actie kan een beperkt aantal matrixitems verwerken. Zie Gelijktijdigheid, lussen en debatching-limieten voor deze limiet.

  • Standaard worden de cycli of iteraties in een Voor elke actie parallel uitgevoerd.

    Dit gedrag verschilt van de toepassing van Power Automate op elke lus waarbij iteraties één voor één worden uitgevoerd, of opeenvolgend. Als voor uw use-case sequentiële verwerking is vereist, kunt u instellen dat elke iteratie één voor één wordt uitgevoerd. Als u bijvoorbeeld de volgende iteratie in een Voor elke actie wilt onderbreken met behulp van de actie Vertraging, moet u elke iteratie instellen om opeenvolgend uit te voeren.

    Als uitzondering op het standaardgedrag worden iteraties van elke actie altijd opeenvolgend uitgevoerd, niet parallel. Als u acties tegelijk wilt uitvoeren op matrixitems in een geneste actie voor elke actie, maakt en roept u een onderliggende werkstroom aan.

  • Als u voorspelbare resultaten wilt krijgen van bewerkingen op variabelen tijdens elke iteratie, voert u de iteraties sequentieel uit. Wanneer bijvoorbeeld een gelijktijdige iteratie eindigt, retourneren de variabele Increment, Decrement-variabele en Toevoegen aan variabelebewerkingen voorspelbare resultaten. Tijdens elke iteratie in de gelijktijdig actieve lus kunnen deze bewerkingen echter onvoorspelbare resultaten opleveren.

  • Acties in een Voor elke lus gebruiken de item() functie om naar elk item in de matrix te verwijzen en te verwerken. Als u gegevens opgeeft die zich niet in een matrix bevindt, mislukt de werkstroom.

Met de volgende voorbeeldwerkstroom wordt een dagelijkse samenvatting verzonden voor een RSS-feed van een website. De werkstroom maakt gebruik van een voor elke actie die een e-mail verzendt voor elk nieuw item.

  1. Maak in Azure Portal een werkstroom voor een logische app met de volgende stappen in de opgegeven volgorde:

    • De RSS-trigger met de naam Wanneer een feeditem wordt gepubliceerd

      Volg deze algemene stappen om een trigger toe te voegen aan een werkstroom voor logische of standaard logische apps.

    • De actie Outlook.com of Office 365 Outlook met de naam Een e-mailbericht verzenden

      Volg deze algemene stappen om een actie toe te voegen aan een werkstroom voor de logische app Verbruik of Standard .

  2. Volg dezelfde algemene stappen om de actie Voor elke actie toe te voegen tussen de RSS-trigger en een e-mailactie verzenden in uw werkstroom.

  3. Bouw nu de lus:

    1. Selecteer in het vak Een uitvoer uit vorige stappen selecteren in het vak Voor elk item en selecteer vervolgens het bliksempictogram.

    2. Selecteer in de lijst met dynamische inhoud die wordt geopend, onder Wanneer een feeditem wordt gepubliceerd, feedkoppelingen. Dit is een matrixuitvoer van de RSS-trigger.

      Notitie

      Als de uitvoer van de feedkoppelingen niet wordt weergegeven, selecteert u naast het label triggersectie meer. In de lijst met dynamische inhoud kunt u alleen uitvoer uit de vorige stappen selecteren.

      Schermopname van Azure Portal en workflowontwerper met een actie met de naam Voor elk en de lijst met geopende dynamische inhoud.

      Wanneer u klaar bent, wordt de geselecteerde matrixuitvoer weergegeven zoals in het volgende voorbeeld:

      Schermopname van de werkstroomontwerper en de actie met de naam Voor elk met geselecteerde matrixuitvoer.

    3. Als u een bestaande actie wilt uitvoeren op elk matrixitem, sleept u de actie Een e-mail verzenden naar de lus Voor elke lus.

      Uw werkstroom ziet er nu uit zoals in het volgende voorbeeld:

      Schermopname van de werkstroomontwerper, de actie Voor elke actie en de actie Een e-mailbericht verzenden, nu binnen de actie Voor elke actie.

  4. Sla uw werkstroom op als u gereed bent.

  5. Als u uw werkstroom handmatig wilt testen, selecteert u Uitvoeren> op de werkbalk van de ontwerpfunctie.

Voor elke actiedefinitie (JSON)

Als u in de codeweergave werkt, kunt u de actie definiëren in de For_each JSON-definitie van uw werkstroom, bijvoorbeeld:

"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"
   }
},

Voor elk: sequentieel uitvoeren

Standaard worden de iteraties in een Voor elke actie parallel uitgevoerd. Als u echter geneste lussen hebt of variabelen in lussen hebt waarin u voorspelbare resultaten verwacht, moet u deze lussen één voor één sequentie uitvoeren.

  1. Selecteer in de ontwerpfunctie de actie Voor elke actie om het informatievenster te openen en selecteer vervolgens Instellingen.

  2. Wijzig onder Gelijktijdigheidsbeheer de instelling van Uit in Aan.

  3. Verplaats de schuifregelaar Mate van parallelle uitvoering naar 1.

    Schermopname van het tabblad Instellingen en de instelling Gelijktijdigheidsbeheer ingeschakeld met de mate van parallelle uitvoering ingesteld op 1.

Voor elke actiedefinitie (JSON): Voer sequentieel uit

Als u in de codeweergave werkt met de actie in de For_each JSON-definitie van uw werkstroom, voegt u de parameter toe en stelt u de operationOptions parameterwaarde Sequentialin op:

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

Totdat

De actie Until wordt uitgevoerd en herhaalt een of meer acties totdat aan de vereiste opgegeven voorwaarde is voldaan. Als aan de voorwaarde wordt voldaan, stopt de lus. Anders wordt de lus herhaald. Zie Gelijktijdigheids-, lus- en debatchinglimieten voor de standaard- en maximumlimieten voor het aantal acties of iteraties.

De volgende lijst bevat enkele veelvoorkomende scenario's waarin u een actie Until kunt gebruiken:

  • Roep een eindpunt aan totdat u het gewenste antwoord krijgt.

  • Maak een record in een database. Wacht totdat een specifiek veld in die record wordt goedgekeurd. Doorgaan met verwerken.

De actie Until slaagt of mislukt standaard op de volgende manieren:

  • De Until lus slaagt als alle acties in de lus slagen, en als de luslimiet is bereikt, gebaseerd op het gedrag na uitvoering.

  • Als alle acties in de laatste iteratie van de lus Until zijn geslaagd, wordt de hele Until-lus gemarkeerd als Geslaagd.

  • Als een actie mislukt in de laatste iteratie van de Until-lus, wordt de hele Until-lus gemarkeerd als Mislukt.

  • Als een actie mislukt in een andere iteratie dan de laatste iteratie, blijft de volgende iteratie actief en wordt de hele actie Pas gemarkeerd als Mislukt.

    Als u de actie wilt laten mislukken, wijzigt u het standaardgedrag in de JSON-definitie van de lus door de parameter met de naam operationOptionstoe te voegen en de waarde in te stellen op FailWhenLimitsReached, bijvoorbeeld:

    "Until": {
       "actions": {
         "Execute_stored_procedure": {
           <...>
           }
         },
         "expression": "@equals(variables('myUntilStop'), true)",
         "limit": {
           "count": 5,
           "timeout": "PT1H"
         },
         "operationOptions": "FailWhenLimitsReached",
         "runAfter": {
         "Initialize_variable_8": [
           "Succeeded"
         ]
       },
    "type": "Until"
    }
    

In de volgende voorbeeldwerkstroom, beginnend om 8:00 uur per dag, wordt met de actie Until een variabele verhoogd totdat de waarde van de variabele gelijk is aan 10. De werkstroom verzendt vervolgens een e-mailbericht dat de huidige waarde bevestigt. In het voorbeeld wordt Office 365 Outlook gebruikt, maar u kunt elke e-mailprovider gebruiken die door Azure Logic Apps wordt ondersteund. Als u een ander e-mailaccount gebruikt, blijven de algemene stappen hetzelfde, maar zien er iets anders uit.

  1. Maak in Azure Portal een logische app-resource met een lege werkstroom. Raadpleeg de eerdere procedure.

  2. Volg in de ontwerpfunctie de algemene stappen om de ingebouwde schematrigger terugkeerpatroon toe te voegen aan uw verbruiks - of standaardwerkstroom .

  3. Geef in de trigger Terugkeerpatroon het interval, de frequentie en de tijd op waarop de trigger moet worden geactiveerd.

    Kenmerk Weergegeven als
    Interval 1
    Frequentie dag
    Deze uren 8
    Op deze minuten 00

    Op deze uren en op deze minuten worden weergegeven nadat u Frequentie op Dag hebt ingesteld.

    Wanneer u klaar bent, ziet de trigger terugkeerpatroon eruit zoals in het volgende voorbeeld:

    Schermopname van de Azure-portal en workflowontwerper met parameters voor terugkeerpatroontriggers ingesteld.

  4. Volg onder de trigger deze algemene stappen om de ingebouwde variabelen met de naam Variabelen met de naam Variabelen initialiseren toe te voegen aan de werkstroom van uw logische app Verbruik of Standaard .

  5. Geef in de actie Variabelen initialiseren de volgende waarden op:

    Kenmerk Weergegeven als Beschrijving
    Naam Limiet De naam van uw variabele
    Typ Geheel getal Het gegevenstype van uw variabele
    Waarde 0 De beginwaarde van uw variabele

    Schermopname van de Azure-portal, werkstroomontwerper en ingebouwde actie met de naam Variabele initialiseren met parameters.

  6. Volg onder de actie Variabelen initialiseren deze algemene stappen om de ingebouwde besturingselementactie Met de naam Until toe te voegen aan uw werkstroom voor de logische app Verbruik of Standard .

  7. Geef in de actie Until de volgende waarden op om de stopvoorwaarde voor de lus in te stellen.

    1. Selecteer in het vak Herhalen tot en selecteer het bliksempictogram om de lijst met dynamische inhoud te openen.

    2. Selecteer in de lijst onder Variabelen de variabele Limit.

    3. Voer onder Aantal10 in als de vergelijkingswaarde.

    Schermopname van een werkstroom en ingebouwde actie met de naam Until met de beschreven waarden.

  8. Selecteer + een > in de actie Until.

  9. Volg deze algemene stappen om de ingebouwde actie Variabelen met de naam Increment-variabele toe te voegen aan de actie Until in uw werkstroom voor de logische app Verbruik of Standaard .

  10. Geef in de actie Variabele verhogen de volgende waarden op om de waarde van de variabele Limiet met 1 te verhogen:

    Kenmerk Weergegeven als
    Limiet Selecteer de variabele Limiet .
    Waarde 1

    Schermopname van een werkstroom en een ingebouwde actie met de naam Until met Limit set to Limit variable and Value set to 1.

  11. Volg deze algemene stappen buiten en onder de actie Until om een actie toe te voegen waarmee e-mail wordt verzonden in uw werkstroom voor logische apps verbruik of Standaard .

    In dit voorbeeld wordt de actie Office 365 Outlook met de naam Een e-mailbericht verzenden voortgezet.

  12. Geef in de e-mailactie de volgende waarden op:

    Kenmerk Weergegeven als Beschrijving
    Als u dit wilt doen < e-mail address@domain> Het e-mailadres van de geadresseerde. Gebruik uw eigen e-mailadres voor testen.
    Onderwerp De huidige waarde voor de variabele Limiet is:Limiet Het e-mailonderwerp. Zorg er voor dit voorbeeld voor dat u de variabele Limiet opneemt om te bevestigen dat de huidige waarde voldoet aan de opgegeven voorwaarde:

    1. Selecteer in het vak Onderwerp en selecteer vervolgens het bliksempictogram.

    2. Selecteer meer in de lijst met dynamische inhoud die wordt geopend, naast de koptekst van de sectie Variabelen.

    3. Selecteer Limiet.
    Tekst < e-mailinhoud> De inhoud van het e-mailbericht dat u wilt verzenden. Voer voor dit voorbeeld de gewenste tekst in.

    Wanneer u klaar bent, ziet uw e-mailactie er ongeveer als volgt uit:

    Schermopname van een werkstroom en actie met de naam Een e-mailbericht verzenden met eigenschapswaarden.

  13. Sla uw werkstroom op.

Uw werkstroom testen

Uw werkstroom voor logische apps handmatig testen:

  • Selecteer Uitvoeren op de werkbalk van de ontwerpfunctie in de optie Uitvoeren.

Nadat uw werkstroom wordt uitgevoerd, ontvangt u een e-mailbericht met de inhoud die u hebt opgegeven:

Schermopname van voorbeeld-e-mail die is ontvangen van een voorbeeldwerkstroom.

Eindeloze lussen voorkomen

De actie Until stopt de uitvoering op basis van de optionele parameters Aantal en Time-out . Zorg ervoor dat u deze parameterwaarden dienovereenkomstig instelt:

Kenmerk Beschrijving
Tellen Het maximum aantal iteraties dat wordt uitgevoerd voordat de lus wordt afgesloten.

Zie Gelijktijdigheids-, lus- en debatchinglimieten voor de standaard- en maximumlimieten voor het aantal acties die een werkstroom kan hebben.
Time-out De maximale tijdsduur dat de actie Until , inclusief alle iteraties, wordt uitgevoerd voordat de lus wordt afgesloten. Deze waarde wordt opgegeven in ISO 8601-indeling en wordt geëvalueerd voor elke iteratie.

Als een actie in de lus langer duurt dan de time-outlimiet, stopt de huidige iteratie niet. De volgende iteratie wordt echter niet gestart omdat aan de voorwaarde voor de time-outlimiet wordt voldaan.

Zie Gelijktijdigheids-, lus- en debatchinglimieten voor de standaard- en maximumlimieten voor de time-outwaarde.

'Until'-definitie (JSON)

Als u in de codeweergave werkt, kunt u een Until actie definiëren in de JSON-definitie van uw werkstroom, bijvoorbeeld:

"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"
         ]
      }
   }
}

In dit voorbeeld totdat een lus een HTTP-eindpunt aanroept, waarmee een resource wordt gemaakt. De lus stopt wanneer de hoofdtekst van het HTTP-antwoord wordt geretourneerd met Completed de status. Om eindeloze lussen te voorkomen, stopt de lus ook als een van de volgende omstandigheden plaatsvindt:

  • De lus is 10 keer uitgevoerd zoals opgegeven door het count kenmerk. De standaardwaarde is 60 keer.

  • De lus werd twee uur uitgevoerd zoals opgegeven door het timeout kenmerk in ISO 8601-indeling. De standaardwaarde is één uur.

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