Выходное сообщение Biztalk Preload перед преобразованием карты

У меня есть 2 взаимосвязанных входящих сообщения от 2 разных систем (SystemA и SystemB), и я просто хочу скопировать пару полей из сообщения SystemA в SystemBmessage.

Итак, моя форма сообщения Construct выглядит следующим образом:

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

Форма Message Assignment просто содержит этот код внутри:

xmlIncomingNoAttachHolder = new System.Xml.XmlDocument();
xmlIncomingNoAttachHolder = msgMultiPartInNoAttachment.BodySegments;

// assigning the SsytemB version (no attachment) first.
// Also, since we are only copying a couple fields, this can serve as the base.
msgComboWithAttach = xmlIncomingNoAttachHolder;
msgComboWithAttach(XMLNORM.TargetCharset) = "UTF-8";

Тогда на карте только 2 входных сообщения (схема SystemA и схема SystemB) ORU слева и выходное сообщение ORU справа, которое также использует ту же схему, что и входное сообщение SystemB.

Я надеялся, что я мог просто использовать код назначения сообщения выше, чтобы назначить вывод msgComboWithAttach сообщение, затем используйте маппер для сопоставления нескольких полей, которые нам нужны, от сообщения SystemA до сообщения SystemB.

Но похоже, что как только я применяю карту, она очищает предварительно загруженную msgComboWithAttach сообщение перед выполнением преобразования, а затем применяет карту. Полученное в результате сообщение содержит ТОЛЬКО те поля, которые скопированы на карте, и ни один из других сегментов / полей, которые были назначены в предварительной загрузке сообщения.

Является ли это ожидаемым поведением, в таком случае мне придется делать массовое копирование всех сегментов на карте? Или есть способ предварительно загрузить / скопировать сообщение, как я хочу, а затем только сопоставить пару полей?

2 ответа

Решение

Да, это ожидаемое поведение, поскольку преобразование создаст новое сообщение. Вы не можете использовать Xslt для изменения документа таким способом.

Решение Дейкграфа будет работать. В качестве альтернативы вы можете использовать функцию Orchestration xpath() для чтения и установки определенных значений в сообщении. Смотрите: http://msdn.microsoft.com/en-us/library/ee268159(v=bts.10).aspx

Да, это ожидаемое поведение.

Что вы хотите сделать, это

  1. Различайте поля в схеме (ах) (цель и источник, в вашем случае они могут быть одинаковыми, если я понимаю, что вы говорите).
  2. Сначала убедитесь, что на карте созданы поля, которые вы хотите заполнить фиктивными значениями.
  3. Имейте форму назначения, после этого только одна строка для каждого из полей в формате msgDestination.record.field = msgSource.record.field; (Примечание: у вас может быть несколько уровней записей).

Это работает только для неповторяющихся полей. Для повторяющихся полей вам нужно использовать карту из нескольких частей.

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