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 になります。
動的参照の位置は、ツリーが変更された場合でも固定されています。 この点を例示するため、次に示すステップでは、サンプル・メッセージのメッセージを入力メッセージとして使用して、このメッセージの修正バージョンを出力メッセージとして作成します。
DECLARE ref1 REFERENCE TO OutputRoot.XML.Invoice.Purchases.Item[1];
CREATE PREVIOUSSIBLING OF ref1 VALUES 'Item';
関連概念
メッセージ・フロー
ESQL
メッセージのモデル化
関連タスク
メッセージ・フローの設計
メッセージ・フローの内容の定義
ESQL ファイルの管理
関連資料
Compute ノード
Database ノード
Filter ノード
ESQL
DECLARE ステートメント
IF ステートメント
LASTMOVE 関数
MOVE ステートメント
SET ステートメント
WHILE ステートメント
サンプル・メッセージ
注意 |
商標 |
ダウンロード |
ライブラリー |
技術サポート |
フィードバック
![]() ![]() |
ak04864_ |