WebSphere Message Broker Version 8.0.0.5 Betriebssysteme: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Sehen Sie sich die Informationen zur aktuellen Produktversion im IBM Integration Bus Version 9.0 an.

Zugriff auf unbekannte Mehrfachvorkommen eines Elements

Um auf Wiederholungsfelder in einer Nachricht zuzugreifen, müssen Sie ein Konstrukt verwenden, das über alle Instanzen eines Wiederholungsfeldes iterieren kann.

Sie werden voraussichtlich mit Nachrichten arbeiten, die Wiederholungsfelder mit einer unbekannten Anzahl an Wiederholungen enthalten (wie beispielsweise das Feld Item in Beispielnachricht).

Wenn Sie einen Filter schreiben möchten, der alle Instanzen des Felds Item berücksichtigt, müssen Sie ein Konstrukt verwenden, das über alle Instanzen eines Wiederholungsfelds iterieren kann. Die Vergleichsfunktion ermöglicht die Ausführung eines Vergleichselements für alle Instanzen eines Wiederholungsfelds und die Sortierung der Ergebnisse.

Angenommen, Sie möchten sicherstellen, dass die Menge keines der bestellten Artikel über 50 liegt. Hierfür können Sie folgenden Code schreiben:

FOR ALL Body.Invoice.Purchases."Item"[] 
    AS I (I.Quantity <= 50)

Im Hinblick auf Vergleichsfunktion soll zunächst auf die eckigen Klammern [] am Ende der Feldreferenz nach FOR ALL aufmerksam gemacht werden. Diese bedeuten, dass Sie über alle Instanzen des Felds Item iterieren.

In einigen Fällen scheint diese Syntax unnötig, da diese Informationen aus dem Kontext ersichtlich sind; sie wird jedoch aus Gründen der Konsistenz mit anderen Syntaxbereichen dennoch verwendet.

Die AS-Klausel ordnet den Namen I der aktuellen Instanz des Wiederholungsfelds zu. Dieses Konzept entspricht ungefähr dem Konzept der Iteratorklassen, das in einigen objektorientierten Sprachen wie C++ verwendet wird. Der Ausdruck in runden Klammern ist ein Vergleichselement, das für jedes Instanz des Felds Item ausgewertet wird.

Die Beschreibung dieses Beispiels lautet wie folgt:

Iterieren Sie über alle Instanzen des Felds 'Item' innerhalb von Body.Invoice. Für jede Iteration gilt Folgendes:
  1. Binden Sie den Namen I an die aktuelle Instanz von Item.
  2. Werten Sie das Vergleichselement I.Quantity <= 50 aus. Wenn das Vergleichselement:
    • für alle Instanzen von Item TRUE ergibt, wird TRUE zurückgegeben.
    • für eine Instanz von Item FALSE ergibt, wird FALSE zurückgegeben.
    • eine Kombination aus TRUE und UNKNOWN ergibt, wird UNKNOWN zurückgegeben.

Die obige Beschreibung gilt für die Art der Auswertung eines Vergleichselements, wenn Sie das Schlüsselwort ALL verwenden. Alternativ hierzu kann SOME oder ANY (funktionale Entsprechung) angegeben werden. In diesem Fall gibt die Vergleichsfunktion TRUE zurück, wenn das untergeordnete Vergleichselement für eine Instanz des Wiederholungsfelds TRUE zurückgibt. Nur wenn das untergeordnete Vergleichselement für alle Instanzen des Wiederholungsfelds FALSE zurückgibt, gibt die Vergleichsfunktion FALSE zurück. Wenn vom untergeordneten Vergleichselement eine Kombination aus FALSE und UNKNOWN zurückgegeben wird, wird der Gesamtwert UNKNOWN zurückgegeben.

Im Filterausdruck

FOR ANY Body.Invoice.Purchases."Item"[]  
    AS I (I.Title = 'The XML Companion')

ergibt das untergeordnete Vergleichselement TRUE. Der nächste Ausdruck ergibt jedoch FALSE:

FOR ANY Body.Invoice.Purchases."Item"[] 
    AS I (I.Title = 'C Primer')

Der Grund hierfür ist, dass C Primer in dieser Rechnung nicht enthalten ist. Wenn einige der Artikel (Item) in der Rechnung (invoice) kein Feld für den Buchtitel enthalten, gibt das untergeordnete Vergleichselement UNKNOWN zurück, und die Vergleichsfunktion gibt den Wert UNKNOWN zurück.

Damit die Möglichkeit der Rückgabe von Nullwerten abgedeckt ist, schreiben Sie folgenden Filter mit einer expliziten Prüfung im Hinblick auf das Vorhandensein des Felds:
FOR ANY Body.Invoice.Purchases."Item"[] 
	 	 AS I (I.Book IS NOT NULL AND I.Book.Title = 'C Primer')

Das Vergleichselement IS NOT NULL stellt sicher, dass vom untergeordneten Vergleichselement ein FALSE-Wert zurückgegeben wird, wenn ein Artikelfeld (Item) kein Buch (Book) enthält.

Mithilfe eines SELECT-Ausdrucks können Sie auch beliebige Wiederholungen von Feldern innerhalb einer Nachricht bearbeiten. Dieser Vorgang ist im Abschnitt Auf Spalten in einer Datenbank verweisen beschrieben.

Sie können mithilfe der Feldgruppenindizes [>] und [<] auf die ersten und letzten Instanzen eines Wiederholungsfelds verweisen, sowie auf die Instanzen, die relativ zur ersten und letzten sind. Dies gilt auch, wenn Sie die Anzahl der vorhandenen Instanzen nicht kennen. Diese Indizes werden im Abschnitt Zugriff auf bekannte Mehrfachvorkommen eines Elements beschrieben.

Alternativ dazu können Sie mit der Funktion CARDINALITY ermitteln, wie viele Instanzen eines Wiederholungsfelds vorhanden sind. Beispiel:

DECLARE I INTEGER CARDINALITY(Body.Invoice.Purchases."Item"[])
Bemerkungen | Marken | Downloads | Bibliothek | Support | Feedback

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        Letzte Aktualisierung:
        
        Letzte Aktualisierung: 2015-02-28 16:19:59


TaskthemaTaskthema | Version 8.0.0.5 | ac16770_