Compute ノードを使用して、入力メッセージの一部を出力メッセージにコピーします。 この場合のコピーの結果は、それに伴う入力および出力のパーサーのタイプによって異なります。
ソース・メッセージとターゲット・メッセージのフォルダー構造がルート・レベルで両方とも同じである場合、 同種パーサー・コピーが実行されます。 以下に例を示します。
SET OutputRoot.MQMD = InputRoot.MQMD;
このステートメントは、入力メッセージの MQMD フォルダーのすべての子を、出力メッセージの MQMD フォルダーにコピーします。
次に示すのは、同種パーサー・コピーをサポートするツリー構造の別の例です。
SET OutputRoot.XMLNS.Data.Account = InputRoot.XMLNS.Customer.Bank.Data;
MRM ドメインの入力メッセージを、MRM ドメインの出力メッセージに変換するには、Compute または Mapping のどちらかのノードを使用できます。 Mapping ノードは、両方のメッセージの形式を知っており、必要な処置を解釈することができます。 Compute ノードに対する ESQL モジュールのコンテンツ・アシストも、それらのメッセージに対してメッセージ定義を使用することができます。 メッセージが同じネーム・スペースにない場合は、Compute ノードを使用する必要があります。
コンテンツ・アシストとメッセージ参照を併用するには、ESQL を備えたプロジェクトからメッセージ・セットを備えたプロジェクトへのプロジェクト参照をセットアップする必要があります。 プロジェクト参照のセットアップの詳細については、ライブラリー参照の追加と除去を参照してください。
入出力メッセージの両方が MRM ドメインにない場合には、Compute ノードを使用して、メッセージの構成をご自身で指定する必要があります。
ソース・メッセージとターゲット・メッセージのフォルダー構造がルート・レベルで異なる場合、 メッセージ・ソースの完全コピーを行うことはできません。 その代わり、異種パーサー・コピーでは、ソース・メッセージが、 リーフ名と値のペアで終了する、ネストされたフォルダーのセットとして表されます。 例えば、次のメッセージを XML から MRM にコピーするとした場合:
<Name3><Name31>Value31</Name31>Value32</Name3>
この場合は、名前エレメント Name3、 および値 Value31 を持つ Name31 という名前値エレメントが生成されます。 2 番目の XML pcdata (Value32) は表現できず、廃棄されます。
異種パーサー・コピーではソース・ツリーをスキャンして、 名前エレメントとも呼ばれるフォルダーと、リーフ名 - 値ペアをコピーします。 それ以外のものは、ソースのパーサーによって special のフラグが立てられているエレメントも含めて、 いずれもコピーされません。
異種パーサー・コピーになるツリー構造の例を次に示します。
SET OutputRoot.DFDL.Data.Account = InputRoot.XMLNSC.Data.Account;
異種パーサー・コピーを行うために使用されるアルゴリズムが実際のツリー構造に適さない場合は、ソース・フィールドをさらに限定して、コピーするツリーの総量を制限する必要があります。
情報を入力メッセージから、異なるドメインの出力メッセージへとコピーする場合には注意してください。 出力メッセージを処理するパーサーの規則と整合していないメッセージ構造または内容を作成する ESQL をコーディングすることは可能です。 そのようなアクションの結果として、出力メッセージが作成されないか、または想定外の内容が作成される可能性があります。 特定のメッセージ・フローによって生成された出力メッセージに正しい内容が入っていない場合や、見込みどおりのフォームではないと思われる場合、出力メッセージを作成する ESQL を調べて、構造、フィールド・タイプ、フィールド名、およびフィールド値に不一致がないかどうかを調べてください。
-- Copy message to the output, moving from XMLNSC to MRM domains
SET OutputRoot.MRM = InputRoot.XMLNSC.rootElement;
-- Set the CWF format for output by the MRM domain
SET OutputRoot.Properties.MessageType = '<MessageTypeName>';
SET OutputRoot.Properties.MessageSet = '<MessageSetName>';
SET OutputRoot.Properties.MessageFormat = 'CWF';