您可以使用 oracle 数据适配器从数据库中 select 一个 XML
Can you use the oracle dataadapter to select an XML from a database
使用 xmlagg 查询 (select xmlagg( xmlelement (... ) to select XML从数据库中可以更好地控制我们获取的数据的格式。
生成基于查询的模式为我们提供了带有单个记录(包含 xml)的标准 polingstatments。为 xml 创建模式也很容易(遵循 example 上的建议)
但是,将此架构添加到元素的数据结构类型不起作用。我可以 select 下拉列表中的架构,但当 selected 但任何其他条目都有效时,它会重置回前一个 selected 条目。 (在下图中,order_header 是我想使用的那个。)
我尝试忽略模式并查看是否可以映射结果,但 pollingstatement 中的数据实际上被转义了
<POLLINGSTMTRECORD><XML><order_header><order_id>206817</order_id>
有没有人将 oracle 数据适配器与 xml 查询结合使用?有什么线索我哪里出错了吗?存储过程会是更好的解决方案吗?我能找到一种方法,数据不会将 < 更改为 <
这里有几个选项:
类型化投票
如果您使用 TypedPolling,则必须通过以下两种方式之一提取消息(它将作为 CDATA 嵌入 xs:string 元素中):
- 在编排消息分配形状中
- 在接收位置的绑定属性中,如下所示:https://seroter.wordpress.com/2009/07/02/publishing-xml-content-from-sql-server-2008-to-biztalk-server-2009/(示例适用于 SQL 服务器,但重点放在 BizTalk 适配器配置上)
XmlPolling
如果你使用 XmlPolling,你可以做一个巧妙的小技巧:
- 创建一个 'dummy' 信封模式(带有 xs:any 子项的单个记录,信封 = true,BodyXPath =
<Any>
节点)
- 将 xmlStoredProcedureRootNodeName 设置为信封架构的根节点
- 将 xmlStoredProcedureRootNodeNamespace 设置为信封架构的命名空间
- 根据您的 Oracle 查询生成的 XML 创建一个模式
现在 XML 接收管道将 "debatch" 您对生成的架构的查询。这种分批是必要的,因为从理论上讲,一个查询可以在一个结果中产生多个文档(这将有多个根节点,这将是无效的)。或者,您可以将查询设计为生成根节点以外的所有内容,然后仅使用适配器设置来分配根节点,但我自己不太喜欢这种方法(我更喜欢能够快速轻松地测试结果未经修改的查询)。
解决方案相当简单,但很难找到相关文档。
我通过使用适配器服务并将 XML 查询放入绑定来创建接收端口。这创建了一个架构,直到包含 XML 的节点(在我的例子中,这被称为 XML)。
如果你只是 运行 这个,它会创建一个 XML 你创建 XML was a String in the XML element (all <> where escaped作为 <>).
要从轮询语句中获取元素,您首先需要创建一个结果的架构(这可以通过从格式良好的 XML 生成架构来轻松完成)
然后更改接收端口 "Inbound BizTalk Message body",使源为 "Path",并从 Visual Studio 为 XML 元素复制实例 xpath(持有 XML数据)
将 xpath 从元素属性复制到接收端口设置。您可以编写 Xpath,但我不推荐这样做。 (命名空间有点奇怪)
此时传入的消息是一个 XML,它遵循您的结果 XML 架构,可以用作 BizTalk 中的任何 XML(实际上更容易一点)使用 Oracle 适配器时获得的标准适配器,因为您摆脱了 pollingstmt/pollingrecord/pollingrecord 结构)
我想提一下,您的根节点需要是唯一的,并且 xpath 获得的 xml 需要为它找到一个架构。
使用 xmlagg 查询 (select xmlagg( xmlelement (... ) to select XML从数据库中可以更好地控制我们获取的数据的格式。
生成基于查询的模式为我们提供了带有单个记录(包含 xml)的标准 polingstatments。为 xml 创建模式也很容易(遵循 example 上的建议)
但是,将此架构添加到元素的数据结构类型不起作用。我可以 select 下拉列表中的架构,但当 selected 但任何其他条目都有效时,它会重置回前一个 selected 条目。 (在下图中,order_header 是我想使用的那个。)
我尝试忽略模式并查看是否可以映射结果,但 pollingstatement 中的数据实际上被转义了
<POLLINGSTMTRECORD><XML><order_header><order_id>206817</order_id>
有没有人将 oracle 数据适配器与 xml 查询结合使用?有什么线索我哪里出错了吗?存储过程会是更好的解决方案吗?我能找到一种方法,数据不会将 < 更改为 <
这里有几个选项:
类型化投票
如果您使用 TypedPolling,则必须通过以下两种方式之一提取消息(它将作为 CDATA 嵌入 xs:string 元素中):
- 在编排消息分配形状中
- 在接收位置的绑定属性中,如下所示:https://seroter.wordpress.com/2009/07/02/publishing-xml-content-from-sql-server-2008-to-biztalk-server-2009/(示例适用于 SQL 服务器,但重点放在 BizTalk 适配器配置上)
XmlPolling
如果你使用 XmlPolling,你可以做一个巧妙的小技巧:
- 创建一个 'dummy' 信封模式(带有 xs:any 子项的单个记录,信封 = true,BodyXPath =
<Any>
节点) - 将 xmlStoredProcedureRootNodeName 设置为信封架构的根节点
- 将 xmlStoredProcedureRootNodeNamespace 设置为信封架构的命名空间
- 根据您的 Oracle 查询生成的 XML 创建一个模式
现在 XML 接收管道将 "debatch" 您对生成的架构的查询。这种分批是必要的,因为从理论上讲,一个查询可以在一个结果中产生多个文档(这将有多个根节点,这将是无效的)。或者,您可以将查询设计为生成根节点以外的所有内容,然后仅使用适配器设置来分配根节点,但我自己不太喜欢这种方法(我更喜欢能够快速轻松地测试结果未经修改的查询)。
解决方案相当简单,但很难找到相关文档。
我通过使用适配器服务并将 XML 查询放入绑定来创建接收端口。这创建了一个架构,直到包含 XML 的节点(在我的例子中,这被称为 XML)。
如果你只是 运行 这个,它会创建一个 XML 你创建 XML was a String in the XML element (all <> where escaped作为 <>).
要从轮询语句中获取元素,您首先需要创建一个结果的架构(这可以通过从格式良好的 XML 生成架构来轻松完成)
然后更改接收端口 "Inbound BizTalk Message body",使源为 "Path",并从 Visual Studio 为 XML 元素复制实例 xpath(持有 XML数据)
将 xpath 从元素属性复制到接收端口设置。您可以编写 Xpath,但我不推荐这样做。 (命名空间有点奇怪)
此时传入的消息是一个 XML,它遵循您的结果 XML 架构,可以用作 BizTalk 中的任何 XML(实际上更容易一点)使用 Oracle 适配器时获得的标准适配器,因为您摆脱了 pollingstmt/pollingrecord/pollingrecord 结构)
我想提一下,您的根节点需要是唯一的,并且 xpath 获得的 xml 需要为它找到一个架构。