发生错误时停止在foreach中执行Logic App

时间:2019-01-15 16:49:10

标签: azure-logic-apps

我正在构建一个逻辑应用程序,其中包含一个同步样式的foreach循环(一次只能执行一次,并发= 1)。每个foreach循环中都有一个switch语句,该语句根据foreach循环要迭代的项的内容来调用不同的子Logic应用程序。

我发现,如果这些子逻辑应用程序之一失败,则foreach循环将继续进行,就好像什么都没发生一样,并执行由数组内容确定的后续任务。我找不到任何方法来停止(中断)foreach的执行或基于foreach循环中一个子逻辑应用程序的故障而终止整个逻辑应用程序。

如果相同的子Logic App失败而没有进入foreach循环,则父Logic App的执行将停止。这似乎是一个非常奇怪的设计决定,并且与Logic App执行在循环内还是循环外的行为不一致。

附加说明:为了增加伤害,在执行子Logic App时,即使它是HTTP触发器和响应,您也似乎无法访问它在调用中返回的HTTP状态代码(父)逻辑应用程序。因此,即使我想手动测试循环中遇到的每种情况,也无法弄清楚该怎么做。

3 个答案:

答案 0 :(得分:1)

我想出了一种解决方法。

我使用Scope操作将switch语句(在其中调用了子逻辑应用程序的程序)封装在foreach内。 Scope操作从其中的任何内容“继承”失败。

作用域之后,在foreach末尾,我测试了作用域的状态。如果失败,则将“ break”变量(在Logic App的开头初始化为false)设置为“ true”。

在每个foreach迭代的开始,我检查“ break”变量。如果为“ true”,则将跳过foreach中的所有内容。

答案 1 :(得分:0)

我认为目前尚无好的方法。通常,我会使用在先前操作失败的情况下运行的终止操作。但是,在foreach中不允许终止操作。 Issue on the feedback forum

也许您可以通过使用直到操作而不是foreach来解决它,并具有何时中断的条件。对于子逻辑应用程序,您可以使用响应操作并将响应代码设置为500或类似的值,然后检查直到。

编辑:对不起,您很想念您无法在父母那里得到代码的地方。

如果您通过Http调用子逻辑应用,则应该能够从其获取状态代码。enter image description here

答案 2 :(得分:0)

您可以改用 until 连接器。

在使用连接器之前,请创建一个变量,该变量可用于设置布尔表达式(使用“表达式”部分的bool()函数将任何表达式转换为布尔值)。
然后在直到语句中使用该变量。

enter image description here

一旦条件变量设置为GLKView,循环将终止。

当然,您也可以使用变量方法来检查每个语句的内部,如果为false,则不执行任何操作, 但是我认为这不会阻止每个循环在数组上进行迭代。