在我的 BizTalk 接收端口中,我从 Web 服务接收 JSON。我想读取自定义管道组件中的特定 JSON 节点值(逗号分隔值(,并在节点值具有预期值时提升消息的属性。 例如:
消息中的 JSON 节点
"Dept": "support, Development,Test"
所以我想Dept
读取 JSON 节点,如果它有价值Development
那么我需要提升消息的属性,比如说devDept
true
否则false
。 我有一个想法如何使用业务流程来完成它。但我想在自定义管道组件中执行此操作。任何人都可以分享这个想法或帮助吗?
有几种方法可以做到这一点:
- 您可以使用 Newtonsoft JSON 库读取 JSON,然后提升属性。可以使用 Nuget 包将其添加到项目中。然后,您需要将包文件夹中的程序集部署到 GAC。
- 或者,还可以使用 BizTalk JSON 解码器管道组件将 JSON 转换为 XML,然后使用 XmlReceive 管道提升属性,而无需使用任何业务流程。
这两种方法都很好,具体取决于您使用 JSON 进行的其他处理。部署明智的方法 2 更好,因为您不必将 Newtonsoft Json 库部署到 GAC
正如Vikas所说,您首先需要使用JSON解码器。
为了根据逗号分隔的值列表中的内容实际提升属性,我将使用 BRE 管道框架,这允许您在管道中的策略中执行业务规则,而不必在业务流程中执行它。 您只需要一个规则来查看该元素,如果它包含 Development,则创建提升的属性。
请参阅 SDK 示例,了解如何实现自定义管道组件以提升给定名称下的 XPath 表达式的值:
"c:Program Files (x86)Microsoft BizTalk Server 2013 R2SDKSamplesPipelinesArbitraryXPathPropertyHandler"
使用此组件,您可以计算任何表达式并将其提升为指定的属性名称,例如
//*[local-name()='Dept' and contains(text(), 'Development')]