将Web Activity调用的输出用作变量

时间:2018-04-06 12:56:35

标签: azure-data-factory azure-data-factory-2

我使用ADFv2传输一些数据。作为此操作的一部分,我需要将一些配置值传递到管道中。

必须在运行时从REST服务中提取配置值 - 而不是作为参数。

我可以使用Web Activity成功查询REST服务,我可以在调试视图中看到输出。

现在问题是:)

如何在管道中的其他活动中使用此输出?

我的网络活动配置如下:

{
"name": "Web1",
"type": "WebActivity",
"policy": {
   "timeout": "7.00:00:00",
   "retry": 0,
   "retryIntervalInSeconds": 30,
   "secureOutput": false
},
"typeProperties": {
   "url": "https://myazurefunction.azurewebsites.net/api/MyFunction",
   "method": "GET",
   "headers": {
   "Content-Type": "application/json"
   }
}

我已经尝试在执行后访问输出,但它似乎是空的:

@activity('Web1').Output
@activity('Web1').output
@string(activity('Web1').Output)

他们都是空的。有什么建议? 谢谢!

2 个答案:

答案 0 :(得分:3)

我设置了ADF2并尝试获得响应。

这对我有用:

@string(activity('Post').output)

您是否在调试中检查了输出?

这是我的输出:

{
    "test": {
        "value": 123,
        "text": abc
    },
    "concat": 123abc
}

我使用存储过程将值插入逻辑服务器上的目标表。

答案 1 :(得分:2)

在ADFv2中,您可以使用@activity('ActivityName').output访问先前活动的输出。

对于定义的Web活动,函数的响应应为JSON格式,因此您将在响应中使用其属性名称引用特定的JSON值。例如,您定义的Web活动Web1调用一个函数,该函数返回以下响应:

{
  "foo": "bar",
  "some": "value"
}

要在后续的ADF活动中使用foo的值,请引用@activity('Web1').output.foo。如果需要将返回值转换为另一种类型,则ADFv2提供了多种类型转换功能。

如果您的函数返回了一个空的JSON响应,则您可能希望使用Postman或其他工具检查函数的响应,以确保您返回的是格式正确的响应,并且您的函数不会因为其他原因而失败

在Azure函数代码中,您应该返回一个JSON对象以及成功代码,类似于return req.CreateResponse(HttpStatusCode.OK, json);

还请注意,如果您引用响应的属性并且该属性不存在,则ADF会在此时失败,因此您可以使用If Condition活动检查所需的值,以更好地处理ADFv2中的失败。