2016-11-28 201 views
0

我必须使用XML请求调用SP。这个是由向导自动生成的XML文档,其元素如下:通过xml元素而不是属性的BizTalk存储过程请求

<xs:element name="sp_storedProcedureName"> 
    <xs:complexType> 
     <xs:attribute name="Field1" type="xs:string"/> 
     <xs:attribute name="Field2" type="xs:string"/> 
     . . . 

某些SP参数可能为空。这些属性不适合这种情况,因为空属性意味着“无属性”,因此模式验证失败。

我手动重新创建请求架构以这样的方式

<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>AB</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

+0

你是否正确地声明了命名空间? – Shnugo

+0

@Shnugo是的。我只使用向导声明的元素来声明属性。否则,我会收到带有属性的架构的传输失败 – strongmmc

+1

更改您的存储过程,以便将Field1的默认值设置为空。附:为什么你还在为biztalk-2006开发?这是失去支持。 – Dijkgraaf

回答

0

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

相关问题