Запись не сопоставляется с картой 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">. </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 Пожалуйста, предоставьте ваш пример ввода и ожидаемый результат, если я не понял вашу идею.