BizTalk 存储过程请求通过 xml 元素而不是属性
BizTalk stored procedure request through xml elements instead of attributes
我必须用 XML 请求调用 SP。该文档由向导自动生成为 XML 文档,其中包含如下元素:
<xs:element name="sp_storedProcedureName">
<xs:complexType>
<xs:attribute name="Field1" type="xs:string"/>
<xs:attribute name="Field2" type="xs:string"/>
. . .
一些 SP 参数可能为空。这些属性不适合这种情况,因为空属性意味着 "no attribute",因此架构验证失败。
我以这种方式手动重新创建了请求架构:
<xs:element name="sp_storedProcedureName">
<xs:complexType>
<xs:sequence>
<xs:element name="Field1" type="xs:string"/>
<xs:element name="Field2" type="xs:string"/>
<xs:element name="FieldN" type="xs:string" nillable="true"/>
. . .
并且创建的消息似乎有效(LINT 这么说,映射测试失败),这意味着值是:
<ns0:sp_storedProcedureName>
<ns0:Field1>AB012345</ns0:Field1>
<ns0:Field2>ZZ</ns0:Field2>
<ns0:FieldN xsi:nil="true" />
. . .
这正是我所需要的。
当消息到达发送端口管道时,传输失败并出现错误:
HRESULT="0x80040e10"
Description="Procedure or function 'sp_storedProcedureName' expects parameter '@Field1', which was not supplied."
但很明显该值是由 xml 提供的,但我猜想 SQL 适配器无法从元素中读取,但能够从 main 的属性中读取元素.
是这样吗?
我的主要问题是:如何使用 xml 将空值传递给存储过程?
更改存储过程,如果该字段不是从 BizTalk 传递的,则它默认为 NULL,这往往是 BizTalk 的行为,如果您映射的内容不存在于您映射的有效负载中。
我必须用 XML 请求调用 SP。该文档由向导自动生成为 XML 文档,其中包含如下元素:
<xs:element name="sp_storedProcedureName">
<xs:complexType>
<xs:attribute name="Field1" type="xs:string"/>
<xs:attribute name="Field2" type="xs:string"/>
. . .
一些 SP 参数可能为空。这些属性不适合这种情况,因为空属性意味着 "no attribute",因此架构验证失败。
我以这种方式手动重新创建了请求架构:
<xs:element name="sp_storedProcedureName">
<xs:complexType>
<xs:sequence>
<xs:element name="Field1" type="xs:string"/>
<xs:element name="Field2" type="xs:string"/>
<xs:element name="FieldN" type="xs:string" nillable="true"/>
. . .
并且创建的消息似乎有效(LINT 这么说,映射测试失败),这意味着值是:
<ns0:sp_storedProcedureName>
<ns0:Field1>AB012345</ns0:Field1>
<ns0:Field2>ZZ</ns0:Field2>
<ns0:FieldN xsi:nil="true" />
. . .
这正是我所需要的。 当消息到达发送端口管道时,传输失败并出现错误:
HRESULT="0x80040e10"
Description="Procedure or function 'sp_storedProcedureName' expects parameter '@Field1', which was not supplied."
但很明显该值是由 xml 提供的,但我猜想 SQL 适配器无法从元素中读取,但能够从 main 的属性中读取元素.
是这样吗?
我的主要问题是:如何使用 xml 将空值传递给存储过程?
更改存储过程,如果该字段不是从 BizTalk 传递的,则它默认为 NULL,这往往是 BizTalk 的行为,如果您映射的内容不存在于您映射的有效负载中。