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

Acessando Elementos no Corpo da Mensagem

Quando desejar acessar o conteúdo de uma mensagem, para leitura ou gravação, utilize a estrutura e organização dos elementos na árvore criada pelo analisador a partir do fluxo de bits de entrada.

Siga os relacionamentos entre pai e filho relevantes do início da árvore para baixo, até chegar no elemento requerido.

Ao construir referências de campos, os nomes utilizados devem ser identificadores ESQL válidos que estejam de acordo com as regras ESQL. Se você colocar um item entre aspas duplas, o ESQL interpreta-o como um identificador. Se você colocar um item entre aspas simples, o ESQL interpreta-o como um caractere literal. É necessário colocar todas as cadeias (cadeias de caracteres, cadeias de bytes ou cadeias binárias (bits)) entre aspas, conforme exibido nos exemplos a seguir. Para incluir aspas simples ou duplas em uma cadeia, inclua duas aspas simples consecutivas ou uma aspa dupla.
Importante: Para obter uma descrição completa de uma sintaxe de referência a campos, consulte Visão Geral da Referência de Campo ESQL.
Para obter informações adicionais sobre tipos de dados ESQL, consulte Tipos de Dados ESQL nos Fluxos de Mensagens.

Suponha que você tenha criado um fluxo de mensagem que lide com a mensagem Invoice, mostrada na figura em Gravando ESQL. Se, por exemplo, você quiser interrogar o elemento CardType de dentro de um nó Compute, use a seguinte instrução:

IF InputBody.Invoice.Payment.CardType='Visa' THEN
   DO;
     -- mais ESQL --
END IF;   

Se desejar fazer o mesmo teste em um nó Banco de Dados ou Filter (onde a referência seja para a mensagem de entrada única), codifique:

IF Body.Invoice.Payment.CardType='Visa' THEN
   DO; 
     -- mais ESQL --  
END IF;   

Se desejar copiar um elemento de uma mensagem XML de entrada em uma mensagem de saída no nó Compute sem alterá-lo, use o seguinte ESQL:

SET OutputRoot.XMLNS.Invoice.Customer.FirstName = 
               InputBody.Invoice.Customer.FirstName;

Se desejar copiar um elemento de uma mensagem XML de entrada para uma mensagem de saída e atualizá-lo, por exemplo, dobrando para maiúscula ou calculando um novo valor, codifique:

SET OutputRoot.XMLNS.Invoice.Customer.FirstName = 
               UPPER(InputBody.Invoice.Customer.FirstName);  
SET OutputRoot.XMLNS.Invoice.InvoiceNo = InputBody.Invoice.InvoiceNo + 1000;  

Se você deseja definir um elemento STRING como um valor constante, codifique:

SET OutputRoot.XMLNS.Invoice.Customer.Title = 'Mr';  

Você também pode utilizar a instrução equivalente:

SET OutputRoot.XMLNS.Invoice.Customer.Title VALUE = 'Mr';  

Se desejar atualizar um INTEGER ou DECIMAL, por exemplo o elemento TillNumber, com o valor 26, use a seguinte designação (válida no nó Compute apenas):

SET OutputRoot.MRM.Invoice.TillNumber=26;  

O tipo de dados inteiro armazena os números utilizando o formato de complemento duplo de 64 bits, permitindo números no intervalo de -9223372036854775808 a 9223372036854775807. Você pode especificar notação hexadecimal para inteiros e também o formato literal inteiro normal. As letras hexadecimais de A a F podem ser gravadas em letras maiúsculas ou minúsculas, assim como pode-se gravar o X após o zero inicial, que é necessário. O exemplo a seguir produz o mesmo resultado que o exemplo mostrado anteriormente:

SET OutputRoot.MRM.Invoice.TillNumber= 0x1A;  

Os exemplos a seguir mostram instruções SET para tipos de elementos que não aparecem no Mensagem de Exemplo.

Para definir um elemento FLOAT para um valor não-inteiro, codifique:

SET OutputRoot.MRM.FloatElement1 = 1.2345e2;  

Para definir um elemento BINARY para um valor constante, codifique:

SET OutputRoot.MRM.BinaryElement1 = X'F1F1';  

Para valores BINARY, você deve usar um caractere X inicial (maiúsculo ou minúsculo) e colocar os caracteres hexadecimais (também maiúsculos ou minúsculos) entre aspas únicas, conforme mostrado.

Para definir um elemento BOOLEAN como um valor constante (o valor 1 é igual a true, 0 é igual a false), codifique:

SET OutputRoot.MRM.BooleanElement1 = true;

ou

SET OutputRoot.MRM.BooleanElement1 = 1;

Você pode utilizar a instrução SELECT para filtrar registros de uma mensagem de entrada, sem reformatar os registros e sem nenhum conhecimento do formato completo de cada registro. Considere o seguinte exemplo:

-- Declarar variável local 
DECLARE CurrentCustomer CHAR 'Smith';

-- Loop da mensagem de entrada
SET OutputRoot.XMLNS.Invoice[] = 
    (SELECT I FROM InputRoot.XMLNS.Invoice[] AS I
              WHERE I.Customer.LastName = CurrentCustomer
    );

Este código grava todos os registros da mensagem de entrada para a mensagem de saída se a condição WHERE (LastName = Smith) for atendida. Todos os registros que não atenderem à condição não serão copiados da mensagem de entrada para a mensagem de saída. I é utilizado como um alias para o nome de correlação InputRoot.XMLNS.Invoice[].

A variável declarada CurrentCustomer é inicializada na instrução DECLARE: essa opção é a forma mais eficiente de declarar uma variável para a qual o valor inicial é conhecido.

Você pode utilizar essa técnica de alias com outras construções SELECT. Por exemplo, se desejar selecionar todos os registros da mensagem de entrada e criar um registro adicional:

-- Loop da mensagem de entrada
SET OutputRoot.XMLNS.Invoice[] = 
    (SELECT I, 'Customer' || I.Customer.LastName AS ExtraField 
              FROM InputRoot.XMLNS.Invoice[] AS I
    );

Você também poderia incluir uma cláusula AS para colocar registros em uma subpasta na árvore de mensagens:

-- Loop da mensagem de entrada
SET OutputRoot.XMLNS.Invoice[] = 
    (SELECT I AS Order
            FROM InputRoot.XMLNS.Invoice[] AS I
    );

Se estiver consultando ou definindo elementos que contêm ou podem conter valores nulos, esteja ciente das seguintes considerações:

Consultando Valores Nulos
Ao comparar um elemento com a palavra-chave ESQL NULL, isso testa se o elemento está presente na árvore lógica que foi criada na mensagem de entrada pelo analisador.

Por exemplo, você pode verificar se um número de fatura está incluído na mensagem de fatura atual com a seguinte instrução:

IF InputRoot.XMLNS.Invoice.InvoiceNo IS NULL THEN
   DO;
     -- mais ESQL --
END IF;   

Também é possível usar uma referência ESQL, conforme exibido no exemplo a seguir:

DECLARE cursor REFERENCE TO InputRoot.MRM.InvoiceNo;

IF LASTMOVE(cursor) = FALSE THEN 
   SET OutputRoot.MRM.Analysis = 'InvoiceNo não existe na árvore lógica';
ELSEIF FIELDVALUE(cursor) IS NULL THEN
   SET OutputRoot.MRM.Analysis = 
       'InvoiceNo existe na árvore lógica, mas está definida como um valor MRM NULL';
ELSE
   SET OutputRoot.MRM.Analysis = 'InvoiceNo existe e possui um valor';
END IF;

Para obter mais informações sobre declaração e uso de referências, consulte Criando Referências de Campos Dinâmicos. Para obter uma descrição das funções LASTMOVE e FIELDVALUE, consulte Função LASTMOVE e Função FIELDTYPE.

Se a mensagem estiver no domínio MRM, haverá considerações adicionais para consultar elementos nulos que dependem do formato físico. Para obter detalhes adicionais, consulte Consultando Valores Nulos em uma Mensagem no Domínio MRM.

Definindo Valores Nulos
É possível usar duas instruções para configurar valores nulos:
  1. Se você configurar o elemento como o elemento como NULL usando a instrução a seguir, o elemento será excluído da árvore de mensagens:
    SET OutputRoot.XMLNS.Invoice.Customer.Title = NULL;  

    Se a mensagem estiver no domínio MRM, isto indica que existem considerações adicionais para valores nulos que dependem do formato físico. Para obter detalhes adicionais, consulte Definindo Valores Nulos em uma Mensagem no Domínio MRM.

    Essa técnica é chamada de processamento nulo implícito.

  2. Se você definir o valor desse elemento como NULL, da seguinte forma:
    SET OutputRoot.XMLNS.Invoice.Customer.Title VALUE = NULL;  
    o elemento não será excluído da árvore de mensagens. Em vez disso, um valor especial de NULL será atribuído ao elemento.
    SET OutputRoot.XMLNS.Invoice.Customer.Title = NULL;  

    Se a mensagem estiver no domínio MRM, o conteúdo do fluxo de bits de saída dependerá das definições das propriedades de tratamento de nulos de formato físico. Para obter detalhes adicionais, consulte Definindo Valores Nulos em uma Mensagem no Domínio MRM.

    Essa técnica é chamada de processamento nulo explícito.

Se você definir um elemento complexo MRM ou um elemento pai XML, XMLNS ou JMS como NULL, sem utilizar a palavra-chave VALUE, esse elemento e todos os seus filhos serão excluídos da árvore lógica.

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:28:20


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