WebSphere Message Broker, Versão 8.0.0.5 Sistemas operacionais: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Consulte as informações sobre a versão mais recente do produto em IBM Integration Bus, Versão 9.0

Transformando uma Mensagem Complexa

Ao codificar o ESQL para um nó Compute, utilize a função SELECT para transformação de mensagem complexa.

Este tópico fornece exemplos de transformação de mensagens complexa. Reveja os exemplos e modifique-os para utilização. Todos eles são baseados no Mensagem de Exemplo como entrada.

Neste exemplo, Fatura contém um número variável de Itens. A transformação é mostrada no seguinte exemplo:

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' 
    );

A mensagem de saída gerada é:

<Dados>
 <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>    

Essa transformação possui cláusulas SELECT aninhadas. A instrução externa opera na lista Invoices. A instrução interna opera na lista Items. A cláusula AS associada à cláusula SELECT interna espera uma matriz:

            (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              ) 
            -- Note the use of [] in the next expression
               AS Purchases.Article[],

Esta instrução informa à cláusula SELECT externa para esperar um número variável de itens em cada resultado. Cada cláusula SELECT possui seu próprio nome de correlação: I para a cláusula SELECT externa e II para a interna. Cada cláusula SELECT geralmente utiliza seu próprio nome de correlação, mas a cláusula FROM na cláusula SELECT interna refere-se ao nome de correlação da cláusula SELECT externa:

            (SELECT II.Title                          AS Desc,
                    CAST(II.UnitPrice AS FLOAT) * 1.6 AS Cost,
                    II.Quantity                   AS Qty 
            -- Note the use of I.Purchases.Item in the next expression
             FROM I.Purchases.Item[] AS II
             WHERE II.UnitPrice > 0.0 ) AS Purchases.Article[],

Esta instrução informa à cláusula SELECT interna para trabalhar com os Items da Invoice atual. Ambas cláusulas SELECT contêm cláusulas WHERE. A externa utiliza um critério para descartar determinados Clientes e a interna utiliza um critério diferente para descartar certos Itens. O exemplo também mostra a utilização de COALESCE para evitar que campos de entrada ausentes façam com que o campo de saída correspondente fique ausente. Por último, também utiliza a função de coluna SUM para incluir o valor de todos os Itens em cada Fatura. As funções de coluna são discutidas em Referenciando as Colunas em um Banco de Dados.

Quando os campos Desc são criados, todo o campo Título de entrada é copiado: ou seja, os atributos XML e o valor do campo. Se você não deseja esses atributos na mensagem de saída, utilize a função FIELDVALUE para descartá-los; por exemplo, codifique o seguinte ESQL:

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' 
    );

O código gera a seguinte mensagem de saída:

<Dados>
 <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>
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback

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

        
        Última atualização:
        
        Última atualização: 2015-02-28 18:29:59


Tópico de TarefaTópico de Tarefa | Versão 8.0.0.5 | ak05750_