動的フィールド参照の作成

REFERENCE 型の変数は、メッセージ・ツリー内をナビゲートするための動的参照として使用できます。この動作は、メッセージ・カーソルまたは変数ポインターの動作とよく似ています。一般に、反復構造にアクセスするときには、配列指標よりも参照変数を使用するほうが、簡単で効率的です。参照変数はどこでも受け入れられます。フィールド参照は受け入れられており、メッセージ・ツリーの詳細な操作ができるよう、ステートメントと関数のセットを指定します。

動的参照は、宣言してからでなければ使用できません。動的参照は、1 つのステートメント内で宣言し初期化されます。以下は、参照を作成して使用する方法を示しています。

-- Declare the dynamic reference
DECLARE myref REFERENCE TO OutputRoot.XML.Invoice.Purchases.Item[1];

-- Continue processing for each item in the array
WHILE LASTMOVE(myref)=TRUE
DO
-- Add 1 to each item in the array
   SET myref = myref + 1;
-- Move the dynamic reference to the next item in the array
   MOVE myref NEXTSIBLING;
END WHILE;

この例では、myref という動的参照を宣言しています。それは、Purchases 内の配列の最初の項目を指します。最初の項目の値に 1 加算したら、ポインター (動的参照) は次の項目に移動します。再び項目の値に 1 加算します。このプロセスは、ポインターがメッセージ配列の範囲外になるまで (この配列中のすべての項目が処理されるまで) 続けられ、その後、LASTMOVE 関数が FALSE を戻します。

以下にさらにいくつかの例を示します。

DECLARE ref1 REFERENCE TO InputBody.Invoice.Purchases.Item[1];

DECLARE ref2 REFERENCE TO
	InputBody.Invoice.Purchases.NonExistentField;

DECLARE scalar1 CHARACTER;
DECLARE ref3 REFERENCE TO scalar1;

第 2 の例では、存在しないフィールドが指定されているため、ref2 は InputBody を指すように設定されます。

動的参照は、静的参照を使用できるところならどこでも使用できます。例外は、動的参照の位置を変更する MOVE ステートメントです。ある式またはステートメントの中での動的参照の値は、それが現在指しているフィールドまたは変数の値です。例えば、サンプル・メッセージ に示されているメッセージの場合、Invoice.Customer.FirstName の値は Andrew です。下記のようにして動的参照 myref が FirstName フィールドを指すように設定されている場合、

DECLARE myref REFERENCE TO Invoice.Customer;

myref の値は Andrew になります。次のようにして、この動的参照を拡張できます。

SET myref.Billing.Address[1] = 'Oaklands';

これにより、この例の住所 (Address) は Oaklands Hursley Village Hampshire SO213JR になります。

動的参照の位置は、ツリーが変更された場合でも固定されています。この点を例示するため、次に示すステップでは、サンプル・メッセージのメッセージを入力メッセージとして使用して、このメッセージの修正バージョンを出力メッセージとして作成します。

  1. 入力メッセージを出力メッセージにコピーします。
  2. 出力メッセージを変更するため、まず、最初の項目 The XML Companion を指す動的参照 ref1 を宣言します。
    DECLARE ref1 REFERENCE TO 
    	OutputRoot.XML.Invoice.Purchases.Item[1];
    これで動的参照は、静的参照 OutputRoot.XML.Invoice.Purchases.Item[1] に相当するものになります。
  3. CREATE ステートメントを使って、この購入の最初の項目を新たに挿入します。
    CREATE PREVIOUSSIBLING OF ref1 VALUES 'Item'; 
    これで動的参照は、静的参照 OutputRoot.XML.Invoice.Purchases.Item[2] に相当するものになります。
関連概念
メッセージ・フローの概要
ESQL の概要
メッセージのモデル化
関連タスク
メッセージ・フローの設計
メッセージ・フローの内容の定義
ESQL ファイルの管理
関連資料
Compute ノード
Database ノード
Filter ノード
ESQL 参照
DECLARE ステートメント
IF ステートメント
LASTMOVE 関数
MOVE ステートメント
SET ステートメント
WHILE ステートメント
サンプル・メッセージ
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ak04864_