Запись не сопоставляется с картой BizTalk Логический оператор ИЛИ

Я застрял в этом вопросе.

У меня есть два поля ввода

1) Внешние заметки

2) Внутренние заметки

Я хочу сопоставить их с узлом назначения "Комментарии"

ЕСЛИ

Внешние заметки идут (сделать отображение)

Внутренние заметки идут (сделать отображение)

Оба поля прибывают (сделать картирование)

Поле не подходит (Не карта)

Я выполнил следующие задачи:

1) Проверьте логическое существование, если узел идет.

2) использовал Equal fuctoid для подтверждения истинности значения. Логическое существование = true - > передать true оператору ИЛИ

3) Логическое ИЛИ, которое выполняет Логическое ИЛИ для обоих полей.

4) отображение значения для установки значения.

введите описание изображения здесь

Эта логика работает нормально для следующих сценариев:

a) Внутренние заметки приходят (успешно сопоставлены)

б) оба значения (inter & exter) приходит (успешно сопоставлено)

в) Внешние заметки приходят (не нанесены на карту)

Я много пробовал, но ничего не понял, почему это Внешнее Значение не отображается.

Пожалуйста, помогите мне.

Спасибо


Ниже должны быть выведены следующие входные сообщения:

ВХОД 1:

<InternalNotes>
<Value>Internal notes value</Value>
</InternalNotes>

ВЫХОД 1:

<Comments>
<Name>Comments</Name>
<Operation>Append</Operation>
<Value>Internal notes value</Value>
</Comments>

ВХОД 2:

<ExternalNotes>
<Value>External notes value</Value>
</ExternalNotes>

ВЫХОД 2:

<Comments>
<Name>Comments</Name>
<Operation>Append</Operation>
<Value>External notes value</Value>
</Comments>

ВХОД 3:

  <ExternalNotes>
    <Value>External notes value</Value>
    </ExternalNotes>
  <InternalNotes>
    <Value>Internal notes value</Value>
    </InternalNotes>

ВЫХОД 3:

 <Comments>
    <Name>Comments</Name>
    <Operation>Append</Operation>
    <Value>External notes value .
           Internal Notes value
    </Value>
   </Comments>

2 ответа

Решение

Это простое отображение, если вы используете xslt - посмотрите здесь, чтобы преобразовать вашу карту в xslt,

Например:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

   <xsl:output method="xml" indent="yes"/>

   <xsl:template match="/xml">
      <xsl:if test="InternalNotes or ExternalNotes">
         <!-- . and newline delimiter if both elements present, else none -->
         <xsl:variable name="delimiter">
            <xsl:if test="InternalNotes and ExternalNotes">.&#10;</xsl:if>
         </xsl:variable>
         <Comments>
            <Name>Comments</Name>
            <Operation>Append</Operation>
            <Value>
               <xsl:value-of select="concat(InternalNotes/Value/text(), 
                    $delimiter, ExternalNotes/Value/text())"/>
            </Value>
         </Comments>
      </xsl:if>
   </xsl:template>
</xsl:stylesheet>

Это преобразует следующее:

<xml>
   <ExternalNotes>
      <Value>External notes value</Value>
   </ExternalNotes>
   <InternalNotes>
      <Value>Internal notes value</Value>
   </InternalNotes>
</xml>

К этому:

<?xml version="1.0" encoding="utf-8"?>
<Comments>
  <Name>Comments</Name>
  <Operation>Append</Operation>
  <Value>Internal notes value.
External notes value</Value>
</Comments>

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

Похоже, что ваша карта действительна, попробуйте удалить функтоиды Equality, просто напрямую сопоставьте Existance to LogicalOr.

Ps Пожалуйста, предоставьте ваш пример ввода и ожидаемый результат, если я не понял вашу идею.

Другие вопросы по тегам