Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à : Azure Logic Apps (Consommation + Standard)
Pour exécuter les mêmes actions sur chaque élément d’un tableau ou d’une collection, ou répéter des actions jusqu’à ce qu’un élément soit terminé dans votre workflow de l’application logique, ajoutez l’action Control nommée For each ou Until à votre flux de travail respectivement :
| Action | Tâche |
|---|---|
| Pour chacun | Répétez une ou plusieurs actions sur un ou plusieurs éléments d’un tableau ou d’une collection. S’applique uniquement aux tableaux et aux collections. Astuce : Si vous avez un déclencheur qui gère des tableaux et que vous souhaitez exécuter une instance de flux de travail pour chaque élément du tableau, réglez la propriété Fractionner sur du déclencheur pour scinder le tableau. Pour plus d’informations, voir Limites de concurrence, de boucle et de débat. |
| Until | Répétez une ou plusieurs actions jusqu’à ce qu’une condition soit remplie ou qu’un état spécifique change. Votre flux de travail exécute d’abord toutes les actions dans la boucle, puis vérifie la condition ou l’état. Si la condition est remplie, la boucle s’arrête. Dans le cas contraire, la boucle se répète. Pour plus d’informations, voir Limites de concurrence, de bouclage et de dégroupage. |
Ce guide montre comment ajouter une boucle à votre flux de travail, exécuter des itérations séquentielles et éviter les boucles sans fin. Passez directement à la tâche que vous souhaitez :
- Ajoutez une boucle For each à votre flux de travail
- Exécuter pour chaque itération séquentiellement
- Ajoutez une boucle Until à votre flux de travail
- Éviter les boucles sans fin
Remarque
Pour la documentation Power Automate, voir Boucles d’utilisation.
Prérequis
Un compte et un abonnement Azure. Obtenez un compte Azure gratuit.
Le workflow de l’application Logic où vous voulez exécuter la boucle, incluant un déclencheur qui lance le workflow.
Avant de pouvoir ajouter une action de boucle, votre flux de travail doit commencer par un déclencheur en première étape.
Ce guide utilise le portail Azure, mais vous pouvez utiliser Visual Studio Code et l’extension Azure Logic Apps correspondante pour créer des flux de travail Logic App :
- Créer des flux de travail de consommation dans Visual Studio Code
- Créer des flux de travail standards dans Visual Studio Code
Considérations relatives pour chaque boucle
Pour chaque action, il répète une ou plusieurs actions sur chaque tableau ou objet de collection.
L’action Pour chaque fonctionne uniquement avec des tableaux et des collections.
Pour chaque action, il traite un nombre limité d’éléments du tableau.
Par défaut, pour chaque action, les itérations s’exécutent en parallèle. Comportements clés à connaître :
Comportement Ce que cela signifie Parallèle par défaut Contrairement à la boucle Appliquer à chaque élément de Power Automate, les itérations ne s'exécutent pas une à la fois.
Si votre scénario nécessite un traitement séquentiel, voir Exécuter pour chaque itération séquentiellement. Par exemple, pour mettre en pause la prochaine itération dans une Pour chaque action en utilisant l’action Retard, configurez chaque itération pour qu’elle s’exécute séquentiellement.Boucles imbriquées Une action For each imbriquée s’exécute toujours séquentiellement. Pour exécuter en parallèle, créez et appelez un flux de travail enfant. Variables La variable d’incrément, la variable de diminution et la variable Ajouter à la variable peuvent donner des résultats imprévisibles dans les boucles parallèles. Pour s’assurer que les variables d’une boucle produisent des résultats prévisibles à partir des opérations sur ces variables à chaque itération, exécutez la boucle séquentiellement. Les actions d’une boucle Pour chaque utilisent la fonction
item()pour référencer, puis traiter chaque élément du tableau. Si vous spécifiez des données qui ne sont pas présentes dans le tableau, le workflow échoue.
Ajoutez une boucle For each à votre flux de travail
L’exemple de workflow suivant envoie un résumé quotidien pour le flux RSS d’un site web. Le workflow utilise une action Pour chaque qui envoie un e-mail pour chaque nouvel élément.
Dans le Portail Microsoft Azure, créez un workflow d’application logique avec les étapes suivantes dans l’ordre spécifié :
Le déclencheur RSS nommé Lors de la publication d’un élément de flux
Suivez ces étapes générales pour ajouter un déclencheur à un workflow d’application logique Consommation ou Standard .
L’action Outlook.com ou Office 365 Outlook nommée Envoyer un e-mail
Suivez ces étapes générales pour ajouter une action à un flux de travail d’application logique Consommation ou Standard .
Dans le concepteur, entre le déclencheur et l’action Envoyer un email , ajoutez l’action nommée Pour chacun en suivant les étapes générales selon votre type de workflow :
Générez maintenant la boucle :
Dans la section Pour chaque action, sélectionnez dans la case Sélectionner une sortie parmi les étapes précédentes pour voir les options d’entrée, puis sélectionnez l’icône de la foudre.
Dans la liste de contenu dynamique qui s’ouvre, sous Lorsqu’un élément de flux est publié, sélectionnez Liens de flux, qui est une sortie de tableau à partir du déclencheur RSS.
Remarque
Si le résultat Liens du flux n’apparaît pas, sélectionnez Afficher plus en regard de l’étiquette de section du déclencheur. Dans la liste de contenus dynamiques, vous pouvez sélectionner uniquement les résultats des étapes précédentes.
L’exemple suivant montre la sortie du tableau sélectionné :
Pour exécuter une action sur chaque élément du tableau, faites glisser l’action Envoyer un e-mail dans la boucle Pour chaque.
Votre flux de travail ressemble à l’exemple suivant :
Enregistrez votre flux de travail.
Pour tester manuellement votre flux de travail, dans la barre d’outils du concepteur, sélectionnez Exécuter>Exécuter.
Définition d’action Pour chaque (JSON)
Si vous travaillez en mode Code, vous pouvez définir l’action For_each dans la définition JSON de votre workflow. Par exemple :
"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"
}
},
Pour chacun : exécuter les itérations de boucles séquentiellement
Par défaut, les itérations d'une action Pour chaque s'exécutent en même temps en parallèle. Toutefois, si vous avez des boucles imbriquées ou que vous avez des variables à l’intérieur des boucles où vous attendez des résultats prévisibles, vous devez exécuter ces boucles une par une séquence séquentielle.
Dans le concepteur, sélectionnez l’action Pour chaque action pour ouvrir le volet d’informations, puis sélectionnez Paramètres.
Sous Contrôle d’accès concurrentiel, remplacez le paramètre Désactivé par Activé.
Déplacez le curseur Degré de parallélisme sur 1.
Définition de l’action « Pour chaque » (JSON) : exécution séquentielle
Si vous travaillez en mode code avec l’action dans la For_each définition JSON de votre workflow, ajoutez le operationOptions paramètre et définissez la valeur du paramètre sur Sequential:
"actions": {
"For_each": {
"actions": {
"Send_an_email_(V2)": { }
},
"foreach": "@triggerBody()?['links']",
"runAfter": {},
"type": "Foreach",
"operationOptions": "Sequential"
}
}
Considérations relatives aux boucles « until »
L’action Jusqu’à s’exécute et répète une ou plusieurs actions jusqu’à ce que la condition spécifiée requise soit remplie. Si la condition est remplie, la boucle s’arrête. Dans le cas contraire, la boucle se répète. Pour plus d’informations, voir Limites de concurrence, de boucle et de débat.
La liste suivante contient certains scénarios courants dans lesquels vous pouvez utiliser une action Jusqu’à :
Appeler un point de terminaison jusqu’à obtenir la réponse souhaitée.
Créer un enregistrement dans une base de données. Attendre qu’un champ spécifique dans cet enregistrement soit approuvé. Continuer le traitement.
Par défaut, l’action Until réussit ou échoue de la manière suivante :
La boucle Until réussit si toutes les actions à l’intérieur de la boucle réussissent et si la limite de boucle est atteinte, sur la base du comportement run after.
Si toutes les actions de la dernière itération de la boucle Until réussissent, la boucle Until entière est marquée comme Réussie.
Si une action échoue dans la dernière itération de la boucle Until , la boucle Until entière est marquée comme ayant échoué.
Si une action échoue dans une itération autre que la dernière itération, l’itération suivante continue à s’exécuter et l’action Until entière n’est pas marquée comme Ayant échoué.
Pour que l’action échoue à la place, modifiez le comportement par défaut dans la définition JSON de la boucle en ajoutant le paramètre nommé
operationOptions, et en définissant la valeurFailWhenLimitsReachedsur , par exemple :"Until": { "actions": { "Execute_stored_procedure": { <...> } }, "expression": "@equals(variables('myUntilStop'), true)", "limit": { "count": 5, "timeout": "PT1H" }, "operationOptions": "FailWhenLimitsReached", "runAfter": { "Initialize_variable": [ "Succeeded" ] }, "type": "Until" }
Ajoutez une boucle Until à votre flux de travail
Le flux de travail suivant commence chaque jour à 8h00. Le flux de travail utilise l’action Until pour incrémenter une variable jusqu’à ce que sa valeur soit égale à 10. Le workflow envoie ensuite un e-mail qui confirme la valeur actuelle. L’exemple utilise Office 365 Outlook, mais vous pouvez utiliser n’importe quel fournisseur de messagerie pris en charge par Azure Logic Apps. Si vous utilisez un autre compte de messagerie, les étapes générales restent les mêmes, mais semblent légèrement différentes.
Dans le Portail Azure, créez une ressource d’application logique avec un flux de travail vide.
Dans le concepteur, ajoutez le déclencheur intégré Schedule nommé Récurrence en suivant les étapes générales selon votre type de workflow :
Dans le déclencheur de récurrence , fournissez les informations suivantes :
Paramètre Valeur Intervalle 1 Fréquence Jour Aux heures indiquées 8 Aux minutes indiquées 00 À ces heures et à ces minutes s’affichent après avoir défini La fréquence sur Jour.
L’exemple suivant montre comment le déclencheur de Récurrence apparaît :
Dans le concepteur, ajoutez l’action intégrée Variablesnommée Initialisation de la variable en suivant les étapes générales basées sur votre type de workflow :
Dans l’action Initialiser la variable , fournissez les informations suivantes :
Paramètre Valeur Descriptif Nom Limite Le nom de votre variable. Type Integer Le type de données de votre variable. Valeur 0 La valeur de départ de votre variable. Sous l’action Initialiser la variable , ajoutez l’action intégrée Contrôle nommée Jusqu’à en suivant les étapes générales basées sur votre type de workflow :
Dans l’action Until, configurez la condition d’arrêt de la boucle :
Cliquez dans la zone Boucle jusqu’à, puis sélectionnez l’icône en forme d’éclair pour ouvrir la liste de contenu dynamique.
Dans la liste, sous Variables, sélectionnez la variable nommée Limit.
Sous Nombre, entrez 10 comme valeur de comparaison.
Dans l’action Until , sélectionnez +>Ajouter une action.
Ajoutez l’action intégrée Variables nommée variable Increment à l’action Until en suivant les étapes générales basées sur votre type de workflow :
Dans l’action Incrémenter une variable, indiquez les valeurs suivantes pour incrémenter la valeur de la variable Limit de 1 :
Paramètre Valeur Limite Sélectionnez la variable Limit. Valeur 1 À l’extérieur et à l’intérieur de l’action Until, ajoutez une action d’envoi d’e-mail en suivant les étapes générales correspondant à votre type de workflow :
Cet exemple se poursuit en utilisant l’action Office 365 Outlook nommée Envoyer un e-mail.
Dans l’action « E-mail », indiquez les valeurs suivantes :
Paramètre Valeur Descriptif À < e-mail-address@domain> Adresse e-mail du destinataire. Pour effectuer le test, utilisez votre propre adresse e-mail. Subject Valeur actuelle pour la variable « Limit » est la suivante :Limite L’objet de l’e-mail. Pour cet exemple, vérifiez que vous incluez la variable Limit pour confirmer que la valeur actuelle répond à votre condition spécifiée :
1. Sélectionnez à l’intérieur de la zone Objet , puis sélectionnez l’icône éclair.
2. Dans la liste de contenu dynamique qui s’ouvre, en regard de l’en-tête de section Variables , sélectionnez Plus d’informations.
3. Sélectionnez Limit.Corps < e-mail-content> Contenu de l’e-mail à envoyer. Pour cet exemple, entrez le texte de votre choix. L’exemple suivant montre comment apparaît votre action par email :
Enregistrez votre flux de travail.
Tester votre workflow
Pour tester manuellement votre flux de travail d’application logique :
- Dans la barre d’outils du concepteur, dans l’option Exécuter , sélectionnez Exécuter.
Lorsque votre workflow s’exécute, vous recevez un e-mail avec le contenu spécifié :
Empêcher les boucles infinies
L’action Until arrête l’exécution en fonction des paramètres facultatifs Count and Timeout . Veillez à définir ces valeurs de paramètre en conséquence :
| Paramètre | Descriptif |
|---|---|
| Nombre | Nombre maximal d’itérations qui s’exécutent avant que la boucle ne quitte. Pour en savoir plus sur les limites par défaut et maximale du nombre d’actions Jusqu’à qu’un workflow peut avoir, consultez Limites de simultanéité, de bouclage et de décomposition. |
| Délai d'expiration | Durée maximale d’exécution de l’action Jusqu’à (itérations comprises) avant que la boucle ne quitte. Cette valeur est spécifiée au format ISO 8601, et est évaluée pour chaque itération. Si une action dans la boucle dure plus longtemps que la limite de délai d’attente, l’itération en cours ne s’arrête pas. Toutefois, l’itération suivante ne démarre pas, car la condition de limite de délai d’attente n’est pas remplie. Pour obtenir les limites par défaut et maximale de la valeur Délai d’attente, consultez Limites de simultanéité, de bouclage et de décomposition. |
Examiner l’historique des exécutions des itérations de la boucle Until
Lorsque vous affichez l’historique des exécutions d’un flux de travail qui inclut une boucle Until , l’état détaillé et les résultats des actions à l’intérieur de la boucle sont disponibles uniquement une fois la boucle entière terminée son exécution. Bien que la boucle Until exécute toujours ses itérations, l’action de boucle affiche l’état En cours d’exécution , mais vous ne pouvez pas développer ou parcourir les résultats individuels de l’itération jusqu’à ce que la boucle se termine.
La boucle se termine quand l’une des conditions suivantes est remplie :
- L’expression spécifiée prend la valeur true.
- La boucle atteint la limite Nombre.
- La boucle atteint la limite de délai d’attente .
Une fois la boucle terminée, vous pouvez sélectionner l’action Until dans l’historique des exécutions pour afficher chaque itération et l’état des actions enfants dans cette itération.
Remarque
Si votre boucle Until s’exécute pendant une période prolongée, vous devez attendre que la boucle soit entièrement terminée avant de pouvoir inspecter l’historique des exécutions pour obtenir les résultats des itérations individuelles. Pour surveiller les boucles longues et en cours, envisagez d’ajouter des actions de journalisation ou de notification à l’intérieur de la boucle qui émettent indépendamment l’état, par exemple en envoyant un message à une file d’attente ou en mettant à jour une variable qu’une branche parallèle peut lire.
Définition de l’action « Jusqu’à » (JSON)
Si vous travaillez en mode Code, vous pouvez définir une action Until dans la définition JSON de votre workflow. Par exemple :
"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"
]
}
}
}
Cet exemple de boucle Until appelle un point de terminaison HTTP, qui crée une ressource. La boucle s’arrête quand le corps de réponse HTTP est retourné avec l’état Completed. Pour empêcher les boucles infinies, la boucle s’arrête aussi quand l’une de ces conditions est remplie :
La boucle s’est exécutée 10 fois comme spécifié par l’attribut
count. La valeur par défaut est de 60 fois.La boucle s’est exécutée pendant deux heures comme spécifié par l’attribut
timeoutau format ISO 8601. La valeur par défaut est d’une heure.
"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": {}
}
}