Поведение функционала циклирования Biztalk

#biztalk #biztalk-mapper

#biztalk #biztalk-mapper

Вопрос:

Доброе утро,

Я пытаюсь изучить BizTalk, и он делает что-то, чего я не понимаю.

Я вывожу XML для адресов сотрудников. Циклический функтоид создает два элемента «Связи». Я ожидал увидеть «CountrySubDivisionCode» в качестве дочерних элементов в ОБОИХ из них, но они появляются только один раз:

 <ns0:Communication sequence="1">
    <ns0:ChannelCode>Telephone</ns0:ChannelCode>
    <ns0:UseCode>Personal</ns0:UseCode>
    <ns0:DialNumber>1234567890</ns0:DialNumber>
    <ns0:Address>
        <ns0:AddressLine sequence="1">1234 My St</ns0:AddressLine>
        <ns0:CityName>Some City</ns0:CityName>
        <ns0:CountrySubDivisionCode name="County">Jackson</ns0:CountrySubDivisionCode>
        <ns0:CountrySubDivisionCode name="State">MO</ns0:CountrySubDivisionCode>
        <ns0:CountryCode>US</ns0:CountryCode>
        <ns0:PostalCode>14099</ns0:PostalCode>
    </ns0:Address>
</ns0:Communication>
<ns0:Communication sequence="2">
    <ns0:ChannelCode>Telephone</ns0:ChannelCode>
    <ns0:UseCode>Business</ns0:UseCode>
    <ns0:DialNumber>0987654321</ns0:DialNumber>
    <ns0:Address>
        <ns0:AddressLine sequence="1">1234 My St</ns0:AddressLine>
        <ns0:CityName>Some City</ns0:CityName>
        <ns0:CountryCode>US</ns0:CountryCode>
        <ns0:PostalCode>14099</ns0:PostalCode>
    </ns0:Address>
</ns0:Communication>
  

Входные данные представляют собой плоскую схему.

Существует одна циклическая функция для элемента связи с телефонными номерами. Его вывод является элементом связи в схеме вывода.

Есть еще один циклический функционал с входными данными штата и округа, его выводом является элемент CountrySubDivisionCode в выходной схеме.

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

Спасибо

Комментарии:

1. BizTalk преобразует с использованием XSLT, сгенерированного из вашего файла сопоставления. То, как это происходит, во многом зависит не только от ваших функционалов и ссылок в файле сопоставления, но также от свойств узла в исходной и целевой схемах. Вы можете щелкнуть правой кнопкой мыши файл сопоставления, чтобы выбрать Validate Map (генерирует XSLT, чтобы вы могли просмотреть его или использовать в качестве основы для пользовательского XSLT-сопоставления) или выбрать Test Map (фактически преобразует некоторые входные данные, чтобы вы могли проверить его результаты). Пожалуйста, предоставьте все, что у вас есть в качестве исходных / целевых схем, некоторые входные данные и желаемый результат и, возможно, скриншот вашего файла сопоставления?

Ответ №1:

Проверьте карту (щелкните правой кнопкой мыши в обозревателе решений) и щелкните ссылку XSL в окне вывода Visual studio. Это лучший способ выяснить, что делает mapper, поскольку вы увидите сгенерированный XSLT.

Ответ №2:

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

  • он создает список входных значений для каждого из входных данных
  • Он выполняет итерацию по списку, создавая один вывод для каждого ввода. Когда он делает это, он УДАЛЯЕТ (НЕ обнуляет или очищает) другие входные данные.
  • Как только список исчерпан, выходных данных нет (список пуст).

У меня были «вложенные» циклические функтоиды. Внешний функционал имел три входа, а внутренний функционал имел два входа. При выводе первого внешнего функтоида использовались оба из двух входных данных внутреннего функтоида (которые были подавлены из-за позиции и потеряны). На всех последующих выводах внешнего функтоида у внутреннего функтоида не было дополнительных значений для использования, поэтому он ничего не выводил.

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

Майкл и Мусио благодарят за помощь!