作業プロセスの一部として互いにメッセージを渡すアプリケーション システムがいくつかあります。トランザクションの整合性に関する技術的な制約により、アプリケーション データとメッセージ配信はすべて単一のメインフレーム DB2 データベースにコミットされます。メッセージは BizTalk サーバー (2006 R2) に直接渡されません。後で DB2 データベースからメッセージを引き出すのは BTS 次第です。
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 コンテンツから来ています。
この単一レベルでは、マッパーは、2 つのスキーマを組み合わせるときに、MESSAGE_DATA 内のこの基礎となる XML スキーマを認識しません。おそらく、MESSAGET_DATA 要素をさらにドリルダウンして値の適切なマッピングを実行できる XPath Functoid がいくつかあるはずですが、これまで大規模な XML および XSLT アプリケーションを扱ったことがないため、このタスクの実行に役立つ利用可能な機能を確認できません。 .
以前にそのようなデータ抽出とマッピングを行った人はいますか?
アップデート。要求に応じて、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>