メッセージの内容を参照または作成する場合は、データに反復フィールドが含まれている可能性が十分にあります。存在する反復フィールドのインスタンスの数を知っており、その種のフィールドの特定インスタンスにアクセスしたい場合、フィールド参照の一部として配列指標を使用することができます。
例えば、注文の配送を迅速に処理するためにアドレスの最初の行でフィルター操作を行うことができます。エレメント 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 を削除するということです。