У меня есть требование на карте BizTalk, где
Я сопоставлю некоторые элементы исходной схемы с целевой схемой, где значения будут присвоены элементам целевой схемы на основе некоторого условия.
Если эти значения не назначены, мне нужно отправить какое-то значение по умолчанию (N/A).
Моя карта не является «один к одному», поэтому я могу использовать скриптовый функтоид и отправлять значение по умолчанию, кроме того, схема назначения представляет собой плоский файл, а в исходной схеме мне приходится много зацикливаться.
Итак, может ли кто-нибудь дать мне некоторое предложение о том, «Как установить значение по умолчанию для элемента в схеме назначения, если ничего не сопоставлено», используя BizTalk Map/некоторые настройки в схеме.
Что я уже пробовал, так это то, что я открыл схему назначения для всех элементов, я установил значение «Н/Д» для свойства -> «Значение по умолчанию», которое было там на вкладке свойств, но когда ничего не отображается, значение по умолчанию равно не идет. Вместо этого сам узел не создается в выходном файле.
Пожалуйста, смотрите карту ниже для хорошего понимания
Исходная схема — это XML-схема.
Схема назначения — это схема плоского файла.
Теперь на приведенной выше карте в моей исходной схеме есть узел с именем F4706, который будет зацикливаться.
Когда элемент «TypeAddressNumber» в F4706 равен «1», я сопоставляю оставшиеся поля этого экземпляра F4706 с данными «доставки» в моей схеме назначения.
Когда элемент «TypeAddressNumber» в F4706 равен «2», я сопоставляю оставшиеся поля этого экземпляра F4706 с данными «Reseller» в моей схеме назначения.
Когда элемент «TypeAddressNumber» в F4706 равен «3», я сопоставляю оставшиеся поля этого экземпляра F4706 с данными «EndUser» в моей схеме назначения.
Теперь, если я подключаю функтоид логического НЕ к функтоиду логического равенства и назначаю какое-то значение по умолчанию, тогда мой узел назначения появляется три раза, когда функция "=" возвращает true один раз и ложь два раза. Но я хочу, чтобы, если что-то есть для сопоставления, сопоставлялось с экземпляром «F4706» или назначало значение по умолчанию.
Найдите файл INPUT ниже
Результат, который я ожидаю и получаю:
Теперь, если входной файл выглядит следующим образом:
То есть, когда у меня нет узла «F4706» с TypeAddressNumber = 2, мне нужно заполнить «N/A» в узлах, связанных с торговым посредником, в моей схеме назначения, что должно выглядеть следующим образом:
Если вы пойдете и проверите генерируемый XLST, он запишет xsl:foreach, поэтому, если вы используете xsl:choose/иначе, условия проверяются несколько раз, а мои выходные узлы дублируются.
Я также пытался использовать некоторую глобальную переменную в XLST в первом цикле и втором цикле, чтобы получить к ней доступ и записать значение по умолчанию, к сожалению, это тоже не работает. Потому что ПЕРЕМЕННАЯ в XLST не является переменной TRUE. Я думаю, что это ПОСТОЯННОЕ.
Как это сделать ЛЮБАЯ помощь приветствуется.