Wenn Sie auf den Inhalt von Nachrichten verweisen oder diesen erstellen, ist es sehr wahrscheinlich, dass die Daten Wiederholungsfelder enthalten. Wenn Sie wissen, wie viele Instanzen eines Wiederholungsfelds vorhanden sind, und Sie auf eine bestimmte Instanz eines solchen Feldes zugreifen möchten, können Sie einen Feldgruppenindex als Teil eines Feldverweises verwenden.
Nehmen wir beispielsweise an, Sie möchten nach der ersten Zeile einer Adresse filtern, um die Zustellung eines Auftrags zu beschleunigen. Drei Instanzen des Elements 'Billing.Address' sind in der Beispielnachricht immer vorhanden. Um die erste Zeile zu testen, schreiben Sie z. B. folgenden Ausdruck:
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 Wiederholungsfelds ist, für das Sie sich interessieren (Feldgruppenindizes beginnen bei 1). Ein Feldgruppenindex wie dieser kann an einer beliebigen Stelle in einem Feldverweis verwendet werden, so dass Sie z. B. nach dem folgenden Test filtern könnten:
IF Body.Invoice."Item"[1].Quantity > 2 THEN DO; -- more ESQL -- END IF;
Mit Hilfe des speziellen Feldgruppenindexes [<] können Sie wie folgt auf die letzte Instanz eines Wiederholungsfelds und auf Instanzen relativ zur letzten Instanz (z. B. auf die vorletzte Instanz) verweisen:
Sie können den Feldgruppenindex [>] für die Darstellung des ersten Elements und der Elemente relativ zum ersten Element verwenden.
Die folgenden Beispiele beziehen sich auf die Nachricht 'Invoice' (Rechnung) und stellen die Verwendung dieser Indizes dar:
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 speziellen Indizes auch für Elemente verwenden, bei denen die Anzahl der Wiederholungen nicht bekannt ist.
Wenn Sie eine Nachricht mit mehreren Wiederholungen eines Elements über einen Nachrichtenfluss übergeben und einige der Wiederholungen löschen möchten, muss Ihnen bewusst sein, dass sich die Nummerierung der Wiederholungen nach jedem Löschvorgang verschiebt. Nehmen wir beispielsweise an, Sie haben eine Nachricht mit fünf Wiederholungen eines bestimmten Elements, und im Nachrichtenfluss ist folgende ESQL enthalten:
SET OutputRoot.MRM.e_PersonName[1] = NULL; SET OutputRoot.MRM.e_PersonName[4] = NULL;
Nun erwarten Sie möglicherweise, dass die Elemente 1 und 4 gelöscht werden. Da Elemente jedoch in einem Stack gespeichert werden, tritt beim Löschen des ersten Elements das nächste Element an seine Stelle. Dies bedeutet, dass im obigen Beispiel die Elemente 1 und 5 gelöscht werden. Um dieses Problem zu vermeiden, sollten Sie in umgekehrter Reihenfolge löschen, d. h. zuerst Element 4 und dann Element 1.