作爲其工作過程的一部分,有幾個應用程序系統將消息傳遞給對方。由於技術上的約束使得事務完整性得到了控制,所以應用程序數據和消息傳遞都被提交到一個大型機DB2數據庫中。郵件不直接傳遞給BizTalk服務器(2006 R2); BTS需要稍後將消息從DB2數據庫中提取出來。提取內部模式XML值以映射到編排的入站模式的方法
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>
業務流程將使用多個推廣領域的頭,使路由和處理決定的模式。問題是,這些頭字段實際上來自存儲在DB2Message的MESSAGE_DATA中的內部XML內容。
在這個單一級別上,Mapper在將兩個模式組合在一起時並不知道MESSAGE_DATA中的這個解構XML模式。應該可能有一些XPath functoid可以進一步鑽取MESSAGET_DATA元素以進行適當的值映射,但之前沒有處理過大量的XML和XSLT應用程序,但我無法看到可幫助我執行此任務的可用功能。
以前有人做過這樣的數據提取和映射嗎?
UPDATE。按照要求,在MESSAGE_DATA內XML可能看起來像
<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>
將DB2查詢模式更新爲基於屬性而不是基於元素。 – icelava 2008-11-05 02:27:48