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 zu Field[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.