2016-11-28 5 views
0

Je dois appeler un SP avec une requête XML. Celui-ci est générée automatiquement par l'assistant en tant que document XML avec un élément comme ce qui suit:Requête de procédure stockée BizTalk via des éléments xml au lieu d'attributs

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

Certains des paramètres SP peut être NULL. Les attributs ne correspondent pas à ce scénario, car un attribut nul signifie "aucun attribut", donc un échec de validation du schéma.

Je recréés manuellement le schéma de la demande ainsi:

<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"/> 
     . . . 

et le message créé semble être valide (LINT le dit, le test de carte échoue), ce qui signifie que les valeurs sont:

<ns0:sp_storedProcedureName> 
    <ns0:Field1>AB</ns0:Field1> 
    <ns0:Field2>ZZ</ns0:Field2> 
    <ns0:FieldN xsi:nil="true" /> 
    . . . 

qui est exactement ce dont j'ai besoin. Lorsque le message atteint le pipeline de port d'envoi de la transmission échoue avec l'erreur:

HRESULT="0x80040e10" 
Description="Procedure or function 'sp_storedProcedureName' expects parameter '@Field1', which was not supplied." 

mais il est clair que la valeur est fournie par le xml, mais je suppose un adaptateur SQL ne peut pas lire à partir d'un élément, alors que est capable de lire à partir d'un attribut de l'élément principal.

Est-ce le cas?

Ma question principale est: comment puis-je passer des valeurs nulles à une procédure stockée en utilisant un xml?

+0

Déclarez-vous correctement les espaces de noms? – Shnugo

+0

@Shnugo oui. Je sobstitute seulement les attributs avec les éléments quittant l'espace de noms de la façon dont il a été déclaré avec l'assistant. Sinon, je recevrais la transmission échoue pour le schéma avec les attributs ainsi – strongmmc

+1

Modifier votre procédure stockée afin que vous définissiez la valeur par défaut de Field1 à null. P.S. Pourquoi êtes-vous encore en train de développer pour biztalk-2006? C'est hors de support. – Dijkgraaf

Répondre

0

Modifiez la procédure stockée afin qu'elle soit par défaut NULL si ces champs ne sont pas transmis par BizTalk, ce qui tend à être le comportement de BizTalk si ce que vous mappez n'existe pas dans la charge utile à partir de laquelle.