ADF V2 - 使用动态内容和变量的 Web POST 方法
ADF V2 - Web POST method using Dynamic Content and Variable
非常短的版本
如何在 ADF 的 Web Activity 中的 JSON POST 请求中包含 ADF 变量?
我觉得这应该是一个非常简单的字符串连接,但我无法让它工作
详情
我们需要从 ADF 中 运行 查询/存储过程,这将 return 包含错误消息的字符串。然后,该字符串将通过 ADF 中的 Web Activity 传递到逻辑应用程序,以便发送包含错误的电子邮件。
逻辑应用的设置是从这里复制的:
https://www.mssqltips.com/sqlservertip/5718/azure-data-factory-pipeline-email-notification--part-1/
然后在这里(第 2 部分)
在 ADF 中,我使用了 Lookup activity 到 运行 查询,这又带回了错误(似乎有效,预览 returns 正确的字符串)
然后我使用 Set Variable activity 获取查找的输出并将其存储在变量中。
最后一步是使用 Web Activity.
启动 POST
在我的网站 Activity 中使用此代码(略微调整以删除个人详细信息),一切正常,我收到一封电子邮件
{
"DataFactoryName": "@{pipeline().DataFactory}",
"PipelineName": "@{pipeline().Pipeline}",
"Subject": "Pipeline finished!",
"ErrorMessage": "Everything is okey-dokey!",
"EmailTo": "me@myEmail.com"
}
但是任何将变量的内容放入主题部分的尝试都失败了。
这(例如)给我发了一封电子邮件,主题字面上是 @variables('EmailSubject')
{
"DataFactoryName": "@{pipeline().DataFactory}",
"PipelineName": "@{pipeline().Pipeline}",
"Subject": "@variables('EmailSubject')",
"ErrorMessage": "Everything is okey-dokey!",
"EmailTo": "me@myEmail.com"
}
但我也尝试过其他各种导致错误的解决方案,或者电子邮件主题只包含我放入其中的文字内容(例如 + @variables('EmailSubject') +)。
我还尝试将整个 JSON 存储在变量中,然后让 Web activity 仅使用变量,returned 没有错误,但也没有发送一封电子邮件。
这次尝试:
{
"DataFactoryName": "@{pipeline().DataFactory}",
"PipelineName": "@{pipeline().Pipeline}",
"Subject": "@{variables('EmailSubject')}",
"ErrorMessage": "Everything is okey-dokey!",
"EmailTo": "me@myEmail.com"
}
导致此输入到网络中 activity - 实际上包括错误文本,这是一个奖励......(文本 = 作业持续时间警告):
{
"url": "https://azureLogicAppsSiteHere",
"method": "POST",
"headers": {
"Content-Type": "application/json"
},
"body": "{\n \"DataFactoryName\": \"DFNAMEHERE\",\n \"PipelineName\": \"pipeline1\",\n \"Subject\": \"{\"firstRow\":{\"\":\"Job Duration Warning\"},\"effectiveIntegrationRuntime\":\"DefaultIntegrationRuntime (West Europe)\",\"billingReference\":{\"activityType\":\"PipelineActivity\",\"billableDuration\":[{\"meterType\":\"AzureIR\",\"duration\":0.016666666666666666,\"unit\":\"DIUHours\"}]},\"durationInQueue\":{\"integrationRuntimeQueue\":0}}\",\n \"ErrorMessage\": \"Everything is okey-dokey!\",\n \"EmailTo\": \"me@myEmail.com\"\n}\t"
}
但随后导致了这个错误:
{
"errorCode": "2108",
"message": "{\"error\":{\"code\":\"InvalidRequestContent\",\"message\":\"The request content is not valid and could not be deserialized: 'After parsing a value an unexpected character was encountered: f. Path 'Subject', line 4, position 17.'.\"}}",
"failureType": "UserError",
"target": "Web1",
"details": []
}
[编辑] 查找 Activity 中的 PREVIEW 是文本:Job Duration Warning 但是当我调试管道,它让我看到实际的输出,它是这样的:
{
"count": 1,
"value": [
{
"": "Job Duration Warning"
}
],
"effectiveIntegrationRuntime": "DefaultIntegrationRuntime (West Europe)",
"billingReference": {
"activityType": "PipelineActivity",
"billableDuration": [
{
"meterType": "AzureIR",
"duration": 0.016666666666666666,
"unit": "DIUHours"
}
]
},
"durationInQueue": {
"integrationRuntimeQueue": 0
}
}
看来问题是查找输出不是我想的那样,所以该变量不能在 Web Activity 中使用,因为它包含不受支持的字符或其他内容那些线。
我刚刚测试了这个,它工作正常:
- 创建值为 Job Duration Warning
的字符串参数
- 设置变量值为@pipeline().parameters.ParamSubject
- 在 web activity 中包含变量,并在其前面加上一个 @
然后我收到了我预期的主题正确的电子邮件。我只是不知道如何将查询的字符串输出转换为变量/参数,以便我可以在网络中使用它 activity.
我不知道这对其他人的问题有多适用,但我找到了一个对我有用的解决方案。
- 在 Lookup SELECT 查询中 Activity - 命名输出(在我的例子中,我将该列称为 'Subject'- 即 SELECT xyz AS Subject
- 在查找 Activity 中,启用设置 'First Row Only'
- 在设置变量Activity中,使用代码:@activity('Lookup1').output.firstRow.subject
(其中 'Lookup1' 是您的 Lookup Activity 的名称,而 Subject 是您要输出的列的名称)
- 在网络中Activity,引用变量如下:
{
"DataFactoryName": "@{pipeline().DataFactory}",
"PipelineName": "@{pipeline().Pipeline}",
"Subject": "@{variables('EmailSubject')}",
"ErrorMessage": "Everything is okey-dokey!",
"EmailTo": "me@myEmail.com"
}
非常短的版本
如何在 ADF 的 Web Activity 中的 JSON POST 请求中包含 ADF 变量? 我觉得这应该是一个非常简单的字符串连接,但我无法让它工作
详情
我们需要从 ADF 中 运行 查询/存储过程,这将 return 包含错误消息的字符串。然后,该字符串将通过 ADF 中的 Web Activity 传递到逻辑应用程序,以便发送包含错误的电子邮件。
逻辑应用的设置是从这里复制的:
https://www.mssqltips.com/sqlservertip/5718/azure-data-factory-pipeline-email-notification--part-1/
然后在这里(第 2 部分)
在 ADF 中,我使用了 Lookup activity 到 运行 查询,这又带回了错误(似乎有效,预览 returns 正确的字符串) 然后我使用 Set Variable activity 获取查找的输出并将其存储在变量中。
最后一步是使用 Web Activity.
启动 POST在我的网站 Activity 中使用此代码(略微调整以删除个人详细信息),一切正常,我收到一封电子邮件
{
"DataFactoryName": "@{pipeline().DataFactory}",
"PipelineName": "@{pipeline().Pipeline}",
"Subject": "Pipeline finished!",
"ErrorMessage": "Everything is okey-dokey!",
"EmailTo": "me@myEmail.com"
}
但是任何将变量的内容放入主题部分的尝试都失败了。
这(例如)给我发了一封电子邮件,主题字面上是 @variables('EmailSubject')
{
"DataFactoryName": "@{pipeline().DataFactory}",
"PipelineName": "@{pipeline().Pipeline}",
"Subject": "@variables('EmailSubject')",
"ErrorMessage": "Everything is okey-dokey!",
"EmailTo": "me@myEmail.com"
}
但我也尝试过其他各种导致错误的解决方案,或者电子邮件主题只包含我放入其中的文字内容(例如 + @variables('EmailSubject') +)。
我还尝试将整个 JSON 存储在变量中,然后让 Web activity 仅使用变量,returned 没有错误,但也没有发送一封电子邮件。
这次尝试:
{
"DataFactoryName": "@{pipeline().DataFactory}",
"PipelineName": "@{pipeline().Pipeline}",
"Subject": "@{variables('EmailSubject')}",
"ErrorMessage": "Everything is okey-dokey!",
"EmailTo": "me@myEmail.com"
}
导致此输入到网络中 activity - 实际上包括错误文本,这是一个奖励......(文本 = 作业持续时间警告):
{
"url": "https://azureLogicAppsSiteHere",
"method": "POST",
"headers": {
"Content-Type": "application/json"
},
"body": "{\n \"DataFactoryName\": \"DFNAMEHERE\",\n \"PipelineName\": \"pipeline1\",\n \"Subject\": \"{\"firstRow\":{\"\":\"Job Duration Warning\"},\"effectiveIntegrationRuntime\":\"DefaultIntegrationRuntime (West Europe)\",\"billingReference\":{\"activityType\":\"PipelineActivity\",\"billableDuration\":[{\"meterType\":\"AzureIR\",\"duration\":0.016666666666666666,\"unit\":\"DIUHours\"}]},\"durationInQueue\":{\"integrationRuntimeQueue\":0}}\",\n \"ErrorMessage\": \"Everything is okey-dokey!\",\n \"EmailTo\": \"me@myEmail.com\"\n}\t"
}
但随后导致了这个错误:
{
"errorCode": "2108",
"message": "{\"error\":{\"code\":\"InvalidRequestContent\",\"message\":\"The request content is not valid and could not be deserialized: 'After parsing a value an unexpected character was encountered: f. Path 'Subject', line 4, position 17.'.\"}}",
"failureType": "UserError",
"target": "Web1",
"details": []
}
[编辑] 查找 Activity 中的 PREVIEW 是文本:Job Duration Warning 但是当我调试管道,它让我看到实际的输出,它是这样的:
{
"count": 1,
"value": [
{
"": "Job Duration Warning"
}
],
"effectiveIntegrationRuntime": "DefaultIntegrationRuntime (West Europe)",
"billingReference": {
"activityType": "PipelineActivity",
"billableDuration": [
{
"meterType": "AzureIR",
"duration": 0.016666666666666666,
"unit": "DIUHours"
}
]
},
"durationInQueue": {
"integrationRuntimeQueue": 0
}
}
看来问题是查找输出不是我想的那样,所以该变量不能在 Web Activity 中使用,因为它包含不受支持的字符或其他内容那些线。
我刚刚测试了这个,它工作正常:
- 创建值为 Job Duration Warning 的字符串参数
- 设置变量值为@pipeline().parameters.ParamSubject
- 在 web activity 中包含变量,并在其前面加上一个 @
然后我收到了我预期的主题正确的电子邮件。我只是不知道如何将查询的字符串输出转换为变量/参数,以便我可以在网络中使用它 activity.
我不知道这对其他人的问题有多适用,但我找到了一个对我有用的解决方案。
- 在 Lookup SELECT 查询中 Activity - 命名输出(在我的例子中,我将该列称为 'Subject'- 即 SELECT xyz AS Subject
- 在查找 Activity 中,启用设置 'First Row Only'
- 在设置变量Activity中,使用代码:@activity('Lookup1').output.firstRow.subject (其中 'Lookup1' 是您的 Lookup Activity 的名称,而 Subject 是您要输出的列的名称)
- 在网络中Activity,引用变量如下:
{
"DataFactoryName": "@{pipeline().DataFactory}",
"PipelineName": "@{pipeline().Pipeline}",
"Subject": "@{variables('EmailSubject')}",
"ErrorMessage": "Everything is okey-dokey!",
"EmailTo": "me@myEmail.com"
}