Как установить значение по умолчанию для элемента схемы назначения в BizTalk Map

У меня есть требование на карте BizTalk, где

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

  2. Если эти значения не назначены, мне нужно отправить какое-то значение по умолчанию (N/A).

  3. Моя карта не является «один к одному», поэтому я могу использовать скриптовый функтоид и отправлять значение по умолчанию, кроме того, схема назначения представляет собой плоский файл, а в исходной схеме мне приходится много зацикливаться.

Итак, может ли кто-нибудь дать мне некоторое предложение о том, «Как установить значение по умолчанию для элемента в схеме назначения, если ничего не сопоставлено», используя BizTalk Map/некоторые настройки в схеме.

Что я уже пробовал, так это то, что я открыл схему назначения для всех элементов, я установил значение «Н/Д» для свойства -> «Значение по умолчанию», которое было там на вкладке свойств, но когда ничего не отображается, значение по умолчанию равно не идет. Вместо этого сам узел не создается в выходном файле.

Пожалуйста, смотрите карту ниже для хорошего понимания

http://www.biztalkgurus.com/cfs-filesystemfile.ashx/__key/CommunityServer.Discussions.Components.Files/13/0131.problem.JPG

Исходная схема — это XML-схема.

Схема назначения — это схема плоского файла.

Теперь на приведенной выше карте в моей исходной схеме есть узел с именем F4706, который будет зацикливаться.

  1. Когда элемент «TypeAddressNumber» в F4706 равен «1», я сопоставляю оставшиеся поля этого экземпляра F4706 с данными «доставки» в моей схеме назначения.

  2. Когда элемент «TypeAddressNumber» в F4706 равен «2», я сопоставляю оставшиеся поля этого экземпляра F4706 с данными «Reseller» в моей схеме назначения.

  3. Когда элемент «TypeAddressNumber» в F4706 равен «3», я сопоставляю оставшиеся поля этого экземпляра F4706 с данными «EndUser» в моей схеме назначения.

Теперь, если я подключаю функтоид логического НЕ к функтоиду логического равенства и назначаю какое-то значение по умолчанию, тогда мой узел назначения появляется три раза, когда функция "=" возвращает true один раз и ложь два раза. Но я хочу, чтобы, если что-то есть для сопоставления, сопоставлялось с экземпляром «F4706» или назначало значение по умолчанию.

Найдите файл INPUT ниже

http://www.biztalkgurus.com/cfs-filesystemfile.ashx/__key/CommunityServer.Discussions.Components.Files/13/5430.ip.JPG

Результат, который я ожидаю и получаю:

http://www.biztalkgurus.com/cfs-filesystemfile.ashx/__key/CommunityServer.Discussions.Components.Files/13/0724.curOP.JPG

Теперь, если входной файл выглядит следующим образом:

http://www.biztalkgurus.com/cfs-filesystemfile.ashx/__key/CommunityServer.Discussions.Components.Files/13/6403.otherIP.JPG

То есть, когда у меня нет узла «F4706» с TypeAddressNumber = 2, мне нужно заполнить «N/A» в узлах, связанных с торговым посредником, в моей схеме назначения, что должно выглядеть следующим образом:

http://www.biztalkgurus.com/cfs-filesystemfile.ashx/__key/CommunityServer.Discussions.Components.Files/13/0435.nextOP.JPG

Если вы пойдете и проверите генерируемый XLST, он запишет xsl:foreach, поэтому, если вы используете xsl:choose/иначе, условия проверяются несколько раз, а мои выходные узлы дублируются.

Я также пытался использовать некоторую глобальную переменную в XLST в первом цикле и втором цикле, чтобы получить к ней доступ и записать значение по умолчанию, к сожалению, это тоже не работает. Потому что ПЕРЕМЕННАЯ в XLST не является переменной TRUE. Я думаю, что это ПОСТОЯННОЕ.

Как это сделать ЛЮБАЯ помощь приветствуется.


person Santhosh Kumar N J    schedule 15.05.2009    source источник


Ответы (2)


  1. Поместите на карту два «сопоставления значений» (пометьте их как «Входящие» и «По умолчанию») и перетащите выходные данные из обоих в место назначения (вы получите предупреждение во время компиляции).

  2. Поместите на карту «Логическое НЕ» (обозначьте «NoValue»).

  3. Поместите логическую оценку (Existence, IsNil, Length), которая соответствует вашим потребностям, чтобы оценить, есть ли у вас входящее значение, и перетащите в нее исходное поле. (Обозначьте его как «HasValue»)

  4. Перетащите результат на «Входящие» и «Логическое НЕ».

  5. Перетащите исходное поле в поле «Входящие».

  6. Перетащите вывод из «NoValue» в «Default».

  7. Добавьте постоянный параметр в «По умолчанию», дважды щелкнув и вставив новый параметр, который является вашим значением по умолчанию.

Надеюсь, вы понимаете этот бардак :)

person Martin Bring    schedule 15.05.2009
comment
Привет Мартин, Спасибо за ваш ответ. к сожалению, это не сработает для меня, потому что в исходной схеме у меня есть элемент, который будет зацикливаться, и мне нужно проверить 3 условия для одного узла внутри этого элемента, поэтому происходит то, что однажды, если условие истинно, оно присвоит мое входящее значение, следующие два раза, когда он зацикливает исходный элемент, он будет заполнять значения по умолчанию, в результате чего в моей схеме назначения будет несколько узлов. Но я хочу, чтобы элемент назначения был заполнен один раз. - person Santhosh Kumar N J; 15.05.2009
comment
Привет, Сантош. Правильно ли я вас понимаю, что у вас входящий источник выглядит так: Root - LoopingRecord - - ElementToCheck Если ElementToCheck не соответствует вашим 3 условиям, вы хотите, чтобы один (1) элемент назначения содержал N/A? - person Martin Bring; 15.05.2009

Я полагаю, что вы, по сути, пытаетесь контролировать создание выходного узла на основе некоторого условия.

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

Я подключил выход логического функтоида к записи, и запись создавалась только в том случае, если логический функтоид возвращал истину.

Для значений по умолчанию вы делаете это правильно, помещая значение по умолчанию в сетку свойств для элемента схемы. Таким образом, если этому элементу ничего не сопоставлено, в файле xsl вы увидите, что создается элемент со значением по умолчанию.

person abnvp    schedule 30.03.2011