Share via


Lussen maken om acties in werkstromen te herhalen met Azure Logic Apps

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

Azure Logic Apps bevat de volgende lusacties die u in uw werkstroom kunt gebruiken:

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

    Als u een trigger hebt die een matrix ontvangt en een iteratie wilt uitvoeren voor elk matrixitem, kunt u die matrix ook debatteren met de eigenschap SplitOn-trigger.

  • Als u een of meer acties wilt herhalen totdat aan een voorwaarde wordt voldaan of een 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

For each

De actie Voor elke actie werkt alleen op matrices en herhaalt een of meer acties voor elk item in een matrix. De volgende lijst bevat enkele overwegingen voor wanneer u een voor elke actie wilt gebruiken:

  • 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. U kunt echter sequentieel instellen voor elke iteratie. 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 bewerkingen parallel wilt uitvoeren voor items in een geneste lus, maakt en roept u een onderliggende werkstroom voor logische apps 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.

Volg de bijbehorende stappen op basis van of u een werkstroom Verbruik of Standaard hebt:

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

  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 Selecteer een uitvoer uit de vorige stappen , zodat de lijst met dynamische inhoud wordt geopend.

    2. Selecteer in de lijst Dynamische inhoud toevoegen in de sectie 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, Werkstroomontwerper verbruik, actie met de naam Voor elk en geopende lijst met dynamische inhoud.

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

      Schermopname van verbruikswerkstroom, actie met de naam Voor elk en 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 werkstroom Verbruik, de actie Voor elk item en de actie Een e-mail verzenden, nu binnen Voor elke lus.

  4. Sla uw werkstroom op als u gereed bent.

  5. Als u uw werkstroom handmatig wilt testen, selecteert u Uitvoeren van trigger>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 lus parallel uitgevoerd. Wanneer u echter geneste lussen of variabelen in de lussen hebt waar u voorspelbare resultaten verwacht, moet u deze lussen één voor één of sequentieel uitvoeren.

  1. Selecteer in de rechterbovenhoek van Elke actie de weglatingstekens (...) > Instellingen.

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

  3. Verplaats de schuifregelaar Graden parallelle uitvoering naar 1 en selecteer Gereed.

    Schermopname van verbruikswerkstroom, actie met de naam Voor elke instelling voor gelijktijdigheidsbeheer ingeschakeld en de mate van parallelle uitvoering is 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, kunt u de optie gebruiken door de operationOptions Sequential parameter toe te voegen, bijvoorbeeld:

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

Until

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. Voor de standaard- en maximumlimieten voor het aantal acties of iteraties dat een werkstroom kan hebben, raadpleegt u Gelijktijdigheid, lussen en debatching-limieten.

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.

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.

Notitie

In dit 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 kan uw gebruikersinterface er iets anders uitzien.

  1. Maak in Azure Portal een logische app-resource verbruik met een lege werkstroom.

  2. Volg deze algemene stappen in de ontwerpfunctie om de ingebouwde trigger Terugkeerpatroon met de naam Schedule toe te voegen aan uw werkstroom.

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

    Eigenschappen Weergegeven als
    Interval 1
    Frequentie Day
    Deze uren 8

    Als u de parameter At these hours wilt toevoegen, opent u de lijst nieuwe parameters toevoegen en selecteert u Op deze uren, die pas wordt weergegeven nadat u Frequency to Day hebt ingesteld.

    Schermopname van azure Portal, workflowontwerper verbruik en triggerparameters voor terugkeerpatroon met de geselecteerde optie voor Op deze uren.

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

    Schermopname van azure Portal, werkstroom verbruik en parameters voor terugkeertriggers ingesteld.

  4. Volg onder de trigger deze algemene stappen om de ingebouwde actie Variabelen met de naam Variabele initialiseren toe te voegen aan uw werkstroom.

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

    Eigenschappen Weergegeven als Beschrijving
    Naam Limiet De naam van uw variabele
    Type Geheel getal Het gegevenstype van uw variabele
    Value 0 De beginwaarde van uw variabele

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

  6. Volg onder de actie Variabele initialiseren deze algemene stappen om de ingebouwde besturingselementactie Met de naam Until toe te voegen aan uw werkstroom.

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

    1. Selecteer in het meest linkse vak met de naam Kies een waarde, waarmee de lijst met dynamische inhoud automatisch wordt geopend.

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

    3. Selecteer in de lijst met middelste operatoren de operator is gelijk aan .

    4. Voer in het meest rechtse vak met de naam Kies een waarde 10 in als de vergelijkingswaarde.

    Schermopname van de werkstroom Verbruik en de ingebouwde actie Until met de voltooide stopvoorwaarde.

  8. Selecteer een actie toevoegen in de actie Until.

  9. Volg deze algemene stappen in het zoekvak Kies een bewerking om de ingebouwde variabele Variabelen met de naam Increment-variabele toe te voegen aan de actie Until.

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

    Eigenschappen Waarde
    Naam Selecteer de variabele Limiet .
    Value 1

    Schermopname van de werkstroom Verbruik en de ingebouwde actie Until met De naam ingesteld op de variabele Limiet en waarde ingesteld op 1.

  11. Volg deze algemene stappen buiten en onder Until om een actie toe te voegen waarmee e-mail wordt verzonden.

    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:

    Eigenschappen 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 , zodat de lijst met dynamische inhoud wordt weergegeven.

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

    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 de werkstroom Verbruik en actie met de naam Een e-mailbericht verzenden met eigenschapswaarden.

  13. Sla uw werkstroom op.

Uw werkstroom testen

Als u de werkstroom van uw logische app handmatig wilt testen, volgt u de stappen op basis van of u een logische app voor Verbruik of Standard hebt.

Selecteer Op de werkbalk van de ontwerpfunctie de optie Triggeruitvoering>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 volgende eigenschappen, die u kunt weergeven door Limieten wijzigen in de actie te selecteren. Zorg ervoor dat u deze eigenschapswaarden dienovereenkomstig instelt:

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

Volgende stappen