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.

Komplexe Nachricht umwandeln

Verwenden Sie beim Erstellen des ESQL-Codes für einen Compute-Knoten die SELECT-Funktion zum Umwandeln komplexer Nachrichten.

Dieser Abschnitt enthält Beispiele für eine komplexe Nachrichtenumsetzung. Überprüfen Sie die Beispiele und ändern Sie sie Ihren Anforderungen entsprechend. Sie basieren alle auf der Beispielnachricht als Eingabe.

In diesem Beispiel enthält 'Invoice' eine variable Anzahl Elemente (Item). Die Umsetzung ist im folgenden Beispiel dargestellt:

SET OutputRoot.XMLNS.Data.Statement[] =
    (SELECT I.Customer.Title                                   AS Customer.Title, 
            I.Customer.FirstName || ' ' || I.Customer.LastName AS Customer.Name,
            COALESCE(I.Customer.PhoneHome,'')                  AS Customer.Phone,
            (SELECT II.Title                          AS Desc,
                    CAST(II.UnitPrice AS FLOAT) * 1.6 AS Cost,
                    II.Quantity                       AS Qty 
             FROM I.Purchases.Item[] AS II
             WHERE II.UnitPrice > 0.0 ) AS Purchases.Article[],
            (SELECT SUM( CAST(II.UnitPrice AS FLOAT) *
                    CAST(II.Quantity  AS FLOAT) *
                    1.6                           )
             FROM I.Purchases.Item[] AS II        )        AS Amount,
            'Dollars'                                      AS Amount.(XML.Attribute)Currency
            
            FROM InputRoot.XMLNS.Invoice[] AS I
            WHERE I.Customer.LastName <> 'Brown' 
    );

Es wird folgende Ausgabenachricht generiert:

<Data>
 <Statement>
  <Customer>
   <Title>Mr</Title>
   <Name>Andrew Smith</Name>
   <Phone>01962818000</Phone>
  </Customer>
  <Purchases>
   <Article>
    <Desc Category="Computer" Form="Paperback" Edition="2">The XML Companion</Desc>
    <Cost>4.472E+1</Cost>
    <Qty>2</Qty>
   </Article>
   <Article>
    <Desc Category="Computer" Form="Paperback" Edition="2">
          A Complete Guide to DB2 Universal Database</Desc>
    <Cost>6.872E+1</Cost>
    <Qty>1</Qty>
   </Article>
   <Article>
    <Desc Category="Computer" Form="Hardcover" Edition="0">JAVA 2 Developers Handbook</Desc>
    <Cost>9.5984E+1</Cost>
    <Qty>1</Qty>
   </Article>
  </Purchases>
  <Amount Currency="Dollars">2.54144E+2</Amount>
 </Statement>
</Data>    

Bei dieser Umsetzung sind SELECT-Klauseln verschachtelt. Die äußere Anweisung wird auf die Liste mit Rechnungen (Invoice) angewendet. Die innere bearbeitet die Liste der Elemente (Items). Die AS-Klausel, die der inneren SELECT-Klausel zugeordnet ist, erwartet eine Feldgruppe:

            (SELECT II.Title                          AS Desc,
                    CAST(II.UnitPrice AS FLOAT) * 1.6 AS Cost,
                    II.Quantity                       AS Qty 
             FROM I.Purchases.Item[] AS II
             WHERE II.UnitPrice > 0.0 ) 
            -- Beachten Sie die Verwendung von [] im nächsten Ausdruck
               AS Purchases.Article[],

Diese Anweisung sagt der äußeren SELECT-Klausel, dass sie in jedem Ergebnis mit einer variablen Anzahl von Elementen rechnen muss. Jede SELECT-Klausel hat einen eigenen Korrelationsnamen: I für die äußere SELECT-Klausel äußere II für die innere. In der Regel verwendet jede SELECT-Klausel einen eigenen Korrelationsnamen, doch die FROM-Klausel in der inneren SELECT-Klausel verweist auf den Korrelationsnamen der äußeren SELECT-Klausel:

            (SELECT II.Title                          AS Desc,
                    CAST(II.UnitPrice AS FLOAT) * 1.6 AS Cost,
                    II.Quantity                       AS Qty 
            -- Beachten Sie die Verwendung von I.Purchases.Item im nächsten Ausdruck
             FROM I.Purchases.Item[] AS II
             WHERE II.UnitPrice > 0.0 ) AS Purchases.Article[],

Diese Anweisung sagt der inneren SELECT-Klausel, dass sie die Elemente der aktuellen Invoice-Nachricht bearbeiten soll. Beide SELECT-Klauseln enthalten WHERE-Klauseln. Die äußere verwendet ein Kriterium, um bestimmte Kunden (Customer) zu löschen, und die innere verwendet ein anderes Kriterium, um bestimmte Elemente (Items) zu löschen. Das Beispiel zeigt, wie mithilfe von COALESCE verhindert wird, dass fehlende Eingabefelder dazu führen, dass auch die entsprechenden Ausgabefelder fehlen. Schließlich verwendet das Beispiel die Spaltenfunktion SUM, um den Wert aller Elemente in jeder einzelnen Rechnung zu addieren. Spaltenfunktionen werden unter Auf Spalten in einer Datenbank verweisen erläutert.

Bei der Erstellung der Beschreibungsfelder (Desc) wird der vollständige Inhalt des Eingabefeldes für den Titel kopiert: die XML-Attribute und der Feldwert. Falls die Ausgabenachricht diese Attribute nicht enthalten soll, können Sie sie mithilfe der Funktion FIELDVALUE löschen, z. B. mit folgendem ESQL-Code:

SET OutputRoot.XMLNS.Data.Statement[] =
    (SELECT I.Customer.Title                                   AS Customer.Title, 
            I.Customer.FirstName || ' ' || I.Customer.LastName AS Customer.Name,
            COALESCE(I.Customer.PhoneHome,'')                  AS Customer.Phone,
            (SELECT FIELDVALUE(II.Title)                       AS Desc,
                    CAST(II.UnitPrice AS FLOAT) * 1.6 AS Cost,
                    II.Quantity                       AS Qty 
             FROM I.Purchases.Item[] AS II
             WHERE II.UnitPrice > 0.0 ) AS Purchases.Article[],
            (SELECT SUM( CAST(II.UnitPrice AS FLOAT) *
                    CAST(II.Quantity  AS FLOAT) *
                    1.6                           )
             FROM I.Purchases.Item[] AS II        )        AS Amount,
            'Dollars'                                      AS Amount.(XML.Attribute)Currency
                    
    FROM InputRoot.XMLNS.Invoice[] AS I
    WHERE I.Customer.LastName <> 'Brown' 
    );

Dieser Code generiert die folgende Ausgabenachricht:

<Data>
 <Statement>
  <Customer>
   <Title>Mr</Title>
   <Name>Andrew Smith</Name>
   <Phone>01962818000</Phone>
  </Customer>
  <Purchases>
   <Article>
    <Desc>The XML Companion</Desc>
    <Cost>4.472E+1</Cost>
    <Qty>2</Qty>
   </Article>
   <Article>
    <Desc>A Complete Guide to DB2 Universal Database</Desc>
    <Cost>6.872E+1</Cost>
    <Qty>1</Qty>
   </Article>
   <Article>
    <Desc>JAVA 2 Developers Handbook</Desc>
    <Cost>9.5984E+1</Cost>
    <Qty>1</Qty>
   </Article>
  </Purchases>
  <Amount Currency="Dollars">2.54144E+2</Amount>
 </Statement>
</Data>
Bemerkungen | Marken | Downloads | Bibliothek | Support | Feedback

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

        
        Letzte Aktualisierung:
        
        Letzte Aktualisierung: 2015-02-28 16:21:36


TaskthemaTaskthema | Version 8.0.0.5 | ak05750_