首页 > 解决方案 > 如果 Azure 逻辑应用中的 Scope 操作中的任何操作失败,如何捕获异常详细信息

问题描述

我已经实现了 Azure Logic App 来执行我的业务流程。对于异常处理,我使用了 Scope操作。但是我想在Scope中任何操作失败的情况下捕获异常详细信息。

用于处理异常的示例逻辑应用流程:

在此处输入图像描述

标签: azureazure-logic-apps

解决方案


result()函数提供有关范围内所有操作的结果的上下文。 result()函数接受一个参数,即作用域的名称,并返回一个数组,其中包含该作用域内的所有操作结果。这些操作对象包含与对象相同的属性actions(),例如操作的开始时间、结束时间、状态、输入、相关 ID 和输出。要为范围内失败的任何操作发送上下文,您可以轻松地将@result()表达式与runAfter属性配对。

要为具有失败结果的范围内的每个操作运行操作,并将结果数组过滤到失败的操作,您可以将@result()表达式与过滤器数组操作和 For each 循环配对。For_each您可以获取过滤后的结果数组并使用循环对每个失败执行操作。

下面是一个示例,后面附有详细说明,它发送一个 HTTP POST 请求,其中包含在“”范围内失败的任何操作的响应正文My_Scope

"Filter_array": {
   "type": "Query",
   "inputs": {
      "from": "@result('My_Scope')",
      "where": "@equals(item()['status'], 'Failed')"
   },
   "runAfter": {
      "My_Scope": [
         "Failed"
      ]
    }
},
"For_each": {
   "type": "foreach",
   "actions": {
      "Log_exception": {
         "type": "Http",
         "inputs": {
            "method": "POST",
            "body": "@item()['outputs']['body']",
            "headers": {
               "x-failed-action-name": "@item()['name']",
               "x-failed-tracking-id": "@item()['clientTrackingId']"
            },
            "uri": "http://requestb.in/"
         },
         "runAfter": {}
      }
   },
   "foreach": "@body('Filter_array')",
   "runAfter": {
      "Filter_array": [
         "Succeeded"
      ]
   }
}

有关此建议的更多详细信息,您可以访问Get context and results for failures in Scope


推荐阅读