从管道中的多个步骤调用单个逻辑应用程序

Calling a singular Logic app from multiple steps in a pipeline

我创建了一个 ADF 管道,其中包含多个组件;执行存储过程,执行复制数据任务。总共有 14 个(7 对),我想触发一个失败,它会发送一封包含错误消息的电子邮件。

我已经创建了一个逻辑应用来发送电子邮件,如 link 中所述 http://microsoft-bitools.blogspot.com/2018/03/add-email-notification-in-azure-data.html

在'Web Activity'组件->设置->正文中,我有以下内容:

    "DataFactoryName":
        "@{pipeline().DataFactory}",
    "PipelineName":
        "@{pipeline().Pipeline}",
    "ErrorMessage":
        "@{activity('Execute Package').error.message}",
    "EmailTo":
        "@{pipeline().parameters.EmailTo}"
}

'Execute Package' 是存储过程或复制数据的名称 activity。

问题是它只对命名的 activity 'Execute Package' 有效。我一直无法找到它可以动态获取其来源的任何地方。 有没有办法只拥有一个单一的网络 activity?我不想在我的管道中再创建 14 个东西来处理不同的可能故障。 对 SendCompletionEmail 的调用在逻辑应用中运行良好,因为只有一件事在调用它。

我想花点时间指出,在解决眼前的问题(如何从多个来源中找出错误)之后,您将面临另一个问题:FailureSendEmail activity 将不是你期望的 运行。

第一个问题(如何获取失败者的错误): 假设您的管道是线性的,并且您只希望一个 activity 失败,而所有后续的都不会 运行,我建议您使用 coalesce 函数。 Coalesce 获取第一个非空参数。这是我使用 2 个存储过程得出的示例: @string(coalesce(activity('Stored Procedure1').Error,activity('Stored Procedure2').Error)) Coalesce 采用任意数量的参数,因此您可以根据需要扩展它。

另一个问题是所有 'on failure' 连接。虽然您构建的是有道理的,但请让我解释一下。当一个 activity 有多个依赖连接进入它时,它不会执行,除非所有依赖都报告进来。这些是 AND'ed,而不是 OR'ed。

幸运的是,您不需要直接连接即可引用 activity outputs/errors。您只需要一个间接连接。如果您的管道逻辑是线性的,那么您已经拥有了。删除进入 FailureSendEmail 的所有行。然后从上一个 'Copy Data' activity 添加一个 'on failure' 和一个 'skipped' 依赖关系。逻辑是这样的:

假设您 'happy path' 中的所有活动都由成功依赖关系连接, 如果一个 activity 在管道早期失败,则将跳过后续活动。这满足了跳过的依赖。 如果最后一个副本 activity 失败,则满足失败依赖关系。