Wenn Sie auf Nachrichteninhalt verweisen oder Nachrichteninhalt erstellen, enthalten die Daten höchstwahrscheinlich Wiederholungsfelder. Wenn Sie die Anzahl der Instanzen eines Wiederholungsfeldes kennen, und Sie auf eine bestimmte Instanz zugreifen möchten, können Sie einen Feldgruppenindex als Teil eines Feldverweises verwenden.
Beispiel: Sie wenden einen Filter für die erste Adresszeile an, um die Zustellung eines Auftrags zu beschleunigen. Drei Instanzen des Elements 'Billing.Address' sind stets in der Beispielnachricht enthalten. Schreiben Sie beispielsweise folgenden Ausdruck, um die erste Zeile zu überprüfen:
IF Body.Invoice.Customer.Billing.Address[1] = 'Patent Office' THEN DO; -- more ESQL -- END IF;
Der Feldgruppenindex [1] gibt an, dass dies die erste Instanz des Wiederholungsfeldes ist, das für Sie von Bedeutung ist (Feldgruppenindizes beginnen mit 1). Ein solcher Feldgruppenindex kann an einer beliebigen Stelle in einem Feldverweis verwendet werden. Sie könnten als folgenden Filter anwenden:
IF Body.Invoice."Item"[1].Quantity > 2 THEN DO; -- more ESQL -- END IF;
Sie können auf die letzte Instanz eines Wiederholungsfeldes unter Verwendung des Feldgruppenindex [<] verweisen. So verweisen Sie auf Instanzen relativ zur letzten Instanz (beispielsweise auf die vorletzte):
Sie können den Feldgruppenindex [>] für die Darstellung des ersten Elements und der Elemente relativ zum ersten Element verwenden.
Im folgenden Beispiel für die Nachricht 'Invoice' werden diese Indizes verwendet:
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;
Sie können diese Sonderindizes auch für Elemente verwenden, von denen es eine unbekannte Anzahl von Instanzen gibt.
Wenn Sie eine Nachricht mit mehreren Wiederholungen eines Elements in einem Nachrichtenfluss übergeben und einige der Wiederholungen löschen möchten, beachten Sie, dass die Wiederholungen nach jedem Löschvorgang neu nummeriert werden. Wenn Ihre Nachricht beispielsweise fünf Wiederholungen eines bestimmten Elements enthält, und im Nachrichtenfluss wird folgende ESQL verwendet:
SET OutputRoot.MRM.e_PersonName[1] = NULL; SET OutputRoot.MRM.e_PersonName[4] = NULL;
erwarten Sie, dass die Elemente eins und vier gelöscht werden. Da jedoch wiederholt vorkommende Elemente in einem Stapelspeicher gespeichert werden, rückt das Element über dem gelöschten Element auf den Platz des gelöschten Elements nach. Dies bedeutet, dass im obigen Beispiel die Elemente eins und fünf gelöscht werden. Um dieses Problem zu vermeiden, löschen Sie die Elemente in umgekehrter Reihenfolge, d. h., löschen Sie zuerst Element vier und anschließend Element eins.