Cuando desee acceder al contenido de un mensaje, para leerlo o escribirlo, utilice la estructura y la disposición de los elementos en el árbol que el analizador crea a partir de la corriente de bits de entrada Siga las relaciones de elemento superior y elemento dependiente de arriba a abajo en el árbol, hasta alcanzar el elemento necesario.
Debe utilizar estos nombres de correlación distintos porque sólo hay un mensaje al que hacer referencia en un nodo Database o Filter; no puede crear un mensaje de salida nuevo en estos nodos. Utilice un nodo Compute para crear un mensaje de salida nuevo.
Al construir referencias de campos, los nombres que se utilizan deben ser identificadores ESQL válidos que cumplan con las normas ESQL. Si especifica algún elemento entre comillas, ESQL interpreta que es un identificador. Si especifica algo entre apóstrofos, ESQL interpreta que es un literal de caracteres. Debe especificar todas las series (series de caracteres, series de bytes o series binarias (bit)) entre comillas o apóstrofos, como se muestra en los ejemplos siguientes. Para incluir un apóstrofo o unas comillas dentro de una serie, incluya dos apóstrofos consecutivos o unas comillas. Para obtener una descripción completa de la sintaxis de referencia del campo, consulte Referencias de campo ESQL. Si desea más información sobre los tipos de datos ESQL, consulte Tipos de datos de ESQL en flujos de mensajes.
Suponga que se ha creado un flujo de mensajes que maneja el mensaje Factura que se muestra en la figura en Configuración de ESQL dentro de nodos. Si, por ejemplo, desea consultar el elemento CardType incluido en un nodo Compute, utilice la siguiente sentencia:
IF InputBody.Invoice.Payment.CardType='Visa' THEN DO; -- more ESQL -- END IF;
Si desea hacer la misma prueba en el nodo Database o Filter (donde la referencia es a un solo mensaje de entrada), escriba el código:
IF Body.Invoice.Payment.CardType='Visa' THEN DO; -- more ESQL -- END IF;
Si desea copiar un elemento de un mensaje XML de entrada en un mensaje de salida en el nodo Compute sin cambiarlo, utilice el siguiente ESQL:
SET OutputRoot.XML.Invoice.Customer.FirstName = InputBody.Invoice.Customer.FirstName;
Si desea copiar un elemento de un mensaje XML de entrada en un mensaje de salida y actualizarlo, por ejemplo pasando a mayúsculas o calculando un nuevo valor, escriba el código:
SET OutputRoot.XML.Invoice.Customer.FirstName = UPPER(InputBody.Invoice.Customer.FirstName); SET OutputRoot.XML.Invoice.InvoiceNo = InputBody.Invoice.InvoiceNo + 1000;
Si desea establecer un elemento STRING en un valor constante, escriba el código:
SET OutputRoot.XML.Invoice.Customer.Title = 'Mr';
También puede utilizar la sentencia equivalente:
SET OutputRoot.XML.Invoice.Customer.Title VALUE = 'Mr';
Si desea actualizar un INTEGER o DECIMAL, por ejemplo el elemento TillNumber, con el valor 26, utilice la siguiente asignación (sólo es válida en el nodo Compute):
SET OutputRoot.MRM.Invoice.TillNumber=26;
El tipo de datos entero almacena los números utilizando el formulario "twos complement" de 64 bits, lo que admite números que oscilan entre -9223372036854775808 y 9223372036854775807. Puede especificar una notación hexadecimal para los enteros así como un formato literal de entero normal. Las letras hexadecimales de la A a la F pueden escribirse en mayúsculas o en minúsculas, al igual modo que la X después del cero inicial, que es necesaria. El ejemplo siguiente tiene el mismo resultado que el ejemplo anterior:
SET OutputRoot.MRM.Invoice.TillNumber= 0x1A;
Los siguientes ejemplos muestran sentencias SET para tipos de elementos que no aparecen en el ejemplo de mensaje Factura.
Para establecer un elemento FLOAT en un valor que no sea un entero, escriba el código:
SET OutputRoot.MRM.FloatElement1 = 1.2345e2;
Para establecer un elemento BINARY en un valor constante, escriba el código:
SET OutputRoot.MRM.BinaryElement1 = X'F1F1';
Para valores BINARY, debe utilizar un carácter inicial X (mayúsculas o minúsculas) e indicar los caracteres hexadecimales (también mayúsculas o minúsculas) entre apóstrofos, tal como se muestra.
Para establecer un elemento BOOLEAN en un valor constante (el valor 1 es igual a true, 0 es igual a false), escriba el código:
SET OutputRoot.MRM.BooleanElement1 = true;
o
SET OutputRoot.MRM.BooleanElement1 = 1;
Puede utilizar la sentencia SELECT para filtrar registros de un mensaje de entrada sin volver a formatear los registros y sin conocer el formato completo de cada registro. Suponga el siguiente ejemplo:
-- Declare local variable DECLARE CurrentCustomer CHAR 'Smith'; -- Loop through the input message SET OutputRoot.XML.Invoice[] = (SELECT I FROM InputRoot.XML.Invoice[] AS I WHERE I.Customer.LastName = CurrentCustomer );
Esto graba todos los registros del mensaje Factura de entrada en el mensaje de salida si se cumple la condición WHERE (LastName = Smith). Todos los registros que no cumplen la condición no se copian de la entrada en la salida. I se utiliza como alias para el nombre de correlación InputRoot.XML.Invoice[].
La variable declarada CurrentCustomer se inicializa en la sentencia DECLARE: esto es la forma más eficaz de declarar una variable para la que se conoce el valor inicial.
Puede utilizar esta técnica de alias con otras construcciones SELECT. Por ejemplo, si desea seleccionar todos los registros del mensaje Factura de entrada y crear un registro adicional:
-- Loop through the input message SET OutputRoot.XML.Invoice[] = (SELECT I, 'Customer' || I.Customer.LastName AS ExtraField FROM InputRoot.XML.Invoice[] AS I );
También puede incluir una cláusula AS para colocar registros en una subcarpeta en el árbol de mensajes:
-- Loop through the input message SET OutputRoot.XML.Invoice[] = (SELECT I AS Order FROM InputRoot.XML.Invoice[] AS I );
Si está consultando o estableciendo documentos que contienen, o pueden contener, valores nulos, tenga en cuenta las siguientes consideraciones:
Por ejemplo, puede comprobar si un número de factura está incluido en el mensaje Factura actual con la siguiente sentencia:
IF InputRoot.XML.Invoice.InvoiceNo IS NULL THEN DO; -- more ESQL -- END IF;
También puede utilizar una consulta de ESQL. El siguiente ejemplo lo muestra.
DECLARE cursor REFERENCE TO InputRoot.MRM.InvoiceNo; IF LASTMOVE(cursor) = FALSE THEN SET OutputRoot.MRM.Analysis = 'InvoiceNo no existe en el árbol lógico'; ELSEIF FIELDVALUE(cursor) IS NULL THEN SET OutputRoot.MRM.Analysis = 'InvoiceNo sí existe en el árbol lógico pero se ha definido como un valor MRM NULL'; ELSE SET OutputRoot.MRM.Analysis = 'InvoiceNo existe y tiene un valor'; END IF;
Para obtener más información sobre cómo declarar y utilizar referencias, consulte Creación de referencias de campo dinámico. Para obtener una descripción de las funciones LASTMOVE y FIELDVALUE, consulte Función LASTMOVE y Función FIELDTYPE.
Si el mensaje está en el dominio de MRM, existen consideraciones adicionales para consultar los elementos nulos que dependen del formato físico. Para obtener más detalles, consulte Consulta de valores nulos en un mensaje en el dominio de MRM..
SET OutputRoot.XML.Invoice.Customer.Title = NULL;
Si el mensaje está en el dominio de MRM, existen consideraciones adicionales para valores nulos que dependen del formato físico. Para obtener más detalles, consulte Configuración de valores nulos en un mensaje en el dominio de MRM.
Esto se denomina proceso nulo implícito.
SET OutputRoot.XML.Invoice.Customer.Title VALUE = NULL;
SET OutputRoot.XML.Invoice.Customer.Title = NULL;
Si el mensaje está en el dominio de MRM, el contenido de la corriente de bits de salida depende de los valores del formato físico nulo que manejen las propiedades. Para obtener información detallada, consulteConfiguración de valores nulos en un mensaje en el dominio de MRM.
Esto se denomina proceso explícito de valores nulos.
Si establece un elemento complejo MRM o un elemento superior XML, XMLNS o JMS en el valor NULL sin utilizar la palabra clave VALUE, dicho elemento y todos sus elementos dependientes se suprimen del árbol lógico.
Conceptos relacionados
Flujos de mensajes
Árbol lógico de mensajes
Nombres de correlación
Diseño de mensajes
Tareas relacionadas
Diseño de un flujo de mensajes
Definición del contenido del flujo de mensajes
Acceso a elementos de un mensaje en el dominio MRM
Referencia relacionada
Nodo Compute
Nodo Database
Nodo Filter
ESQL
Sentencia DECLARE
Sentencia IF
Función FIELDVALUE
Función LASTMOVE
Función SELECT
Sentencia SET
Referencias de campo ESQL
Palabras clave reservadas de ESQL
Mensaje de ejemplo
Avisos |
Marcas registradas |
Descargas |
Biblioteca |
Soporte |
Información de retorno (feedback)
![]() ![]() |
ac06010_ |