Проблема сопоставления BizTalk 2006 R2 - PullRequest
0 голосов
/ 06 апреля 2009

У меня есть эти данные (все элементы необязательны):

<data>
<optionalElement1>...</optionalElement1>
<optionalElement2>...</optionalElement2>
<optionalElement3>...</optionalElement3>
</data>

Мне нужно сопоставить это с другой схемой (требуются все элементы):

<request> 
<Element1>...</Element1>
<Element2>...</Element2>
<Element3>...</Element3>
</request>

Поскольку элементы в исходном запросе являются необязательными, отображение будет генерировать только соответствующие элементы для первоначально включенного элементы. Но проверка запроса не удастся.

Пример:

<data>
<optionalElement3>
<value1>1</value1>
<value2>2</value2>
</optionalElement3>
</data>

будет сопоставлен с

<request>
<Element3>
<subelement1>1</subelement1>
<subelement2>2</subelement2>
</Element3>
</request>

И проверка не удастся, потому что мне не хватает Элемента1 и Элемента2. Ответ должен быть (я думаю):

<request>
<Element1 xsi:nil="true" />
<Element2 xsi:nil="true" />
<Element3>
<subelement1>1</subelement1>
<subelement2>2<subelement2>
</Element3>
</request>

Как я могу сделать это в отображении? Как я могу убедиться, что элемент создано в выходном сообщении?

И, кстати, если субэлемента нет (скажем, «data / optionElement1 / value1», как я могу убедиться, что пункт назначения подэлемент "request / Element1 / subelement1" создан?

Ответы [ 3 ]

1 голос
/ 05 октября 2010

Сделать это очень просто. Используйте xlst файл для сопоставления.

Используя простое условие, если вы можете проверить наличие значения для элемента операции или нет, если значение существует, то сопоставьте, что еще сопоставляет нулевое (пустое) значение. Таким образом, сложный элемент будет сгенерирован, даже если для необязательного элемента нет значения.

Надеюсь, это решит вашу проблему.

0 голосов
/ 08 апреля 2009

Jose,

Возможно, вы захотите взглянуть на функтоид с циклом таблицы. Вот пост об этом.

http://geekswithblogs.net/Chilberto/archive/2008/04/16/121274.aspx

Использование этого функтоида с извлечением стола должно дать вам решение. Также вот хорошая серия о понимании картографа.

http://www.bizbert.com/bizbert/2008/02/07/Understanding+The+BizTalk+Mapper+Part+1+Introduction.aspx

-Bryan

0 голосов
/ 06 апреля 2009

Вы можете сделать все это в маппере. Я давно не был в Biztalk и не имею его рядом со мной, но я знаю, что в маппере есть функции, которые позволяют вам проверять наличие полей, которые вам нужны. В зависимости от наличия этих полей вы можете указать, какое действие необходимо выполнить для сопоставителя.

Вы принудительно создаете поля, задавая им значения по умолчанию в целевой схеме. Это также можно сделать, используя маппер, через окно свойств.

...