Nodo Compute

Este tema contiene los apartados siguientes:

Finalidad

Utilice el nodo Compute para construir uno o más mensajes de salida nuevos creando mensajes y llenándolos con nueva información, con información modificada del mensaje de entrada, o bien, con información extraída de una base de datos. Puede modificar elementos (cabeceras, campos de cabecera y datos del cuerpo) del mensaje de entrada, su entorno asociado y la lista de excepciones para crear el nuevo mensaje de salida.

Para especificar cómo se deben crear los nuevos mensajes debe codificar ESQL en el archivo de recursos ESQL del flujo de mensajes. Puede crear y modificar los componentes del mensaje utilizando expresiones ESQL, y puede hacer referencia a elementos tanto de los datos como del mensaje de entrada desde una base de datos externa. Una expresión puede utilizar operadores aritméticos, operadores de texto (por ejemplo, concatenación), operadores lógicos y otras funciones incorporadas.

Utilice el nodo Compute para:

  • Construir un nuevo mensaje utilizando un conjunto de sentencias de asignación
  • Copiar mensajes entre analizadores
  • Convertir mensajes de un conjunto de códigos a otro
  • Transformar mensajes de un formato a otro

Las sentencias ESQL se definen en un módulo asociado a este nodo en el archivo ESQL (.esql) asociado al flujo de mensajes. Debe crear este archivo para completar la definición del flujo de mensajes.

El nodo Compute se representa en el área de trabajo mediante el icono siguiente:

icono del nodo Compute

Utilización de este nodo en un flujo de mensajes

Consulte los ejemplos siguientes para informarse sobre cómo puede utilizar este nodo:

Suponga que hay un flujo de mensajes en el que desea proporcionar un identificador exclusivo a cada mensaje según el orden de recepción con propósitos de auditoría. El nodo Compute no modifica el mensaje de entrada, sino que crea una copia nueva y modificada del mensaje como mensaje de salida. Puede utilizar el nodo Compute para insertar un identificador exclusivo para el orden establecido en el mensaje de salida, que pueden utilizar nodos subsiguientes del flujo de mensajes.

Configuración del nodo Compute

Se puede configurar al transferir una instancia del nodo Compute a un flujo de mensajes. Pulse el botón derecho del ratón en la vista del editor y, a continuación, pulse en Propiedades. Se muestran las propiedades básicas del nodo.

Todas las propiedades obligatorias para las que debe entrar un valor (las que no tienen un valor por omisión definido) se muestran marcadas con un asterisco en el diálogo de propiedades.

Configure el nodo Compute tal como se indica a continuación:

  1. Definición de la interacción de bases de datos
  2. Especificación de ESQL
  3. Establecimiento de la modalidad
  4. Validación de mensajes

Cuando haya acabado la configuración, pulse el botón en Aplicar. De este modo, se realizan los cambios en el nodo Compute sin cerrar el diálogo de propiedades. Pulse el botón en Aceptar para aplicar los cambios y cerrar el diálogo de propiedades. Pulse el botón en Cancelar para cerrar el diálogo y descartar todos los cambios que ha realizado en las propiedades.

Definición de la interacción de bases de datos

Si desea utilizar datos de una base de datos en este nodo (haciendo referencia a tablas de base de datos en el módulo ESQL asociado):

  • Especifique en Origen de datos el nombre por el que se conoce la base de datos adecuada en el sistema en el que se va a ejecutar este flujo de mensajes. El intermediario conecta a esta base de datos con información de contraseña e ID de usuario que se ha especificado en el mandato mqsicreatebroker, mqsichangebroker o mqsisetdbparms.

    En sistemas z/OS, el intermediario utiliza el ID de tarea iniciada del intermediario.

  • Seleccione el valor Transacción del menú desplegable. Los valores son:
    • Automática (el valor por omisión). El flujo de mensajes, del que forma parte el nodo Compute, se confirma en caso satisfactorio. Es decir, se llevan a cabo en el mensaje las acciones que define en el módulo ESQL y después continúa a través del flujo de mensajes. Si el flujo de mensajes no se ejecuta correctamente, se restituye. Si elige Automática, la posibilidad de confirmar o restituir la acción del nodo Compute en la base de datos depende de que las acciones se realicen de modo satisfactorio o de que se produzca una anomalía en todo el flujo de mensajes.
    • Confirmar. Si desea confirmar la acción del nodo Compute en la base de datos, sin tener en cuenta el éxito o la anomalía del flujo de mensajes a nivel global, seleccione Confirmar. La actualización de la base de datos se confirma aunque en flujo de mensajes en sí mismo dé error.

    El valor que elige se implementa para uno o más tablas de base de datos que se hayan añadido: no puede seleccionar un valor diferente para cada tabla.

  • Seleccione Básico en el navegador del diálogo de propiedades y, a continuación, elija o deseleccione los dos recuadros de selección:
    • Si desea que los mensajes de aviso de base de datos se traten como errores, y que el nodo propague el mensaje de salida al terminal de anomalías, seleccione el recuadro de selección Tratar los avisos como errores. El recuadro está, inicialmente, deseleccionado.

      Cuando selecciona el recuadro, el nodo maneja todos los códigos de retorno positivos de la base de datos como errores y genera excepciones utilizando el mismo procedimiento que para los errores negativos, o más graves.

      Si no selecciona el recuadro, el nodo trata los avisos como códigos de retorno normales y no emite ninguna excepción. El aviso emitido más importante es not found, que se puede manejar, de modo seguro, como un código de retorno normal en la mayor parte de los casos.

    • Si desea que el intermediario genere una excepción cuando se detecta un error de base de datos, seleccione el recuadro de selección *Generar excepción en error de la base de datos. El recuadro está, inicialmente, seleccionado.

      Si deselecciona el recuadro, debe incluir ESQL para comprobar si hay algún error de base de datos que se pueda devolver después de cada invocación de base de datos que se realiza (puede utilizar SQLCODE y SQLSTATE para ello). Si se produce un error, debe manejarlo en el flujo de mensajes a fin de garantizar la integridad del intermediario y de la base de datos: el error se ignora si no se maneja a través de procesos propios, puesto que se ha elegido que el intermediario no invoque el manejo de errores por omisión. Por ejemplo, puede incluir la sentencia ESQL THROW para que emita una excepción en este nodo, o bien, puede utilizar el nodo Throw para que genere la excepción en un punto posterior del flujo de mensajes.

Especificación de ESQL

Sentencias ESQL de código para personalizar el comportamiento del nodo Compute. Por ejemplo, lo puede personalizar para crear nuevos mensajes de salida utilizando contenido de base de datos o de mensajes (sin modificar o modificado) o nuevos datos. Por ejemplo, es posible que desee modificar un valor en el mensaje de entrada añadiendo un valor de una base de datos y almacenar el resultado en un campo en el mensaje de salida.

Codifique las sentencias ESQL que desea en un archivo ESQL asociado al flujo de mensajes en el que ha incluido esta instancia del nodo Compute. El archivo ESQL que, por omisión, tiene el nombre <nombre_flujo_mensajes>.esql, contiene el ESQL para cada flujo de mensajes que lo necesita. Cada parte del código que está relacionada con un nodo específico se conoce como módulo.

Si aún no existe ningún archivo ESQL para este flujo de mensajes, pulse el botón derecho del ratón en el nodo Compute y, a continuación, pulse el botón en Abrir ESQL. De este modo, se crea y se abre un nuevo archivo ESQL en la vista del editor ESQL.

Si el archivo ya existe, pulse en el botón Examinar, situado junto a la propiedad Módulo ESQL. De este modo, se visualiza el diálogo Selección de módulo, que lista los módulos de nodos Compute disponibles que se han definido en los archivos ESQL a los que puede acceder el flujo de mensajes (los archivos ESQL se pueden haber definido en otros proyectos dependientes). Seleccione el módulo adecuado y, a continuación, pulse el botón en Aceptar. Si no hay ningún módulo adecuado, la lista se muestra vacía.

Si el módulo que ha especificado no existe, se crea automáticamente y el editor sitúa el archivo para su visualización. Si el archivo y el módulo ya existen, el editor sitúa el archivo y visualiza y resalta el módulo correcto.

Si lo prefiere, puede abrir el archivo ESQL adecuado en el navegador de recursos y seleccionar el nodo en la vista Esquema.

El esqueleto del módulo para este nodo se crea en un archivo ESQL nuevo o existente y consta del ESQL siguiente. El nombre del módulo por omisión se muestra en el ejemplo siguiente:


CREATE COMPUTE MODULE <flow_name>_Compute
       CREATE FUNCTION Main() RETURNS BOOLEAN
       BEGIN
              -- CALL CopyMessageHeaders();
              -- CALL CopyEntireMessage();
              	 	RETURN TRUE;
       END;

       CREATE PROCEDURE CopyMessageHeaders() BEGIN
              DECLARE I INTEGER 1;
              DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
              WHILE I < J DO
                     	SET OutputRoot.*[I] = InputRoot.*[I];
                     SET I  = I + 1;
              END WHILE;
       END;

       CREATE PROCEDURE CopyEntireMessage() BEGIN
              			SET OutputRoot = InputRoot;
       END;
END MODULE;

Nota: Inicio del cambioSi desea difundir el flujo de mensajes que contiene este nodo Compute a un intermediario cuya versión es anterior a la versión 5.0, debe realizar los cambios siguientes en el ESQL del esqueleto del módulo que se muestra más arriba:
  • Sustituya
    DECLARE I INTEGER 1;
    por
    DECLARE I INTEGER; SET I=1;
  • Sustituya
    DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
    por
    DECLARE J INTEGER; SET J=CARDINALITY(InputRoot.*[]);
Fin del cambio

Si crea su propio módulo ESQL, debe crear este esqueleto exactamente tal como se muestra, excepto para las definiciones y las invocaciones de procedimientos (descritas más abajo). Puede cambiar el nombre por omisión, pero asegúrese de que el nombre que especifica coincide con el nombre de la propiedad Módulo ESQL del nodo correspondiente. Si desea que el nombre del módulo incluya uno o más espacios, especifíquelo entre comillas en la propiedad Módulo ESQL.

Añada su propio ESQL para personalizar el nodo después de la sentencia BEGIN que va a continuación de CREATE FUNCTION y antes de RETURN TRUE. Puede utilizar las dos invocaciones incluidas en el esqueleto para procedimientos CopyEntireMessage y CopyMessageHeaders.

Estos procedimientos, definidos después de la función Main, proporcionan funciones comunes que es posible que desee cuando manipula mensajes. Las invocaciones en el esqueleto están comentadas; elimine los marcadores de comentario si desea utilizar el procedimiento. Si no desea utilizar ningún procedimiento, elimine tanto la invocación como la definición de procedimiento del módulo.

En releases anteriores, dos botones de selección del nodo Compute equivalentes del diálogo de propiedades llevaban a cabo estos procedimientos.

También puede crear un archivo ESQL utilizando Archivo > Nuevo > Archivo ESQL de flujo de mensajes.

Establecimiento de la modalidad

Cuando selecciona la Modalidad de cálculo, especifica la combinación de componentes Mensaje, Entorno local (especificado previamente como Lista de destinos) y Excepción que se va a generar y modificar en el mensaje de salida. Estos componentes no incluidos en la selección se pasan sin modificar: aunque los modifique, las actualizaciones que se realizan en este nodo son locales.

(El valor de la modalidad no afecta al componente Environment del árbol de mensajes). Su contenido, si lo hay, se pasa de este nodo al mensaje de salida).

Debe establecer esta propiedad de modo que refleje correctamente el formato del mensaje de salida que necesita. Si selecciona una opción (o acepta el valor por omisión) que no incluye un contenido específico del mensaje, esa parte del mensaje no se incluye en ningún mensaje de salida que se cree.

Las opciones se explican en la tabla siguiente:

Modalidad Descripción
Mensaje (valor por omisión) Se genera el mensaje o el nodo Compute lo pasa a través tal como se ha modificado en el nodo.
Entorno local Se genera la estructura de árbol del entorno local o el nodo Compute la pasa a través tal como la ha modificado el nodo.
Entorno local y mensaje Se genera la estructura de árbol del entorno local y el mensaje o el nodo Compute los pasa a través tal como los ha modificado el nodo.
Excepción Se genera la lista de excepciones o el nodo Compute la pasa a través tal como la ha modificado el nodo.
Excepción y mensaje Se genera la lista de excepciones y el mensaje o el nodo Compute los pasa a través tal como los ha modificado el nodo.
Excepción y entorno local Se genera la lista de excepciones y la estructura del árbol del entorno local o el nodo Compute las pasa a través tal como las ha modificado el nodo.
Todos Se genera el mensaje, la lista de excepciones y el entorno local o el nodo Compute los pasa a través tal como los ha modificado el nodo.

Puesto que el nodo Compute tiene un mensaje de entrada y un mensaje de salida, puede utilizar ESQL para hacer referencia a campos de cualquiera de ellos. También puede trabajar con InputLocalEnvironment y OutputLocalEnvironment, además de InputExceptionList y OutputExceptionList, así como con los cuerpos de los mensajes de entrada y de salida.

Validación de mensajes

Seleccione Validación en el navegador del diálogo de propiedades si desea que el analizador MRM valide el cuerpo de los mensajes frente al diccionario que se genera del conjunto de mensajes. Las opciones de validación que establece en un nodo Compute sólo se aplican a los mensajes de salida que se crean. La validación no se lleva a cabo dentro del nodo en sí, sino sólo cuando, posteriormente, se convierte el mensaje a una corriente de bits.

  • Inicialmente, la propiedad Validar está establecida en Ninguna. Cámbielo por Contenido y valor de modo que se solicite tanto la validación del contenido (comprobaciones de la composición y el contenido de tipo) como la validación de valor (comprobaciones de tipo de datos de valor, comprobaciones de nulo permitido, comprobaciones de longitud, comprobaciones de rango y comprobaciones de enumeración, entre otras). El nodo Compute añade las opciones especificadas al árbol de mensajes de salida para su validación posterior.
  • Para especificar lo que sucede cuando se produce una anomalía en la validación, seleccione una de las opciones siguientes para Acción por anomalía:
    • Rastreo de usuario: escribe todas las anomalías de validación en el rastreo de usuario y el proceso continúa.
    • Anotaciones de error locales: escribe todas las anomalías de validación en las anotaciones de sucesos y el proceso continúa.
    • Excepción: emite una excepción a la primera anomalía de validación. Éste es el funcionamiento por omisión.

    Las dos primeras opciones son especialmente útiles cuando se invoca la validación por primera vez, puesto que se pueden ver todas las anomalías de validación, no sólo el primer error que se encuentra. Una vez que se han analizado las anomalías, generalmente, se selecciona Excepción para su uso futuro.

    Los destinos de las anomalías se comportan igual que en el caso de la salida del nodo Trace. Así, por ejemplo, si selecciona Rastreo de usuario, las entradas de rastreo se escriben sin tener en cuenta el valor del distintivo del rastreo de usuario para el flujo de mensajes.

  • Incluir todas las limitaciones de valor se selecciona por omisión y no se puede cambiar. Este valor significa que se llevan a cabo comprobaciones completas de los tipos de datos y de los valores (consulte el apartado Limitaciones de valores lógicos de tipo simple para obtener información detallada sobre las limitaciones).
  • Arreglo no se puede cambiar de su valor por omisión, Ninguno. Si Acción por anomalía no se establece en Excepción, se toma una acción reparadora limitada cuando se producen anomalías de validación. Si Acción por anomalía se establece en Excepción, no se lleva a cabo ninguna acción reparadora y se emite una excepción a la primera anomalía de validación.

Terminales y propiedades

Los terminales del nodo Compute se describen en la tabla siguiente:

Terminal Descripción
Terminal de entrada Terminal de entrada que acepta un mensaje para que lo procese el nodo.
Terminal de anomalías Terminal de salida al que se direcciona el mensaje de entrada si se detecta una anomalía durante el cálculo. (Aunque se haya establecido la propiedad Validar, los mensajes que se propagan al terminal de anomalías del nodo no se validan).
Terminal de salida Terminal de salida al que se direcciona el mensaje transformado.

En las tablas siguientes se describen las propiedades del nodo; la columna que tiene el encabezamiento M indica si se trata de una propiedad obligatoria (marcada con un asterisco en el diálogo de propiedades si se debe especificar un valor cuando no se ha definido ningún valor por omisión), la columna que tiene el encabezamiento C indica que se trata de una propiedad configurable (se puede cambiar el valor cuando se añade el flujo de mensajes al archivo bar para su difusión).

Las propiedades básicas del nodo Compute se describen en la tabla siguiente:

Propiedad M C Valor por omisión Descripción
Origen de datos No   Nombre del origen de datos ODBC para la base de datos en la que residen las tablas a las que se hace referencia en el archivo ESQL asociado a este flujo de mensajes (identificado en la propiedad Módulo ESQL). Sólo puede especificar un origen de datos para el nodo.
Transacción No Automática Modalidad de transacción para el nodo. Puede ser Automática o Confirmar. Sólo es válida si se ha seleccionado una tabla de base de datos para la entrada.
Módulo ESQL No Cálculo Nombre del módulo del archivo ESQL que contiene las sentencias que se deben ejecutar con respecto a la base de datos y los mensajes de entrada y salida.
Modalidad de cálculo No Mensaje Elija entre:
  • Mensaje
  • Entorno local
  • Entorno local y mensaje
  • Excepción
  • Excepción y mensaje
  • Excepción y entorno local
  • Todos
Se explican en el apartado Establecimiento de la modalidad.
Tratar los avisos como errores No Deseleccionado Tratar los avisos SQL de base de datos como errores. Si selecciona el recuadro de selección, se realiza esta acción.
*Generar excepción en error de la base de datos No Seleccionado Los errores de base de datos hacen que el intermediario emita una excepción. Si selecciona el recuadro de selección, se realiza esta acción.

Las propiedades de validación del nodo Compute se describen en la tabla siguiente:

Propiedad M C Valor por omisión Descripción
Validar No Ninguna Si debe llevarse a cabo la validación. Los valores válidos son Ninguna y Contenido y valor.
Acción por anomalía No Excepción Lo que sucede si se produce una anomalía en la validación. Sólo puede establecer esta propiedad si Validar se establece en Contenido y valor. Los valores válidos son Rastreo de usuario, Anotaciones de error locales y Excepción.
Incluir todas las limitaciones de valores No Seleccionado Esta propiedad no se puede editar. La acción por omisión, indicada si el recuadro de selección está seleccionado, es que se incluyan todas las limitaciones de valores en la validación.
Arreglo No Ninguno Esta propiedad no se puede editar. Se proporciona el arreglo mínimo.

Las propiedades de descripción del nodo Compute se describen en la tabla siguiente:

Propiedad M C Valor por omisión Descripción
Descripción corta No No   Descripción breve del nodo.
Descripción larga No No   Texto que describe la finalidad del nodo en el flujo de mensajes.

Conceptos relacionados
Flujos de mensajes
Flujos de mensajes, correlaciones y ESQL
Nombres de correlación

Tareas relacionadas
Configuración de DB2
Cómo decidir los nodos que utilizar
Validación de mensajes
Creación de listas de destinos
Manejo de errores en flujos de mensajes
Configuración de flujos de mensajes coordinados
Creación de ESQL para un nodo
Configuración de ESQL dentro de nodos
Edición de propiedades configurables

Referencia relacionada
ESQL
Limitaciones de valores lógicos de tipo simple
Mandato mqsichangebroker
Mandato mqsicreatebroker
Mandato mqsisetdbparms