Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: Azure Logic Apps (Verbruik + Standard)
Om acties in een werkstroom in een logische app te herhalen, kunt u de lus For each of de Until-lus aan uw werkstroom toevoegen, afhankelijk van wat uw scenario vereist.
Notitie
Op zoek naar Power Automate-documentatie over lussen? Zie Lussen gebruiken.
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. Zie voor de standaard- en maximumlimieten voor het aantal Until-lussen in een werkstroom Gelijktijdigheid, lussen en debatching-limieten.
Vereisten
Een Azure-account en -abonnement. Als u nog geen abonnement hebt, meld u dan aan voor een gratis Azure-account.
Een resource voor logische apps waar u een werkstroom kunt maken en bewerken. Bekijk wat Azure Logic Apps is.
De Logic Apps-resource en -werkstroom waarin u een actie in een lus wilt herhalen, en een trigger waarmee de werkstroom wordt gestart.
Voordat u een lusactie kunt toevoegen, moet uw werkstroom beginnen met een trigger als eerste stap. Zie Een trigger of actie toevoegen om een werkstroom te maken voor meer informatie.
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:
- Werkstromen voor verbruik: Visual Studio Code
- Standaardwerkstromen: Visual Studio Code
Sommige stappen verschillen enigszins, afhankelijk van of u een verbruikswerkstroom of een standaardwerkstroom hebt.
Voor elk
De actie Voor elke werkt alleen op arrays. Deze lus herhaalt een of meer acties voor elk item in een matrix. Bekijk de volgende aandachtspunten voor de actie Voor elke:
De actie Voor elke kan een beperkt aantal array-items 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 For each-actie wilt pauzeren met behulp van de vertragingsactie, moet u elke iteratie zo instellen dat deze na elkaar wordt uitgevoerd.
Als uitzondering op het standaardgedrag worden de iteraties van een geneste For each-actie altijd sequentieel uitgevoerd, niet parallel. Als u acties gelijktijdig wilt uitvoeren op items in een matrix in een geneste actie For each, maakt u een onderliggende werkstroom en roept u die aan.
Als u voorspelbare resultaten wilt krijgen van bewerkingen op variabelen tijdens elke iteratie, voert u de iteraties sequentieel uit. Wanneer bijvoorbeeld een gelijktijdig uitgevoerde iteratie eindigt, geven de bewerkingen Variabele verhogen, Variabele verlagen en Toevoegen aan variabele voorspelbare resultaten. Tijdens elke iteratie in de gelijktijdig actieve lus kunnen deze bewerkingen echter onvoorspelbare resultaten opleveren.
Acties in een For each-lus gebruiken de functie
item()om naar elk item in de array te verwijzen en het 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.
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 van een Consumption- of Standard-logic app.
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 de workflow van een Consumption- of Standard-logische app.
Volg dezelfde algemene stappen om de actie Voor elke toe te voegen tussen de RSS-trigger en de actie Een e-mail verzenden in uw workflow.
Maak nu de lus:
Selecteer in het item Voor elk in het vak Een uitvoer uit vorige stappen selecteren en selecteer vervolgens het bliksempictogram.
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 Feed links niet wordt weergegeven, selecteert u naast het label van de triggersectie Meer weergeven. In de lijst met dynamische inhoud kunt u alleen uitvoer uit de vorige stappen selecteren.
Wanneer u klaar bent, wordt de geselecteerde matrixuitvoer weergegeven zoals in het volgende voorbeeld:
Als u een bestaande actie wilt uitvoeren voor elk item in de matrix, sleept u de actie E-mail verzenden naar de lus Voor elke.
Uw werkstroom ziet er nu uit zoals in het volgende voorbeeld:
Sla je workflow op wanneer je klaar bent.
Als u uw workflow handmatig wilt testen, selecteert u op de werkbalk van de ontwerper Uitvoeren>Uitvoeren.
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.
Selecteer in de ontwerper de actie Voor elke om het informatievenster te openen en selecteer vervolgens Instellingen.
Wijzig onder Gelijktijdigheidsbeheer de instelling van Uit in Aan.
Verplaats de schuifregelaar voor Mate van parallelisme naar 1.
Voor elke actiedefinitie (JSON): Voer sequentieel uit
Als u in de codeweergave werkt met de actie For_each in de JSON-definitie van uw werkstroom, voegt u de parameter operationOptions toe en stelt u de waarde van de parameter in op Sequential:
"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 Limieten voor gelijktijdigheid, lussen en debatching voor de standaard- en maximumlimieten voor het aantal Until-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, wordt de volgende iteratie nog steeds uitgevoerd en wordt de volledige actie Until niet 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 opFailWhenLimitsReached, 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.
Maak in Azure Portal een logische app-resource met een lege werkstroom. Raadpleeg de eerdere procedure.
Volg in de ontwerper de algemene stappen om de ingebouwde trigger Planning met de naam Periodiciteit toe te voegen aan uw Consumption- of Standard-werkstroom.
Geef in de trigger Herhaling het interval, de frequentie en het tijdstip op waarop de trigger moet worden uitgevoerd.
Kenmerk Waarde Interval 1 Frequentie dag Deze uren 8 Op deze tijdstippen 00 Op deze uren en op deze minuten worden weergegeven nadat u Frequentie op Dag hebt ingesteld.
Wanneer u klaar bent, ziet de Recurrence-trigger er als volgt uit:
Volg onder de trigger deze algemene stappen om de ingebouwde actie Variabelen met de naam Variabelen initialiseren toe te voegen aan de logische-appwerkstroom Verbruik of Standaard.
Geef in de actie Variabelen initialiseren de volgende waarden op:
Kenmerk Waarde Beschrijving Naam Limiet De naam van uw variabele Typ Geheel getal Het gegevenstype van uw variabele Waarde 0 De beginwaarde van uw variabele Voer onder de actie Variabelen initialiseren de volgende algemene stappen uit om de ingebouwde actie Control met de naam Until toe te voegen aan de werkstroom van uw logische app Consumption of Standard.
Geef in de actie Until de volgende waarden op om de stopvoorwaarde voor de lus in te stellen.
Selecteer in het vak Herhalen tot en selecteer het bliksempictogram om de lijst met dynamische inhoud te openen.
Selecteer in de lijst onder Variabelen de variabele Limit.
Voer onder Aantal10 in als de vergelijkingswaarde.
Selecteer in de actie Until+>Een actie toevoegen.
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 .
Geef in de actie Variabele verhogen de volgende waarden op om de waarde van de variabele Limiet met 1 te verhogen:
Kenmerk Waarde Limiet Selecteer de variabele Limiet. Waarde 1 Volg buiten en onder de actie Until deze algemene stappen om een actie toe te voegen waarmee e-mail wordt verzonden in uw Consumption- of Standard-logische-app-werkstroom.
In dit voorbeeld wordt de actie Office 365 Outlook met de naam Een e-mailbericht verzenden voortgezet.
Geef in de e-mailactie de volgende waarden op:
Kenmerk Waarde Beschrijving te < 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.Hoofdtekst < 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:
Sla uw workflow op.
Uw werkstroom testen
Uw werkstroom voor logische apps handmatig testen:
- Selecteer op de werkbalk van de ontwerper vanuit de optie Uitvoeren de optie Uitvoeren.
Nadat uw werkstroom wordt uitgevoerd, ontvangt u een e-mailbericht met de inhoud die u hebt opgegeven:
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 |
|---|---|
| Aantal | 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 Until-acties dat een werkstroom kan bevatten. |
| 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 Limieten voor gelijktijdigheid, lussen en debatching voor de standaard- en maximumlimieten van de Timeout-waarde. |
De uitvoeringsgeschiedenis van iteraties van de Until-lus bekijken
Wanneer u de uitvoeringsgeschiedenis bekijkt voor een werkstroom die een Until-lus bevat, zijn de gedetailleerde status en resultaten voor acties binnen de lus alleen beschikbaar nadat de hele lus de uitvoering heeft voltooid. Terwijl de Until-lus nog steeds iteraties uitvoert, toont de lusactie de status Running, maar u kunt de resultaten van de afzonderlijke iteraties pas uitvouwen of doorlopen nadat de lus is voltooid.
De lus wordt afgesloten wanneer aan een van de volgende voorwaarden wordt voldaan:
- De opgegeven expressie evalueert naar true.
- De lus bereikt de limiet van Count.
- De lus bereikt de limiet van Timeout.
Nadat de lus is voltooid, kunt u de actie Until in de uitvoeringsgeschiedenis selecteren om elke iteratie en de status van de onderliggende acties in die iteratie weer te geven.
Notitie
Als de lus Until gedurende een langere periode wordt uitgevoerd, moet u wachten tot de lus volledig is voltooid voordat u de uitvoeringsgeschiedenis voor de resultaten van afzonderlijke iteraties kunt controleren. Als u langlopende, actieve lussen wilt bewaken, kunt u logboekregistratie- of meldingsacties toevoegen binnen de lus die bijvoorbeeld onafhankelijk de status verzenden door een bericht naar een wachtrij te verzenden of een variabele bij te werken die door een parallelle vertakking kan worden gelezen.
'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 roept de lus Until een HTTP-eindpunt aan dat een resource maakt. De lus stopt wanneer de hoofdtekst van het HTTP-antwoord wordt teruggegeven met de status Completed. Om eindeloze lussen te voorkomen, stopt de lus ook als een van de volgende omstandigheden plaatsvindt:
De lus werd 10 keer uitgevoerd, zoals gespecificeerd door het kenmerk
count. De standaardwaarde is 60 keer.De lus duurde twee uur, zoals opgegeven in het kenmerk
timeoutin 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": {}
}
}