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 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
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.
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..
Si vous avez besoin d’exécuter une boucle séquentiellement, vous pouvez configurer votre degré de parallélisme à 1.
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.
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 »
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 :