Как установить значение по умолчанию для элемента схемы назначения в BizTalk Map - PullRequest
2 голосов
/ 15 мая 2009

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

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

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

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

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

Что я уже пробовал, так это то, что я открыл схему назначения для всех элементов, для которых я установил значение 'N / A' для свойства -> "DefaultValue", которое было на вкладке свойства, но когда ничего не отображается, значение по умолчанию не приходит. Вместо этого сам узел не создается в выходном файле.

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

альтернативный текст 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, а два раза - false. Но я хочу, чтобы, если что-то было отображено, сопоставьте его с экземпляром «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 не является ИСТИННОЙ переменной. Я думаю, что это постоянный.

Как добиться этой ЛЮБОЙ помощи, высоко ценится.

Ответы [ 2 ]

1 голос
/ 30 марта 2011

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

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

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

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

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

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

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

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

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

  6. Перетащите вывод из «NoValue» в «По умолчанию».

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...