エレメントの既知の複数の出現にアクセスする

メッセージの内容を参照または作成する場合は、データに反復フィールドが含まれている可能性が十分にあります。 存在する反復フィールドのインスタンスの数を知っており、その種のフィールドの特定インスタンスにアクセスしたい場合、 フィールド参照の一部として配列指標を使用することができます。

たとえば、注文の配送を迅速に処理するためにアドレスの最初の行でフィルター操作を行うことができます。 エレメント Billling.Address の 3 つのインスタンスは、常にサンプル・メッセージに含まれています。 最初の行をテストするには、以下のような式を立てます。

IF Body.Invoice.Customer.Billing.Address[1] = 'Patent Office' THEN
   DO;
          -- more ESQL --
END IF;

配列指標 [1] は、 目的とする反復フィールドの最初のインスタンスを示します (配列指標は 1 から始まります)。 このような配列指標は、フィールド参照のどこででも使用できるため、たとえば、以下のテストでフィルターを掛けることもできます。

IF Body.Invoice."Item"[1].Quantity > 2 THEN
   DO;
          -- more ESQL --
END IF;

特殊な [<] 配列指標を使用して、反復フィールドの最後のインスタンスや、 最後のインスタンスと相対的なインスタンス (たとえば、最後から 2 番目) を参照できます。

また、配列指標 [>] を使用して、最初のエレメントや、最初のエレメントと相対的なエレメントを同様に表すことができます。

以下の例は、これらの指標を使用した Invoice メッセージを示しています。

IF Body.Invoice.Customer.Billing.Address[<] = 'Hampshire' THEN 
      DO;
          -- more ESQL --
END IF;
IF Body.Invoice.Customer.Billing.Address[<2 ] = 'Southampton' THEN
   DO;
          -- more ESQL --
END IF;

これらの特殊な指標は、反復回数が分からないエレメントにも使用できます。

反復フィールドの削除

エレメントが複数回反復するメッセージをメッセージ・フローを介して渡す場合で、 いくつかの反復を削除する場合は、削除が行われるたびに反復の番号が振り直されます。 たとえば、特定のエレメントが 5 回反復するメッセージがある場合で、メッセージ・フローに次の ESQL があるとします。

SET OutputRoot.MRM.e_PersonName[1] = NULL;
SET OutputRoot.MRM.e_PersonName[4] = NULL;

この場合、エレメント 1 と 4 が削除されるように思えます。 しかし、反復エレメントはスタックに保管されるので、 あるエレメントを削除すると、その上にあったエレメントが削除されたエレメントの位置に来ます。 つまり、上の例では、エレメント 1 と 5 が削除されることになります。 この問題を避けるために、削除は逆順で行ってください。 つまり、エレメント 4 を削除してからエレメント 1 を削除するということです。

関連概念
メッセージ・フロー
ESQL
メッセージのモデル化

関連タスク
エレメントの不明な複数の出現へのアクセス
メッセージ・フローの設計
メッセージ・フローの内容の定義
ESQL ファイルの管理

関連資料
Compute ノード
Database ノード
Filter ノード
ESQL
IF ステートメント
SET ステートメント
サンプル・メッセージ