Exception 如何在Azure逻辑应用程序中引发异常?

Exception 如何在Azure逻辑应用程序中引发异常?,exception,azure-logic-apps,Exception,Azure Logic Apps,是否可以在逻辑应用程序中引发异常 具体来说,我试图在一个范围内抛出一个异常。然后在作用域的run-after中,我会检查它是否失败,并检查它是否有错误。我尝试在作用域内使用terminate,但这会终止整个逻辑应用程序的运行。不,没有与C#中的抛出类似的操作或连接器 您现在能做的最接近的事情是使用另一个LogicApp,而不是使用可以返回特定状态代码的作用域。对于这个内部Logic App或其小兄弟Power Automation/Microsoft Flow,似乎仍然没有任何选项 我提出并在一

是否可以在逻辑应用程序中引发异常


具体来说,我试图在一个范围内抛出一个异常。然后在作用域的run-after中,我会检查它是否失败,并检查它是否有错误。我尝试在作用域内使用terminate,但这会终止整个逻辑应用程序的运行。

不,没有与C#中的抛出类似的操作或连接器


您现在能做的最接近的事情是使用另一个LogicApp,而不是使用可以返回特定状态代码的作用域。

对于这个内部Logic App或其小兄弟Power Automation/Microsoft Flow,似乎仍然没有任何选项

我提出并在一些流中使用的方法是,我只需为我知道会失败的事情添加一个操作

最简单的(而且可能是最便宜的,因为内置操作在逻辑应用程序中成本较低,即使我们这里讨论的是一美元的分数),可能是初始化一个变量,例如称为ThrowException的整数类型。 然后在我希望流失败的地方添加一个“Set variable”操作,在这里我将值(记住它是integer类型)设置为任何字符串表达式。我只使用表达式字符串('Exception')

由于该值是通过表达式设置的,因此它仍然是有效的模板,但在实际设置该值时,在运行时将失败。 在此之后,只需像往常一样使用具有适当Run-After设置的并行分支

快速回答(TL;DR)
  • 问题:MSFT Azure逻辑应用程序引发异常
  • 解决方案:使用logic app Scope元素模拟抛出异常
    • 创建一个scope元素用作“try-catch”块
    • 使用无效命令强制作用域元素失败,以模拟异常
    • 允许scope元素自然失败,这也将被视为异常
详细答案 上下文
  • MSFT Azure逻辑应用程序工作流
  • 自2020年6月14日起的实时版本
问题
  • 场景:开发人员希望在逻辑应用程序中引发异常或使用try-catch语义
解决方案
  • 使用逻辑应用程序范围元素
  • 在scope元素中添加条件语句
  • 如果条件语句满足失败条件,则使用故意无效的命令强制执行异常
    • 例如,创建一个值为
      int(“错误”)的变量赋值
  • 如果条件语句不满足失败条件,则不执行任何操作
  • 逻辑应用程序的其余部分由两条路径组成
    • 第一条路径在scope元素成功时运行
    • 第二条路径在scope元素出现故障时运行(失败、跳过、超时)
例子
  • 创建一个范围元素作为“try-catch”块

  • 使用无效命令创建变量compose元素
int(“错误”)这将导致封闭作用域失败 ##字符串\uuuu ERROR\uuuu不能转换为整数
  • 响应包含异常的Scope元素的退出状态
另见
  • 关于强制异常的相关答案

作为更新的解决方案,我们可以使用Terminate control,Terminate control有3种状态:失败、取消和成功


如何使用变量?假设某个操作在某个范围内失败,我们将状态代码&error分配给变量(失败后运行)。然后,我们可以在范围之外使用这些变量,并对这些变量的值进行判定?我同意它可以使逻辑应用程序设计更复杂(甚至更昂贵),但最终它是可行的不?当然,这将完全起作用,状态变量只是另一个你检查的变量,就像任何其他变量一样。对于不支持“传统”异常处理的场景,状态检查非常常见。@StevenVanEycken是的,我就是这样做的。它工作,但感觉笨重。你能用终止动作。。。谢谢你的详细回答。我想说这并不理想,但可能是我们目前所能做的最好的。我一直在努力让它工作,直到我在你的屏幕截图中将@添加到编写代码中。。。“@int('ERROR')”@SteveC说得好。。。无论何时使用逻辑应用程序代码,您都必须区分
mycommand('foo')
{mycommand('foo')}
,因为JSON的插值方式与逻辑应用程序中代码的组成方式不同。注意:屏幕截图中的示例可以重构为一个logicapp元素,而不是两个。这可以通过使用带有保证失败的logicapp表达式的
变量compose
元素来实现。例如,您可以使用
int(“'u error')
。是的,听起来不错。请记住,这家伙不能在循环中使用:( int('__ERROR__') ## this will cause the enclosing scope to fail ## the string __ERROR__ cannot be cast to integer