Json ADF V2-使用动态内容和变量的Web POST方法

Json ADF V2-使用动态内容和变量的Web POST方法,json,azure-logic-apps,azure-data-factory-2,Json,Azure Logic Apps,Azure Data Factory 2,非常短的版本 如何在JSON POST请求中,在ADF中的Web活动中包含ADF变量? 我觉得这应该是一个非常简单的字符串连接,但我无法让它工作 细节 我们需要从ADF中运行查询/存储过程,它将返回一个包含错误消息的字符串。然后,该字符串将通过ADF中的Web活动传递给逻辑应用程序,以便发送包含错误的电子邮件 逻辑应用程序的设置从此处复制: 然后在这里(第二部分) 在ADF中,我使用了查找活动来运行一个查询,该查询会返回错误(显示正常,预览返回正确的字符串) 然后,我使用设置变量活动获取查找

非常短的版本

如何在JSON POST请求中,在ADF中的Web活动中包含ADF变量? 我觉得这应该是一个非常简单的字符串连接,但我无法让它工作

细节

我们需要从ADF中运行查询/存储过程,它将返回一个包含错误消息的字符串。然后,该字符串将通过ADF中的Web活动传递给逻辑应用程序,以便发送包含错误的电子邮件

逻辑应用程序的设置从此处复制:

然后在这里(第二部分)

在ADF中,我使用了查找活动来运行一个查询,该查询会返回错误(显示正常,预览返回正确的字符串) 然后,我使用设置变量活动获取查找的输出并将其存储在变量中

最后一步是使用Web活动触发帖子

在我的网络活动中有了这段代码(稍加调整以删除个人详细信息),一切正常,我收到了一封电子邮件

{
   "DataFactoryName": "@{pipeline().DataFactory}",
   "PipelineName": "@{pipeline().Pipeline}",
   "Subject": "Pipeline finished!",
   "ErrorMessage": "Everything is okey-dokey!",
   "EmailTo": "me@myEmail.com"
}
但任何将变量内容放入主题部分的尝试都失败了

这(例如)给我发送了一封主题为@variables('EmailSubject')

但我也尝试过各种其他解决方案,这些解决方案会导致错误或电子邮件主题只包含我放在其中的文字内容(例如+@variables('EmailSubject')+)

我还尝试将整个JSON存储在变量中,然后让Web活动仅使用该变量,该变量不会返回任何错误,但也不会发送电子邮件

这一尝试:

{
   "DataFactoryName": "@{pipeline().DataFactory}",
   "PipelineName": "@{pipeline().Pipeline}",
   "Subject": "@{variables('EmailSubject')}",
   "ErrorMessage": "Everything is okey-dokey!",
   "EmailTo": "me@myEmail.com"
}   
导致将此输入到web活动中-实际上包含错误文本,这是一个额外的。。。(文本=作业持续时间警告):

但随后导致了这个错误:

{
    "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": []
}
[编辑]查找活动中的预览是文本:作业持续时间警告,但当我调试管道时,它让我看到实际输出,即:

{
    "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活动中使用,因为它包含不受支持的字符或类似的内容

我刚刚测试了这个,它工作正常:

  • 使用值作业持续时间警告创建字符串参数
  • 将变量值设置为@pipeline().parameters.ParamSubject
  • 在web活动中包含前面带有@的变量

然后,我收到了预期的主题正确的电子邮件。我只是不知道如何将查询的字符串输出转换成变量/参数,以便在web活动中使用。

我不知道这对其他人的问题有多适用,但我找到了一个适合我的解决方案

  • 在查找活动中的SELECT查询中,命名输出(在我的例子中,我将该列称为“主题”),即选择xyz作为主题
  • 在“查找”活动中,启用“仅第一行”设置
  • 在设置变量Activity中,使用代码:@Activity('Lookup1').output.firstRow.subject (其中'Lookup1'是查找活动的名称,Subject是要输出的列的名称)
  • 在Web活动中,按如下方式引用变量:

你能发布变量Email主题的内容吗?我猜这是一个很长的过程,或者包含了导致D序列化问题的SOM字符。将EMAIL主题的内容清理掉可能会有问题的字符。谢谢@弗洛德-我确实考虑过了,所以我把它修剪成了基本的东西——C。当前设置为:作业持续时间警告我通过查找活动中的“预览”选项确认了这是查询返回的结果。实际上,我认为您是正确的-当我使用预览数据时,我看到字符串我期望>>“作业持续时间警告”,但在我尝试运行管道后,您可以检查查找的实际输出,这是正确的重新复杂化(我将编辑原始帖子以包含此信息)相反,如果我将参数类型字符串设置为等于“作业持续时间警告”,然后将变量设置为等于该参数,则Web活动将触发并向我发送一封主题为“作业持续时间警告”的电子邮件。即,查找没有输出我认为是的内容
{
    "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": []
}
{
    "count": 1,
    "value": [
        {
            "": "Job Duration Warning"
        }
    ],
    "effectiveIntegrationRuntime": "DefaultIntegrationRuntime (West Europe)",
    "billingReference": {
        "activityType": "PipelineActivity",
        "billableDuration": [
            {
                "meterType": "AzureIR",
                "duration": 0.016666666666666666,
                "unit": "DIUHours"
            }
        ]
    },
    "durationInQueue": {
        "integrationRuntimeQueue": 0
    }
}
{
   "DataFactoryName": "@{pipeline().DataFactory}",
   "PipelineName": "@{pipeline().Pipeline}",
   "Subject": "@{variables('EmailSubject')}",
   "ErrorMessage": "Everything is okey-dokey!",
   "EmailTo": "me@myEmail.com"
}