Существует несколько прикладных систем, которые передают друг другу сообщения в рамках своего рабочего процесса. Из-за технических ограничений, регулирующих целостность транзакций, данные приложения и доставка сообщений фиксируются в единой базе данных 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, я не могу увидеть доступные функции, которые могут помочь мне выполнить эту задачу. .
Кто-нибудь раньше делал такое извлечение данных и отображение?
ОБНОВИТЬ. По запросу внутренний XML-код 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>