Существует несколько систем приложений, которые передают сообщения друг другу как часть своего рабочего процесса. Из-за технических ограничений, нарушающих целостность транзакций, данные приложения и доставка сообщений фиксируются в единой базе данных DB2 мэйнфрейма. Сообщения не передаются напрямую на сервер BizTalk (2006 R2); позднее BTS сможет извлечь сообщение из базы данных DB2.
Таблица очереди сообщений в базе данных DB2 имеет несколько полей. Ключевым полем является столбец MESSAGE_DATA - фактическое сообщение; это сам контент XML. Когда кто-то использует адаптер DB2 для запроса записей из таблицы, входящая схема будет выглядеть как
ОБНОВЛЕНИЕ КОРРЕКЦИИ: схема DB2Message основана на атрибутах; Я ошибочно принял его за элементный базис.
<DB2Message MESSAGE_DATA="<InternalXML> ........ </InternalXML>"
MESSAGE_DATE="2008-1-1 00:00:00" MESSAGE_ID="GUID" TXN_ID="GUID" .... other attrib />
Оркестровка использует схему
<EAIMessage>
<Header>
<ServiceID>
<MessageID>
....
<Mode>
</Header>
<Body>
<RawXML>
</Body>
</EAIMessage>
Оркестровка будет использовать несколько повышенных полей в заголовке для принятия решений о маршрутизации и обработке. Дело в том, что эти поля заголовков на самом деле берутся из содержимого внутреннего XML, хранящегося в MESSAGE_DATA DB2Message.
На этом единственном уровне Mapper не знает об этой базовой XML-схеме внутри MESSAGE_DATA при объединении двух схем. Вероятно, должен быть какой-то функтоид XPath, который может дополнительно развернуть элемент MESSAGET_DATA для проведения правильного сопоставления значений, но, поскольку раньше я не имел дело с обширными приложениями XML и XSLT, я не могу увидеть доступные функции, которые могут помочь мне выполнить эту задачу .
Кто-нибудь делал такое извлечение и отображение данных раньше?
UPDATE. В соответствии с запросом, внутренний файл MESSAGE_DATA может выглядеть как
<Message>
<Id>e86970f4-0455-4535-8e65-a06eb7aaef8a</Id>
<SenderApp>999</SenderApp>
<ReceiverApp>2000</ReceiverApp>
<ServiceId>8798973454</ServiceId>
<Mode>P</Mode>
<MuxId></MuxId>
<ExceptionCode></ExceptionCode>
<ExceptionMessage></ExceptionMessage>
<Body>
<WorkItem xmlns="http://tempuri.org/WorkItem.xsd">
<ServiceHeader xmlns="http://tempuri.org/Service.xsd">
<ID_UPDATED_BY>username</ID_UPDATED_BY>
<ID_HISTORY_REF>xxxxxxx</ID_HISTORY_REF>
<SESSION_ID>sessionID</SESSION_ID>
<DT_LAST_UPDATE>timestamp</DT_LAST_UPDATE>
<TM_LAST_UPDATE>time</TM_LAST_UPDATE>
</ServiceHeader>
</WorkItem>
</Body>
</Message>