Créer des boucles qui répètent des actions de workflow ou des tableaux de processus dans Azure Logic AppsCreate loops that repeat workflow actions or process arrays in Azure Logic Apps

Pour traiter un tableau dans votre application logique, vous pouvez créer une boucle « Foreach ».To process an array in your logic app, you can create a "Foreach" loop. Cette boucle répète une ou plusieurs actions sur chaque élément du tableau.This loop repeats one or more actions on each item in the array. Pour connaître les limites applicables au nombre d’éléments de tableau que des boucles « Foreach » peuvent traiter, consultez Limites et configurations.For limits on the number of array items that "Foreach" loops can process, see Limits and configuration.

Pour répéter des actions jusqu’à ce qu’une condition soit remplie ou qu’un état change, vous pouvez créer une boucle « Until ».To repeat actions until a condition gets met or a state changes, you can create an "Until" loop. Votre application logique exécute d’abord toutes les actions dans la boucle, puis elle vérifie la condition ou l’état.Your logic app first runs all the actions inside the loop, and then checks the condition or state. Si la condition est remplie, la boucle s’arrête.If the condition is met, the loop stops. Dans le cas contraire, la boucle se répète.Otherwise, the loop repeats. Pour connaître les limites applicables au nombre de boucles « Until » dans une exécution d’application logique, consultez Limites et configurations.For limits on the number of "Until" loops in a logic app run, see Limits and configuration.

Conseil

Si vous disposez d’un déclencheur qui reçoit un tableau et souhaite exécuter un workflow pour chaque élément du tableau, vous pouvez dégrouper ce tableau avec le déclencheur de propriété SplitOn.If you have a trigger that receives an array and want to run a workflow for each array item, you can debatch that array with the SplitOn trigger property.

PrérequisPrerequisites

Boucle « Foreach »"Foreach" loop

Une boucle « Foreach » répète une ou plusieurs actions sur chaque élément du tableau et fonctionne uniquement sur les tableaux.A "Foreach loop" repeats one or more actions on each array item and works only on arrays. Les itérations dans une boucle « Foreach » s’exécutent en parallèle.Iterations in a "Foreach" loop run in parallel. Toutefois, vous pouvez exécuter des itérations une à la fois en configurant une boucle « Foreach » séquentielle.However, you can run iterations one at a time by setting up a sequential "Foreach" loop.

Voici quelques considérations liées à l’utilisation des boucles « Foreach » :Here are some considerations when you use "Foreach" loops:

  • Dans les boucles imbriquées, les itérations s’exécutent toujours de manière séquentielle, pas en parallèle.In nested loops, iterations always run sequentially, not in parallel. Pour exécuter des opérations en parallèle pour les éléments d’une boucle imbriquée, créez et appelez une application logique enfant.To run operations in parallel for items in a nested loop, create and call a child logic app.

  • Pour obtenir des résultats prévisibles à partir d’opérations exécutées sur des variables pendant chaque itération de boucle, exécutez ces boucles de manière séquentielle.To get predictable results from operations on variables during each loop iteration, run those loops sequentially. Par exemple, quand une boucle exécutée simultanément se termine, les opérations d’incrémentation, de décrémentation et d’ajout aux variables retournent des résultats prévisibles.For example, when a concurrently running loop ends, the increment, decrement, and append to variable operations return predictable results. Toutefois, pendant chaque itération de la boucle s’exécutant simultanément, ces opérations peuvent retourner des résultats imprévisibles.However, during each iteration in the concurrently running loop, these operations might return unpredictable results.

  • Les actions dans une boucle « Foreach » utilisent l’expression @item()Actions in a "Foreach" loop use the @item() pour référencer et traiter chaque élément du tableau.expression to reference and process each item in the array. Si vous spécifiez des données qui ne sont pas présentes dans le tableau, le workflow de l’application logique échoue.If you specify data that's not in an array, the logic app workflow fails.

Cet exemple d’application logique envoie un résumé quotidien pour le flux RSS d’un site web.This example logic app sends a daily summary for a website RSS feed. L’application utilise une boucle « Foreach » qui envoie un e-mail pour chaque nouvel élément.The app uses a "Foreach" loop that sends an email for each new item.

  1. Créez cet exemple d’application logique avec un compte Outlook.com ou Office 365 Outlook.Create this sample logic app with an Outlook.com or Office 365 Outlook account.

  2. Entre le déclencheur RSS et l’action Envoyer un courrier électronique, ajoutez une bouche « Foreach ».Between the RSS trigger and send email action, add a "Foreach" loop.

    1. Pour ajouter une boucle entre des étapes, placez votre pointeur au-dessus de la flèche qui les sépare.To add a loop between steps, move your pointer over the arrow between those steps. Choisissez le signe plus ( + ) qui s’affiche, puis sélectionnez Ajouter une action.Choose the plus sign (+) that appears, then select Add an action.

      Sélectionner « Ajouter une action »

    2. Sous la zone de recherche, choisissez Tout.Under the search box, choose All. Dans la zone de recherche, tapez « for each » comme filtre.In the search box, type "for each" as your filter. Dans la liste des actions, sélectionnez cette action : For each - ContrôleFrom the actions list, select this action: For each - Control

      Ajouter une boucle « for each »

  3. Générez maintenant la boucle.Now build the loop. Sous Sélectionner une sortie des étapes précédentes, après que la liste Ajouter contenu dynamique s’affiche, sélectionnez le tableau Liens du flux, qui sort du déclencheur RSS.Under Select an output from previous steps after the Add dynamic content list appears, select the Feed links array, which is output from the RSS trigger.

    Sélectionner depuis la liste de contenu dynamique

    Notes

    Vous pouvez sélectionner seulement des sorties de tableau de l’étape précédente.You can select only array outputs from the previous step.

    Le tableau sélectionné s’affiche maintenant ici :The selected array now appears here:

    Sélectionner le tableau

  4. Pour exécuter une action sur chaque élément du tableau, faites glisser l’action Envoyer un message électronique dans la boucle.To run an action on each array item, drag the Send an email action into the loop.

    Votre application logique peut ressembler à cet exemple :Your logic app might look something like this example:

    Ajouter des étapes à la boucle « Foreach »

  5. Enregistrez votre application logique.Save your logic app. Pour tester manuellement votre application logique, sélectionnez Exécuter dans la barre d’outils du concepteur.To manually test your logic app, on the designer toolbar, choose Run.

Définition de la boucle « Foreach » (JSON)"Foreach" loop definition (JSON)

Si vous travaillez en mode code pour votre application logique, vous pouvez définir la boucle Foreach dans la définition JSON de votre application logique à la place, par exemple :If you're working in code view for your logic app, you can define the Foreach loop in your logic app's JSON definition instead, for example:

"actions": {
   "myForEachLoopName": {
      "type": "Foreach",
      "actions": {
         "Send_an_email": {
            "type": "ApiConnection",
            "inputs": {
               "body": {
                  "Body": "@{item()}",
                  "Subject": "New CNN post @{triggerBody()?['publishDate']}",
                  "To": "me@contoso.com"
               },
               "host": {
                  "api": {
                     "runtimeUrl": "https://logic-apis-westus.azure-apim.net/apim/office365"
                  },
                  "connection": {
                     "name": "@parameters('$connections')['office365']['connectionId']"
                  }
               },
               "method": "post",
               "path": "/Mail"
            },
            "runAfter": {}
         }
      },
      "foreach": "@triggerBody()?['links']",
      "runAfter": {}
   }
}

Boucle « Foreach » : Sequential"Foreach" loop: Sequential

Par défaut, les cycles dans une boucle « Foreach » s’exécutent en parallèle.By default, cycles in a "Foreach" loop run in parallel. Pour exécuter chaque cycle de manière séquentielle, définissez l’option Sequential de la boucle.To run each cycle sequentially, set the loop's Sequential option. Les boucles « Foreach » doivent s’exécuter séquentiellement quand vous avez des boucles imbriquées ou des variables à l’intérieur de boucles où vous attendez des résultats prévisibles."Foreach" loops must run sequentially when you have nested loops or variables inside loops where you expect predictable results.

  1. En haut à droite de la boucle, choisissez Ellipses ( ... ) > Paramètres.In the loop's upper right corner, choose ellipses (...) > Settings.

    Dans la boucle « Foreach », choisissez « ... » > « Paramètres »

  2. Sous Contrôle d’accès concurrentiel, affectez la valeur On au paramètre Contrôle d’accès concurrentiel.Under Concurrency Control, turn the Concurrency Control setting to On. Déplacez le curseur Degré de parallélisme sur 1, puis choisissez Terminé.Move the Degree of Parallelism slider to 1, and choose Done.

    Activer le contrôle d’accès concurrentiel

Si vous travaillez avec la définition JSON de votre application logique, vous pouvez utiliser l’option Sequential en ajoutant le paramètre operationOptions, par exemple :If you're working with your logic app's JSON definition, you can use the Sequential option by adding the operationOptions parameter, for example:

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

Boucle « Until »"Until" loop

Pour exécuter et répéter des actions jusqu’à ce qu’une condition soit remplie ou qu’un état change, placez ces actions dans une boucle « Until ».To run and repeat actions until a condition gets met or a state changes, put those actions in an "Until" loop. Votre application logique exécute d’abord toutes les actions dans la boucle, puis elle vérifie la condition ou l’état.Your logic app first runs any and all actions inside the loop, and then checks the condition or state. Si la condition est remplie, la boucle s’arrête.If the condition is met, the loop stops. Dans le cas contraire, la boucle se répète.Otherwise, the loop repeats.

Voici quelques scénarios courants dans lesquels vous pouvez utiliser une boucle « Until » :Here are some common scenarios where you can use an "Until" loop:

  • Appeler un point de terminaison jusqu’à obtenir la réponse souhaitée.Call an endpoint until you get the response you want.

  • Créer un enregistrement dans une base de données.Create a record in a database. Attendre qu’un champ spécifique dans cet enregistrement soit approuvé.Wait until a specific field in that record gets approved. Continuer le traitement.Continue processing.

À partir de 8h00 chaque jour, cet exemple d’application logique incrémente une variable jusqu’à ce que sa valeur soit égale à 10.Starting at 8:00 AM each day, this example logic app increments a variable until the variable's value equals 10. L’application logique envoie ensuite un e-mail qui confirme la valeur actuelle.The logic app then sends an email that confirms the current value.

Notes

Ces étapes utilisent Office 365 Outlook, mais vous pouvez utiliser n’importe quel fournisseur de messagerie pris en charge par Logic Apps.These steps use Office 365 Outlook, but you can use any email provider that Logic Apps supports. Vérifiez la liste des connecteurs ici.Check the connectors list here. 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.If you use another email account, the general steps stay the same, but your UI might look slightly different.

  1. Créez une application logique vide.Create a blank logic app. Dans le Concepteur d’application logique, sous la zone de recherche, choisissez Tout.In Logic App Designer, under the search box, choose All. Recherchez « récurrence ».Search for "recurrence". Dans la liste des déclencheurs, sélectionnez ce déclencheur : Récurrence - PlanificationFrom the triggers list, select this trigger: Recurrence - Schedule

    Ajouter le déclencheur « Récurrence - Planification »

  2. Spécifiez l’envoi du déclencheur en définissant l’intervalle, la fréquence et l’heure du jour.Specify when the trigger fires by setting the interval, frequency, and hour of the day. Pour définir l’heure, choisissez Afficher les options avancées.To set the hour, choose Show advanced options.

    Configurer la planification de la récurrence

    PropriétéProperty ValeurValue
    IntervalleInterval 11
    FréquenceFrequency jourDay
    Aux heures indiquéesAt these hours 88
  3. Sous le déclencheur, choisissez Nouvelle étape.Under the trigger, choose New step. Recherchez « variables », puis sélectionnez cette action : Initialiser la variable - VariablesSearch for "variables", and select this action: Initialize variable - Variables

    Ajouter une action « Initialiser la variable - Variables »

  4. Configurez votre variable avec ces valeurs :Set up your variable with these values:

    Définir les propriétés de la variable

    PropriétéProperty ValeurValue DescriptionDescription
    NomName LimiteLimit Nom de votre variableYour variable's name
    TypeType EntierInteger Type de données de votre variableYour variable's data type
    ValeurValue 00 Valeur de départ de votre variableYour variable's starting value
  5. Sous l’action Initialiser la variable, choisissez Nouvelle étape.Under the Initialize variable action, choose New step.

  6. Sous la zone de recherche, choisissez Tout.Under the search box, choose All. Recherchez « until », puis sélectionnez cette action : Until - ContrôleSearch for "until", and select this action: Until - Control

    Ajouter une boucle « Until »

  7. Générez la condition de sortie de la boucle en sélectionnant la variable Limite et l’opérateur Est égal à.Build the loop's exit condition by selecting the Limit variable and the is equal operator. Entrez 10 comme valeur de comparaison.Enter 10 as the comparison value.

    Générer la connexion de sortie pour arrêter la boucle

  8. Dans la boucle, choisissez Ajouter une action.Inside the loop, choose Add an action.

  9. Sous la zone de recherche, choisissez Tout.Under the search box, choose All. Recherchez « variables », puis sélectionnez cette action : Incrémenter une variable - VariablesSearch for "variables", and select this action: Increment variable - Variables

    Ajouter une action pour incrémenter une variable

  10. Comme Nom, sélectionnez la variable Limite.For Name, select the Limit variable. Comme Valeur, entrez « 1 ».For Value, enter "1".

    Incrémenter la variable « Limite » de 1

  11. En dehors et sous la boucle, choisissez Nouvelle étape.Outside and under the loop, choose New step.

  12. Sous la zone de recherche, choisissez Tout.Under the search box, choose All. Recherchez et ajoutez une action qui envoie un e-mail, par exemple :Find and add an action that sends email, for example:

    Ajouter une action d’envoi de message électronique

  13. Si vous y êtes invité, connectez-vous à votre compte e-mail.If prompted, sign in to your email account.

  14. Définissez les propriétés de l’action d’e-mail.Set the email action's properties. Ajoutez la variable Limite au sujet.Add the Limit variable to the subject. De cette façon, vous pouvez confirmer que la valeur actuelle de la variable corresponde aux conditions que vous avez spécifiées. Par exemple :That way, you can confirm the variable's current value meets your specified condition, for example:

    Configurer les propriétés du message électronique

    PropriétéProperty ValeurValue DescriptionDescription
    ToTo <adresse e-mail@domaine><email-address@domain> Adresse e-mail du destinataire.The recipient's email address. Pour effectuer le test, utilisez votre propre adresse e-mail.For testing, use your own email address.
    ObjetSubject La valeur actuelle de la variable « Limite » est LimiteCurrent value for "Limit" is Limit Spécifiez l’objet du message électronique.Specify the email subject. Pour cet exemple, assurez-vous d’inclure la variable Limite.For this example, make sure that you include the Limit variable.
    CorpsBody <email-content><email-content> Spécifiez le contenu du message électronique à envoyer.Specify the email message content you want to send. Pour cet exemple, écrivez ce que vous voulez.For this example, enter whatever text you like.
  15. Enregistrez votre application logique.Save your logic app. Pour tester manuellement votre application logique, sélectionnez Exécuter dans la barre d’outils du concepteur.To manually test your logic app, on the designer toolbar, choose Run.

    Lorsque votre application logique s’exécute, vous recevez un message électronique avec le contenu spécifié :After your logic starts running, you get an email with the content that you specified:

    Message électronique reçu

Empêcher les boucles infiniesPrevent endless loops

Une boucle « Until » dispose de limites par défaut qui arrêtent l’exécution si l’une de ces conditions est remplie :An "Until" loop has default limits that stop execution if any of these conditions happen:

PropriétéProperty Valeur par défautDefault value DescriptionDescription
CountCount 6060 Quantité maximale de boucles qui s’exécutent avant que la boucle ne sorte.The highest number of loops that run before the loop exits. La valeur par défaut est 60 cycles.The default is 60 cycles.
Délai d'expirationTimeout PT1HPT1H Durée d’exécution maximale d’une boucle avant que la boucle ne sorte.The most amount of time to run a loop before the loop exits. La valeur par défaut est d’une heure et est spécifiée au format ISO 8601.The default is one hour and is specified in ISO 8601 format.

La valeur du délai d’attente est évaluée pour chaque cycle de boucle.The timeout value is evaluated for each loop cycle. Si une action dans la boucle dure plus longtemps que la limite de délai d’attente, le cycle actuel ne s’arrête pas.If any action in the loop takes longer than the timeout limit, the current cycle doesn't stop. Toutefois, le cycle suivant ne démarre pas, car la condition de limite n’est pas remplie.However, the next cycle doesn't start because the limit condition isn't met.

Pour modifier ces limites par défaut, choisissez Afficher les options avancées dans la forme d’action de la boucle.To change these default limits, choose Show advanced options in the loop action shape.

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

Si vous travaillez en mode code pour votre application logique, vous pouvez définir une boucle Until dans la définition JSON de votre application logique à la place, par exemple :If you're working in code view for your logic app, you can define an Until loop in your logic app's JSON definition instead, for example:

"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.This example "Until" loop calls an HTTP endpoint, which creates a resource. La boucle s’arrête quand le corps de réponse HTTP est retourné avec l’état Completed.The loop stops when the HTTP response body returns with Completed status. Pour empêcher les boucles infinies, la boucle s’arrête aussi si l’un de ces conditions est remplie :To prevent endless loops, the loop also stops if any of these conditions happen:

  • La boucle s’est exécutée 10 fois comme spécifié par l’attribut count.The loop ran 10 times as specified by the count attribute. La valeur par défaut est de 60 fois.The default is 60 times.

  • La boucle s’est exécutée pendant deux heures comme spécifié par l’attribut timeout au format ISO 8601.The loop ran for two hours as specified by the timeout attribute in ISO 8601 format. La valeur par défaut est d’une heure.The default is one hour.

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

Obtenir de l’aideGet support

Étapes suivantesNext steps