Мне нужно вызвать SP с XML-запросом. Это один автоматически создан мастером в качестве документа XML с элементом, как следующее:BizTalk запрос хранимой процедуры через xml-элементы вместо атрибутов
<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 адаптер не может считывать данные из элемента, в то время как может читать из атрибута основного элемента.
В этом случае?
Мой главный вопрос: Как передать значения null хранимой процедуре с помощью xml?
Правильно ли вы объявляете пространства имен? – Shnugo
@ Шнуго да. Я только утверждаю атрибуты с элементами, оставляющими пространство имен так, как это было объявлено с помощью мастера. В противном случае я получаю передачу с ошибкой для схемы с атрибутами, а также – strongmmc
Измените хранимую процедуру, чтобы установить значение по умолчанию для поля 1 равным null. Постскриптум Почему вы все еще развиваетесь для biztalk-2006? Это не поддерживается. – Dijkgraaf