マッピングのヒントおよび制約事項

これらのヒントは、メッセージ・フロー内にマッピング・ノードがすでに作成されており、メッセージ・マッピング・エディターが開かれ、ソース・メッセージとターゲット・メッセージの両方を選択していることを前提としています。

非反復ターゲット・フィールドを非反復ソース・フィールドと等しくなるように設定する

  1. メッセージ・マッピング・エディターのソース・ペインで、ソース・フィールドをドラッグしてそれをターゲット・フィールドへドロップします。

反復ターゲット・フィールドを反復ソース・フィールド) と等しくなるように設定する (For)

  1. メッセージ・マッピング・エディターのソース・ペインで、反復ソース・フィールドをドラッグしてそれを反復ターゲット・フィールドへドロップします。
  2. スプレッドシートで、反復ターゲット・フィールドを右クリックして、ポップアップ・メニューから「for」を選択します。 スプレッドシートに For エントリーが表示されます。
  3. For エントリーをクリックし、反復ソース・フィールドをドラッグして、それをスプレッドシートのすぐ上の編集ペインにドロップします。

フィールドを移動するための条件を設定する (If)

  1. メッセージ・マッピング・エディターのソース・ペインで、ソースをドラッグしてそれをターゲットへドロップします。
  2. スプレッドシートで、ターゲット・フィールドを右クリックして、ポップアップ・メニューから「if」を選択します。 スプレッドシートに If エントリーが表示されます。
  3. If エントリーを展開します。fn:true() をデフォルト値とする条件が下に表示されます。
  4. 条件 fn:true() をクリックします。スプレッドシートのすぐ上の編集ペインに条件が表示されます。
  5. fn:true() 値を削除します。
  6. スプレッドシートのすぐ上の編集ペインにソース・フィールドをドラッグします。
  7. ソース・フィールドを編集して、必要な条件を追加します。例えば、$source/Parent/SaleList/Invoice/Initial = 'K' は、次の ESQL 操作と同等です。IF InputRoot.Parent.SaleList.Invoice.Initial = 'K' THEN

同等ではない条件を設定する

条件が = 以外と一致するようにしたい場合:
等しくない !=
より大きい >
より大か等しい >=
より小さい <
より小か等しい <=

例: $source/Parent/SaleList/Invoice/Surname != 'Shop'

フィールドを移動するための代替条件を設定する (Else)

  1. メッセージ・マッピング・エディターで、フィールドを移動するための条件を設定する (If) にリストされているステップを完了します。
  2. 条件エントリーを右クリックして、ポップアップ・メニューから「Else」を選択します。 Else エントリーが Else 行の下に表示されます。これは、元の If > Condition に含まれるのと同じターゲット・フィールドになるはずです。
  3. ターゲット・フィールドを必要な値に設定します。

ターゲット・フィールドを固定値に設定する

ターゲット・フィールドがスプレッドシートに表示される場合:
  1. メッセージ・マッピング・エディターのスプレッドシートで、ターゲット・フィールドが含まれる行をクリックし、スプレッドシートの 2 列目またはスプレッドシートのすぐ上の編集ペインのいずれかに値を入力します (スプレッドシートでターゲット・フィールドをクリックしたので、スプレッドシートのすぐ上の編集ペインのフォーカスはそのターゲット・フィールドに置かれています)。
  2. ターゲット値を入力したら「入力」をクリックします (ストリング・フィールドは単一引用符でネストする必要があります)。
ターゲット・フィールドがスプレッドシートに表示されない場合:
  1. メッセージ・マッピング・エディターのスプレッドシートで、ターゲットの最も近い祖先をクリックして「拡張」を選択します。最終的な祖先は $target ですが、これは常に存在していなければなりません。このアクションにより、スプレッドシートにその祖先の子が取り込まれるはずです。
  2. 設定したいターゲット・フィールドがスプレッドシートに取り込まれるまで「拡張」を繰り返します。 スプレッドシート内で表示可能なターゲット・フィールドについては、上のステップに従ってください。

ESQL 関数をターゲット・フィールドに適用する

  1. メッセージ・マッピング・エディターのソース・ペインで、ソースをドラッグしてそれをターゲットへドロップします。
  2. スプレッドシートで、ターゲット・フィールドをクリックします。スプレッドシートのすぐ上の編集ペインにターゲット・フィールド値が表示されます。
  3. ターゲット・フィールド値を編集して、必要な ESQL を追加します (すべての ESQL ステートメントには接頭部として esql 属性が付いている必要があります)。

例: esql:upper($source/Parent/SaleList/Invoice/Surname)

算術演算子を使用する

プラス +
マイナス _
乗算 *
除算 div

例: $source/Parent/SaleList/Invoice/Item/Price div 1.6

ソースはリストであり、ターゲットはソースからのリストであるものの、リストの先頭に新規項目がある場合

  1. ターゲットを展開して、新しい最初のインスタンスを作成したいエレメントを表示します。これは構造、または単純エレメントのいずれかになります。
  2. エレメントを右マウス・ボタン・クリックして「if」を選択します。条件行がすぐ下に表示されます。
  3. エレメントを右マウス・ボタン・クリックして「コピー」を選択します。条件行に移動し、「貼り付け」を選択します。ここまでで、このエレメントに関し、スプレッドシートの中には 2 つの項目があるはずです。
  4. それらの項目の最初のものを、自分で選択した値に設定します。これは最初のインスタンスです。2 番目の項目を右マウス・ボタン・クリックして「for」を選択します。スプレッドシートに for 行が表示されます。
  5. 2 番目の項目を、ソースからマップした値 (複数可) に設定します。
  6. for 項目をループ条件に設定します。
  7. for をクリックし、次いでループ条件を表すソース・フィールドを、スプレッドシートのすぐ上の式エディターにドラッグします。

ターゲット実行時パーサーを変更する

最初にマッピングを作成するときには、ターゲット・メッセージのメッセージ・セットを指定します。出力メッセージに関連付けられるパーサーは、メッセージ・セットに関連付けられた実行時パーサーです。たとえば、メッセージ・セットの最初の作成時において、デフォルトの実行時パーサーは MRM です。これは、Mapping ノードが ESQL を以下の形式で生成することを意味します。
SET OutputRoot.MRM.Fielda...
実行時パーサーを、たとえば XML または XMLNSC に変更すると、Mapping ノードは ESQL を以下の形式で生成します。
SET OutputRoot.XMLNSC...
ソース (入力) メッセージのパーサーは、MQRFH2 ヘッダーまたは入力ノードによって決定されます。Mapping ノードは、入力においてすべてのパーサーを処理できます。Mapping ノードは、ターゲット (出力) メッセージを、メッセージ・セットの実行時パーサーと一致するパーサーで生成します。
  1. メッセージ・セット・ファイル messageset.mset を開きます。
  2. 実行時パーサーを選択した値に変更し、このメッセージ・セットをマッピングの目的で参照しているメッセージ・フロー・プロジェクトを保存し、消去します。
  3. パーサーを MRM に変更した場合は、メッセージ・セットをデプロイします。
  4. マッピングを含むメッセージ・フローをデプロイします。これを実行する場合、ESQL を Compute ノードおよび他のノードでテストして、それらが変わりなく予想どおりに機能することを確認する必要があります。

選択エレメントが無条件に処理されるようにする

選択エレメントをドラッグすると、マッピング・スプレッドシートに If 行が生成され、それぞれの可能な選択に対して条件行が生成されます。各条件には、デフォルトで fn:false() が関連付けられます (これはこの選択が処理されないことを意味します)。選択エレメントが無条件に処理されるようにしたい場合は、条件を fn:true() に設定するようにします。

データベース・スキーマ名をオーバーライドする

ESQL で生成されたデータベース・スキーマ名は変更できます。これは「実行時スキーマの指定」ダイアログの「RDB スキーマのオーバーライド」ウィザードで実行してください。デフォルトは、ツールキットにインポートされたデータベース定義のスキーマ名です。このダイアログを使用して値を変更します。

マッピングの制限

ここで明示的に述べられているのでない限り、ESQL 関数およびプロシージャーを呼び出して必要な機能を実現することができます。
  • 混合内容のフィールドをマップすることはできません。
  • マッピング・ノードで直接に例外をスローすることはできません。
  • マッピング・ノードで自己定義エレメントを操作することはできません (ワイルドカードが埋め込みメッセージを表す場合の、ワイルドカードの限定サポートがあります)。
  • マッピング・ノードで Environment ツリーを操作することはできません。
  • ユーザー変数を定義および設定することはできません。
  • CASE 式をエミュレートすることはできません。if/else を使用する必要があります。
  • ツリー内のエレメントを変更する目的で、ツリーを入力から出力にコピーすることはできません。たとえば、以下の ESQL を Mapping ノード内ではモデル化することはできません。 SET OutputRoot.MQMD = InputRoot.MQMD; SET OutputRoot.MQMD.ReplyToQ = 'NEW.QUEUE'; 1 つ以上の兄弟フィールドを変更することを意図している場合は、構造内の各フィールドを個別に設定する必要があります。
関連概念
メッセージ・マッピングの概要
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2005 Last updated: 11/07/2005
ar25245_