3
votes

Arrêter l'exécution de l'application logique dans foreach en cas d'erreur

Je construis une application logique qui contient une boucle foreach dans un style synchrone (contraint à une exécution à la fois, concurrence = 1). Dans chaque boucle foreach, il y a une instruction switch qui appelle différentes applications logiques enfants en fonction du contenu de l'élément sur lequel la boucle foreach est itérée.

J'ai découvert que si l'une de ces applications logiques enfants échouait, la boucle foreach continue comme si de rien n'était, exécutant les tâches suivantes comme déterminé par le contenu du tableau. Je ne trouve aucun moyen d'arrêter (interrompre) l'exécution de foreach ou de mettre fin à l'ensemble de l'application logique en raison de l'échec de l'une des applications logiques enfants dans la boucle foreach.

Si la même application logique enfant échouait sans être dans la boucle foreach, l'exécution de l'application logique mère serait interrompue. Cela semble une décision de conception très étrange et crée une incohérence avec la façon dont l'exécution de Logic App se comporte à l'intérieur ou à l'extérieur d'une boucle.

Remarque supplémentaire: pour ajouter une insulte à une blessure, lorsque vous exécutez une application logique enfant, même s'il s'agit d'un déclencheur et d'une réponse HTTP, vous ne semblez pas avoir accès au code d'état HTTP qu'il renvoie dans l'appel (parent) Logic App. Donc, même si je voulais tester manuellement chaque cas que j'ai dans ma boucle, je ne peux pas comprendre comment faire cela.


2 commentaires

lorsque vous appelez une application logique à partir d'une autre application logique, elle renverra un 202. C'est pourquoi votre application logique parente ne s'arrête pas. L'ajout d'une action de réponse http dans votre application logique enfant pourrait résoudre le problème


@Thomas Cela ne résout pas le problème. Mes applications logiques enfants sont déjà créées avec les réponses HTTP appropriées pour les erreurs.


3 Réponses :


0
votes

Je ne pense pas qu'il y ait une bonne façon de faire cela pour le moment. Normalement, j'utiliserais une action de terminaison qui s'exécute en cas d'échec de l'action précédente. Mais les actions de terminaison ne sont pas autorisées dans un foreach. Problème sur les commentaires forum

Vous pouvez peut-être le résoudre en utilisant une action jusqu'à au lieu de foreach et avoir une condition pour savoir quand interrompre. Et pour l'application logique enfant, vous pouvez utiliser une action de réponse et définir le code de réponse comme 500 ou quelque chose et vérifier cela dans le jusqu'à.

Modifier: Désolé, vous avez manqué où vous n'avez pas pu obtenir le code dans le parent.

Vous devriez pouvoir obtenir le code d'état de l'application logique enfant si vous l'appelez via Http ..  entrez la description de l'image ici


0 commentaires

2
votes

J'ai trouvé une solution de contournement.

J'ai encapsulé l'instruction switch (dans laquelle mes applications logiques enfants sont appelées) dans le foreach avec une action Scope. L'action Scope "hérite" d'un échec de tout ce qu'il contient.

Après le Scope, à la fin du foreach, je teste le statut du Scope. Si c'est un échec, je règle une variable "break" (initialisée au démarrage de l'application logique sur false) sur "true".

Au début de chaque itération foreach, je vérifie la variable "break". Si c'est "vrai", tout ce qui se trouve à l'intérieur de foreach est ignoré.


0 commentaires

0
votes

Vous pouvez utiliser le jusqu'au connecteur à la place.

Avant d'utiliser le connecteur, veuillez créer une variable pouvant être utilisée pour définir des expressions booléennes (pour convertir une expression en booléen, utilisez fonction bool () de la section Expressions).
Ensuite, à l'intérieur de l'instruction jusqu'à, utilisez cette variable.

 entrez la description de l'image ici

Et la boucle se terminera une fois que la variable de condition sera définie sur false .

Bien sûr, vous pouvez également utiliser l'approche variable pour vérifier à l'intérieur de chaque instruction et ne pas faire d'actions si elle est false , mais je pense que cela n'aidera pas à arrêter pour chaque boucle d'itérer sur le tableau.


3 commentaires

salut @arsen pouvez-vous s'il vous plaît aider dans ma question


Salut, @Lynnette, veuillez me parler de la question, car je ne vois pas votre question ici.


désolé @arsen, je viens de publier la question sur ma page. Je ne suis pas sûr de pouvoir le publier ici. Il explique comment mettre à jour un champ imbriqué à l'aide des applications logiques