Créer des boucles pour répéter des actions dans des flux de travail avec Azure Logic Apps

S’applique à : Azure Logic Apps (Consommation + Standard)

Azure Logic Apps comprend les actions de boucle suivantes que vous pouvez utiliser dans votre flux de travail :

  • Pour répéter une ou plusieurs actions sur des éléments d’un tableau, ajoutez l’action For each action à votre flux de travail.

    Sinon, si vous disposez d’un déclencheur qui reçoit un tableau et souhaite exécuter une itération pour chaque élément du tableau, vous pouvez dégrouper ce tableau avec le déclencheur de propriété SplitOn.

  • Pour répéter une ou plusieurs actions jusqu’à ce qu’une condition soit remplie ou qu’un état change, ajoutez l’action « Jusqu’à » à votre workflow.

    Votre workflow 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 en savoir plus sur les limites par défaut et maximale du nombre de boucles Jusqu’à qu’un workflow peut avoir, consultez la rubrique Limites de simultanéité, de bouclage et de décomposition.

Prérequis

Pour chaque

L’action For each fonctionne uniquement sur les tableaux et répète une ou plusieurs actions sur chaque élément d’un tableau. La liste suivante contient certaines considérations à prendre en compte lorsque vous souhaitez utiliser une action Pour chaque :

  • L’action Pour chaque peut traiter un nombre limité d’éléments de tableau. Pour connaître cette limite, consultez Limites de concurrence, de bouclage et de décomposition.

  • Par défaut, les cycles ou itérations d’une action Pour chaque s’exécutent en même temps en parallèle.

    Ce comportement diffère de la boucle Appliquer à chaque de Power Automate où les itérations s’exécutent l’une après l’autre, ou séquentiellement. Toutefois, vous pouvez configurer des itérations Pour chaque séquentielles. Par exemple, pour suspendre l’itération suivante dans une action Pour chaque à l’aide de l’action « Retarder », vous devez définir chaque itération pour qu’elle s’exécute de façon séquentielle.

    L’exception au comportement par défaut est celle de l’action Pour chaque imbriquée où les itérations s’exécutent toujours séquentiellement et non en parallèle. Pour exécuter des opérations en parallèle pour les éléments d’une boucle imbriquée, créez, puis appelez une application logique enfant.

  • Pour obtenir des résultats prévisibles à partir d’opérations exécutées sur des variables pendant chaque itération d’action, exécutez lesdites itérations de manière séquentielle. Par exemple, quand une itération exécutée simultanément se termine, les opérations Incrémenter une variable, Décrémenter une variable et Ajouter à la variable retournent des résultats prévisibles. Toutefois, pendant chaque itération de la boucle s’exécutant simultanément, ces opérations peuvent retourner des résultats imprévisibles.

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

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.

En fonction du workflow dont vous disposez (Consommation ou Standard), suivez la procédure correspondante :

  1. Dans le Portail Azure, créez un exemple de workflow d’application logique « Consommation » avec les étapes suivantes dans l’ordre indiqué :

  2. Suivez ces mêmes étapes générales pour ajouter l’action Pour chaque entre le déclencheur RSS et l’action Envoyer un e-mail dans le workflow.

  3. Générez maintenant la boucle :

    1. Cliquez dans la zone Sélectionnez un résultat à partir des étapes précédentes afin d’ouvrir la liste de contenus dynamiques.

    2. Dans la liste Ajouter du contenu dynamique de la section Lors de la publication d’un élément de flux, sélectionnez Liens du flux, qui est un résultat du tableau 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.

      Screenshot shows Azure portal, Consumption workflow designer, action named For each, and opened dynamic content list.

      Lorsque vous avez terminé, le résultat de tableau sélectionné s’affiche comme dans l’exemple suivant :

      Screenshot shows Consumption workflow, action named For each, and selected array output.

    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.

      Maintenant, votre workflow ressemble à l’exemple suivant :

      Screenshot shows Consumption workflow, action named For each, and action named Send an email, now inside For each loop.

  4. Lorsque vous avez terminé, enregistrez votre flux de travail.

  5. Pour tester manuellement votre workflow, sélectionnez Exécuter le déclencheur >Exécuter dans la barre d’outils du concepteur.

Pour chaque définition d’action (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 chaque : exécution séquentielle

Par défaut, les itérations dans une boucle Pour chaque s’exécutent simultanément ou parallèlement. Toutefois, lorsque vous avez imbriqué des boucles ou des variables à l’intérieur de boucles pour lesquelles vous attendez des résultats prévisibles, vous devez exécuter ces boucles individuellement ou séquentiellement.

  1. En haut à droite de l’action Pour chaque, sélectionnez les points de suspension () >Paramètres.

  2. Modifiez le paramètre Contrôle d’accès concurrentiel de Désactivé à Activé.

  3. Positionnez le curseur Degré de parallélisme sur 1, puis sélectionnez Terminé.

    Screenshot shows Consumption workflow, action named For each, concurrency control setting turned on, and degree of parallelism slider set to 1.

Définition de l’action « Pour chaque » (JSON) : exécution séquentielle

Si vous travaillez en mode Code avec l’action For_each dans la définition JSON de votre workflow, vous pouvez utiliser l’option Sequential en ajoutant le paramètre operationOptions. Par exemple :

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

Jusqu’à

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 en savoir plus sur les limites par défaut et maximale du nombre d’actions ou d’itérations Jusqu’à qu’un workflow peut avoir, consultez la rubrique Limites de simultanéité, de bouclage et de décomposition.

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.

Dans l’exemple de workflow suivant, à partir de 8h00 chaque jour, l’action Jusqu’à incrémente une variable jusqu’à ce que sa valeur soit égale à 10. Le workflow envoie ensuite un e-mail qui confirme la valeur actuelle.

Remarque

Cet 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 sont identiques, mais l’affichage de l’interface utilisateur peut être légèrement différent.

  1. Dans le portail Azure, créez votre ressource d’application logique « Consommation » avec un workflow vide.

  2. Dans le concepteur, suivez ces étapes générales pour ajouter le déclencheur Périodicité intégré nommé Planification à votre workflow.

  3. Dans le déclencheur Périodicité, spécifiez l’intervalle, la fréquence et l’heure du jour associés au déclenchement du déclencheur.

    Propriété Valeur
    Intervalle 1
    Fréquence Day
    Aux heures indiquées 8

    Pour ajouter le paramètre Aux heures indiquées, ouvrez la liste Ajouter un paramètre, puis sélectionnez Aux heures indiquées, qui apparaît uniquement après avoir défini Fréquence sur Jour.

    Screenshot shows Azure portal, Consumption workflow designer, and Recurrence trigger parameters with selected option for At these hours.

    Lorsque vous avez terminé, le déclencheur Périodicité ressemble à l’exemple suivant :

    Screenshot shows Azure portal, Consumption workflow, and Recurrence trigger parameters set up.

  4. Sous le déclencheur, suivez ces étapes générales pour ajouter l’action intégrée Variables nommée Initialiser la variable à votre workflow.

  5. Dans l’action Initialiser la variable, indiquez les valeurs suivantes :

    Propriété Valeur Description
    Nom Limite Nom de votre variable
    Type Entier Type de données de votre variable
    Valeur 0 Valeur de départ de votre variable

    Screenshot shows Azure portal, Consumption workflow, and parameters for built-in action named Initialize variable.

  6. Sous l’action Initialiser la variable, suivez ces étapes générales pour ajouter l’action intégrée Contrôler nommée Jusqu’à à votre workflow.

  7. Dans l’action Jusqu’à, indiquez les valeurs suivantes pour configurer la condition d’arrêt de la boucle.

    1. Cliquez dans la zone la plus à gauche nommée Choisir une valeur, ce qui ouvre automatiquement la liste de contenus dynamiques.

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

    3. Dans la liste des opérateurs du milieu, sélectionnez l’opérateur Est égal à.

    4. Dans la zone la plus à droite nommée Choisir une valeur, saisissez 10 comme valeur de comparaison.

    Screenshot shows Consumption workflow and built-in action named Until with finished stop condition.

  8. Dans l’action Jusqu’à, sélectionnez Ajouter une action.

  9. Dans la zone de recherche Choisir une opération, suivez ces étapes générales pour ajouter l’action intégrée Variables nommée Incrémenter une variable à l’action Jusqu’à.

  10. Dans l’action Incrémenter une variable, indiquez les valeurs suivantes pour incrémenter la valeur de la variable Limite de 1 :

    Propriété Valeur
    Nom Sélectionnez la variable Limite.
    Valeur 1

    Screenshot shows Consumption workflow and built-in action named Until with Name set to the Limit variable and Value set to 1.

  11. En dehors, sous l’action Jusqu’à, suivez ces étapes générales pour ajouter une action visant à envoyer un e-mail.

    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 :

    Propriété Valeur Description
    To <email-address@domain> Adresse e-mail du destinataire. Pour effectuer le test, utilisez votre propre adresse e-mail.
    Objet La valeur actuelle de la variable « Limite » est :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. Cliquez dans la zone Objet pour afficher la liste de contenus dynamiques.

    2. Dans la liste de contenus dynamiques, en regard de l’en-tête de section Variables, sélectionnez Afficher plus.

    3. Sélectionnez Limite.
    Corps <email-content> Contenu de l’e-mail à envoyer. Pour cet exemple, saisissez le texte de votre choix.

    Lorsque vous avez terminé, votre action « E-mail » ressemble à l’exemple qui suit :

    Screenshot shows Consumption workflow and action named Send an email with property values.

  13. Enregistrez votre flux de travail.

Tester votre workflow

Pour tester manuellement votre workflow d’application logique, suivez la procédure applicable au type d’application logique (« Consommation » ou « Standard ») dont vous disposez.

Dans la barre d’outils du concepteur, sélectionnez Exécuter le déclencheur>Exécuter.

Lorsque votre workflow s’exécute, vous recevez un message électronique avec le contenu spécifié :

Screenshot shows sample email received from example workflow.

Empêcher les boucles infinies

L’action Jusqu’à arrête l’exécution en fonction des propriétés suivantes, que vous pouvez afficher en sélectionnant Modifier les limites dans l’action. Veillez à définir ces valeurs de propriété en conséquence :

Propriété Description
Count 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 la rubrique 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.

Définition (JSON) de la boucle « Until »

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

Étapes suivantes