Zugriff auf bekannte Mehrfachvorkommen eines Elements
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 Array-Index als Teil eines Feldverweises verwenden.
Informationen zu dieser Task
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 Array-Index [1] gibt an, dass dies die erste Instanz des Wiederholungsfelds ist, für das Sie sich interessieren (Array-Indizes beginnen bei 1). Ein Array-Index wie dieser kann an einer beliebigen Stelle in einem Feldverweis verwendet werden, sodass
Sie z. B. nach dem folgenden Test filtern könnten:
IF Body.Invoice."Item"[1].Quantity> 2 THEN
DO;
-- more ESQL --
END IF;
Mithilfe des speziellen Array-Indexes [<] 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:
Field[<]gibt das letzte Element an.Field[<1]gibt das letzte Element an.Field[<2]gibt das zweitletzte Element (das vorletzte Element) an.
Sie können auch den Array-Index [>] verwenden, um das erste Element und Elemente relativ zum ersten Element auf ähnliche Weise darzustellen.
Field[>]gibt das erste Element an. Dies ist äquivalent zuField[1].
Die folgenden Beispiele beziehen sich auf die Beispielnachricht , die 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 speziellen Indizes auch für Elemente verwenden, bei denen die Anzahl der Wiederholungen nicht bekannt ist.
Wiederholungsfelder löschen
Informationen zu dieser Task
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.