BizTalk存储过程请求通过xml元素而不是属性

时间:2016-11-28 16:29:41

标签: xml stored-procedures null biztalk biztalk-2006

我必须使用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参数可能为null。属性不适合这种情况,因为null属性意味着“无属性”,因此架构验证失败。

我以这种方式手动重新创建了请求模式:

<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适配器无法读取元素,而能够读取主元素的属性。

是这样的吗?

我的主要问题是:如何使用xml 将空值传递给存储过程?

1 个答案:

答案 0 :(得分:0)

如果未从BizTalk传递该字段,则更改存储过程以使其默认为NULL,如果您要映射的有效负载中不存在您要映射的内容,则往往是BizTalk的行为。