2016-11-28 200 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的行爲,如果映射的負載中不存在您正在映射的內容。

相關問題