Exécuter des boucles pour répéter des actions dans les flux de travail pour Azure Logic Apps

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 :

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 :

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.

  1. Dans le Portail Microsoft Azure, créez un workflow d’application logique avec les étapes suivantes dans l’ordre spécifié :

  2. 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 :

  3. Générez maintenant la boucle :

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

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

      Capture d’écran qui montre le portail Azure et le concepteur de workflow avec une action nommée Pour chacun et la liste de contenu dynamique ouverte.

      L’exemple suivant montre la sortie du tableau sélectionné :

      Capture d’écran qui montre le concepteur de workflow et l’action nommée Pour chacun avec une sortie de tableau sélectionnée.

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

      Capture d’écran qui montre le concepteur de workflow, l’action nommée Pour chacun, et l’action nommée Envoyer un email, maintenant à l’intérieur de Pour chaque action.

  4. Enregistrez votre flux de travail.

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

  1. Dans le concepteur, sélectionnez l’action Pour chaque action pour ouvrir le volet d’informations, puis sélectionnez Paramètres.

  2. Sous Contrôle d’accès concurrentiel, remplacez le paramètre Désactivé par Activé.

  3. Déplacez le curseur Degré de parallélisme sur 1.

    Capture d’écran montrant l’action Pour chaque, l’onglet Paramètres et le paramètre Contrôle de la concurrence activé, avec le curseur du degré de parallélisme réglé 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 valeur FailWhenLimitsReachedsur , 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.

  1. Dans le Portail Azure, créez une ressource d’application logique avec un flux de travail vide.

  2. 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 :

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

    Capture d’écran montrant le portail Azure et le concepteur de workflow avec les paramètres de déclenchement de récurrence configurés.

  4. 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 :

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

    Capture d’écran qui montre le portail Azure, le concepteur de workflow et l’action intégrée nommée Initialisation de la variable, plus les paramètres.

  6. 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 :

  7. Dans l’action Until, configurez la condition d’arrêt de la boucle :

    1. Cliquez dans la zone Boucle jusqu’à, puis sélectionnez l’icône en forme d’éclair pour ouvrir la liste de contenu dynamique.

    2. Dans la liste, sous Variables, sélectionnez la variable nommée Limit.

    3. Sous Nombre, entrez 10 comme valeur de comparaison.

    Capture d’écran qui montre le flux de travail et une action intégrée nommée Jusqu’à présent, avec les valeurs décrites.

  8. Dans l’action Until , sélectionnez +>Ajouter une action.

  9. 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 :

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

    Capture d’écran montrant le flux de travail et une action intégrée nommée Jusqu’à, avec Limite définie sur la variable Limite et Valeur définie sur 1.

  11. À 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.

  12. 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 :

    Capture d’écran montrant un flux de travail et une action nommée Envoyer un e-mail avec des valeurs de propriété.

  13. 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é :

Capture d’écran montrant un exemple d’email reçu d’un exemple de workflow.

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

Étapes suivantes