Функтоидное поведение зацикливания Biztalk

Доброе утро,

Я пытаюсь изучить 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 в выходной схеме.

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

Спасибо


person Jay    schedule 12.04.2011    source источник
comment
BizTalk преобразует с помощью XSLT, созданного из файла сопоставления. Как это происходит, во многом зависит не только от ваших функтоидов и ссылок в файле сопоставления, но и от свойств узла в исходной и целевой схемах. Вы можете щелкнуть правой кнопкой мыши файл сопоставления, чтобы выбрать Проверить карту (генерирует XSLT, чтобы вы могли его просмотреть или использовать в качестве основы для настраиваемого сопоставления XSLT) или выбрать Тестовую карту (фактически преобразует некоторые входные данные, чтобы вы могли проверить его результаты ). Пожалуйста, предоставьте все, что у вас есть, в качестве исходных / целевых схем, некоторые входные и желаемые выходные данные и, возможно, снимок экрана вашего файла сопоставления?   -  person mousio    schedule 12.04.2011


Ответы (2)


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

person MichaelLipscombe    schedule 12.04.2011

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

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

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

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

Майкл и Мусио спасибо за помощь!

person Jay    schedule 13.04.2011