在Logic App参数函数

时间:2016-07-29 09:35:05

标签: json xml azure-servicebus-queues azure-logic-apps

当我尝试使用Service Bus消息中的数据触发我的Logic App(省略内部xml)时,我收到了来自SharePoint Get-Item操作的错误:

  

无法在第1行和第1641行的“Get_items”输入中处理模板语言表达式:'模板语言函数'json'参数无效。无法解析提供的值“<?xml version="1.0" encoding="utf-8"?> <Projektaufgabe id="b92d6817-694e-e611-80ca-005056a5e651" messagename="Update"> ... </Projektaufgabe>”:'解析值时遇到意外的字符:。路径'',第0行,第0位。'。

解码后的消息xml看起来还可以在错误消息中引用。

收到的队列消息正文似乎没问题 - 只有ContentType为空: (ContentData截断)

{
  "ContentData": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBl...=",
  "ContentType": "",
  "ContentTransferEncoding": "Base64",
  "Properties": {
    "DeliveryCount": "1",
    "EnqueuedSequenceNumber": "20000001",
    "EnqueuedTimeUtc": "2016-07-29T09:03:40Z",
    "ExpiresAtUtc": "2016-08-12T09:03:40Z",
    "LockedUntilUtc": "2016-07-29T09:04:10Z",
    "LockToken": "67796ed8-a9f0-4f6a-952b-ccf4eda00071",
    "MessageId": "f3ac2ce4e7b6417386611f6817bf5da1",
    "ScheduledEnqueueTimeUtc": "0001-01-01T00:00:00Z",
    "SequenceNumber": "31806672388304129",
    "Size": "1989",
    "State": "Active",
    "TimeToLive": "12096000000000"
  },
  "MessageId": "f3ac2ce4e7b6417386611f6817bf5da1",
  "To": null,
  "ReplyTo": null,
  "ReplyToSessionId": null,
  "Label": null,
  "ScheduledEnqueueTimeUtc": "0001-01-01T00:00:00Z",
  "SessionId": null,
  "CorrelationId": null,
  "TimeToLive": "12096000000000"

}

我的SharePoint Get-Item OData过滤器的解析功能如下所示:

@{json(base64ToString(triggerBody().ContentData)).Projektaufgabe.id}

我已经尝试将解码和转换分离为字符串:

@{json(string(decodeBase64(triggerBody().ContentData))).Projektaufgabe.id}

由于解码消息似乎是一个问题,我认为从服务总线队列接收json消息而不是xml会有所帮助。

1 个答案:

答案 0 :(得分:2)

所以我可以看到你正在尝试将xml转换为json。你非常接近 - 唯一的问题是@json()要求

  1. 作为有效JSON对象的string
  2. 要转换为JSON的application/xml对象
  3. 这里,@ base64toString()正在转换为字符串,但你真的需要让@json()知道这是#2而不是#1,所以将表达式改为this应该有效:

    @{json(xml(base64toBinary(triggerBody()[ {contentData内容{1}} {FOO {1}}

    让我知道