Ce que vous devez savoir sur les boucles For each des Logic App Azure

Oguzhan Yigit
Publié par Oguzhan
Catégorie : Azure / Logic Apps
23/03/2018

L’action “For each” avec les Logic Apps Azure

Depuis que l’action “For each” existe, les possibilités d’intégration avec les Logics Apps Azure ont considérablement évoluées, et les flux d’intégration même complexes, sont mis en oeuvre simplement. Si vous êtes sur le point d’utiliser une action de type “For each”, vous devez toujours avoir à l’esprit son fonctionnement. De mon expérience, les points les plus importants sont :

  • Les itérations
  • Le parallélisme
  • Les limitations

Itérer au sein de votre Logic App Azure

Les itérations sur une boucle for each se base sur le parcours d’un tableau. Donc le paramètre d’entrée de l’action “For each” ne peut être qu’une variable de type tableau. En fonction de vos besoins, ce tableau peut être une variable, le résultat d’une requête SQL (ou procédure stockée), le résultat d’une requête xpath ou encore la sortie de n’importe quelle expression ou connecteur qui serait de type tableau (array). Positionnez simple l’expression qui retourne un tableau dans le paramètre d’entrée du connecteur “For each”.

Par exemple la capture suivante montre une boucle “For each” sur le résultat d’une requête xpath

for each iteration

Dans une boucle, si vous souhaitez accéder à l’élement en cours, utilisez l’expression “item()”. Cette expression retourne l’élément de la boucle en cours.

Azure logic for each item

Parallélisme et For Each

Lorsque je m’en suis rendu compte la première fois, j’ai trouvé cela assez étrange. Oui par défaut, les itérations d’une boucle “For Each” sont parallélisées. Avec le recul, j’ai accepté ce concept, et, dans la plupart des cas, ce comportement est bénéfique ne serait-ce qu’en temps d’exécution. Le nombre d’exécution en parallèles est cependant configurable assez simplement en utilisant l’éditeur de logic app ou l’éditeur de code. Utilisez simple l’onglet “Settings” de votre action “For Each”, cliquez sur “Override default” et choisissez le degré de parallélisme qui vous convient..

Azure logic app for each parametres

Si vous avez besoin d’exécuter une boucle séquentiellement, vous pouvez configurer votre degré de parallélisme à 1.

Conséquence du parallélisme de l’action “For each”

Parce que dans une Logic App Azure l’action “for each” utilise le parallélisme, chaque iteration s’execute tel un thread. Donc vous ne pouvez pas arrêter votre logic app dans un For each ni arrêter le processus lorsqu’une itération se termine en erreur. Cela est vrai même si votre degré de parallélisme est à 1. Préférer une boucle de type “do until” si vous devez absolument arrêter votre flux lorsqu’une itération flanche.

Eviter l’assignation et l’incrémentation de variables

Considerez que l’assignation de variables dans une boucle de type “for each” comme une mauvaise pratique. A cause du parallélisme, vous ne pourrez jamais savoir quand est-ce l’assignation survient (avant ou après une autre itération). Par exemple, si vous devez incrémenter une variable, à nouveau, vous devrez utiliser une boucle de type “do until”

Limites de la boucle “For Each”

Pour avoir le détail des limitations des logics apps, consultez https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-limits-and-config. Pour la boucle “For Each”, retenez essentiellement que :

  • le nombre d’itération est limité a 100 000
  • Le dégré de parallélisme est limité à 50 avec une valeur par défaut à 20