Не удается подавить узлы в сопоставлении BizTalk - PullRequest
0 голосов
/ 14 апреля 2011

днем ​​все, Я изучаю BizTalk и застрял в этой проблеме.

Есть группа выбора с телефоном или адресом. Я могу получить некоторые поля адреса, которые будут подавлены при выводе телефона. Чтобы упростить ситуацию, я просто расскажу о поле «CityName».

Я пробовал следующее:

  • Сопоставил узел «Город» (текст) во входном файле с «CityName» в выходных данных. Подключен логический функтоид Exists к узлу «Address1» на входном узле и «CityName» на выходе. Я всегда получаю название города с заполненным текстом.

  • Сопоставил узел "Город" во входном файле и логический функтоид Exists с Value Mapper функтоидом. Подключил функтоид Value Mapper к CityName в выходных данных. Я получаю название города в адресном узле (правильно) и пустой узел в телефонном узле (неверно).

  • Сопоставил узел "City" во входном файле и логический функтоид Exists с Value Mapper (Flatinting) functoid. Подключил Value Mapper (Сглаживание) функтоид к CityName на выходе. Я получаю название города в адресном узле (правильно) и пустой узел в телефонном узле (неверно).

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

Узел CityName описывается этим типом схемы:

<xsd:complexType name="NameType">
    <xsd:simpleContent>
        <xsd:extension base="xsd:string">
            <xsd:attribute name="languageID" type="xsd:language" use="optional">
            </xsd:attribute>
            <xsd:attribute name="sequence" type="IntegerNumericType">
            </xsd:attribute>
            <xsd:attribute name="sequenceName" type="StringType" />
        </xsd:extension>
    </xsd:simpleContent>
</xsd:complexType>

<xsd:simpleType name="IntegerNumericType">
    <xsd:restriction base="xsd:integer" />
</xsd:simpleType>

<xsd:simpleType name="StringType">
    <xsd:restriction base="xsd:string" />
</xsd:simpleType>

Есть ли что-то в определении типа, что заставляет создавать пустой узел?

Спасибо

РЕДАКТИРОВАТЬ: ниже неправильный вывод. Второй и третий узлы связи имеют адрес дочернего узла и не должен.

У меня есть петлевый функтоид на телефонных номерах и первая строка адреса в плоской схеме ввода. Это производит три узла связи. Я использую функтоид Logical Existance в адресной строке для подавления информации о телефоне в первом узле. У меня есть логический Not функтоид на выходе того, который напрямую связан с узлом Address в схеме вывода. Я думал, что это должно отключить весь адресный узел, но это не так.

Я попытался добавить функтоид Value Mapping , соединенный с функтоидом Logical Existance , к элементам названия города и почтового индекса, что делает их пустыми, но они не исчезнут. ARG!

Я проверил, и все поля установлены в ноль MinOccurs, и я не верю, что им присвоено значение по умолчанию.

<ns0:Communication>
    <ns0:Address>
        <ns0:AddressLine sequence="1">1234 My St</ns0:AddressLine>
        <ns0:AddressLine sequence="2">Apt. 2</ns0:AddressLine>
        <ns0:CityName>Kansas City</ns0:CityName>
        <ns0:CountrySubDivisionCode name="State">MO</ns0:CountrySubDivisionCode>
        <ns0:CountrySubDivisionCode name="County">Jackson</ns0:CountrySubDivisionCode>
        <ns0:CountryCode>US</ns0:CountryCode>
        <ns0:PostalCode>64099</ns0:PostalCode>
    </ns0:Address>
</ns0:Communication>
<ns0:Communication sequence="1">
    <ns0:ChannelCode>Telephone</ns0:ChannelCode>
    <ns0:UseCode>Personal</ns0:UseCode>
    <ns0:DialNumber>1234567890</ns0:DialNumber>
    <ns0:Address>
        <ns0:CityName />
        <ns0:CountryCode />
        <ns0:PostalCode>64099</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:CityName />
        <ns0:CountryCode />
        <ns0:PostalCode>64099</ns0:PostalCode>
    </ns0:Address>
</ns0:Communication>

Ответы [ 3 ]

1 голос
/ 14 апреля 2011

Было бы полезно иметь примеры ввода и вывода фрагментов XML. Без этого я могу догадаться о структурах XML. Если они выглядят примерно так, то приведенное ниже отображение должно работать нормально:

simple biztalk map of address and phone fields

Ваши схемы выглядят так? Вывод, создаваемый такой картой, действителен, ЕСЛИ <Choice> в схеме назначения установлен на Max Occurs = unbounded. Если это не так, и если у вас может быть только один выходной контакт, то вы должны будете выводить телефон, только если адрес отсутствует, например:

enter image description here

Конечно, это кажется немного глупым, поскольку можно ожидать, что в исходном xml будут присутствовать и адрес, и телефон, а xml-адресат не позволяет вам иметь оба.

Если ни один из этих сценариев не совпадает с вашим, отредактируйте свой вопрос, чтобы предоставить более подробную информацию.

0 голосов
/ 18 декабря 2012

Способ решения этой проблемы - использовать xsl напрямую вместо встроенного преобразователя.

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

0 голосов
/ 14 апреля 2011

Минимальное и максимальное количество вхождений в схеме по умолчанию равно 1. Mapper смотрит на это при генерации XSLT. Попробуйте установить Min Occur на 0.

...