Utilice el nodo Compute para crear uno o más mensajes de salida nuevos.
Los mensajes de salida que cree en el nodo Compute podrían crearse modificando la información que se suministra en el mensaje de entrada o utilizando únicamente información nueva que puede extraerse de una base de datos o de otras procedencias. Se pueden utilizar los elementos del mensaje de entrada (por ejemplo cabeceras, campos de cabecera y datos de cuerpo), el entorno asociado y la lista de excepciones para crear el nuevo mensaje de salida.
Especifique cómo se crean los nuevos mensajes codificando ESQL en el archivo de recursos ESQL del flujo de mensajes. Para obtener más información, consulte Especificación de ESQL.
Utilice el nodo Compute para:
El nodo Compute se encuentra en la bandeja Transformación de la paleta y está representado en el entorno de trabajo mediante el siguiente icono:
Tomemos el ejemplo de un flujo de mensajes en el que quiere dar un identificador exclusivo a cada orden que se recibe, para facilitar el seguimiento. El nodo Compute no modifica su mensaje de entrada; crea una copia nueva y modificada del mensaje como mensaje de salida. Puede utilizar el nodo Compute para insertar un identificador exclusivo para su orden en el mensaje de salida, que pueden utilizar los nodos siguientes del flujo de mensajes.
Cuando haya colocado una instancia del nodo Compute en un flujo de mensajes, podrá configurarlo; consulte el apartado Configurar un nodo de flujo de mensajes. Las propiedades del nodo se visualizan en la vista Propiedades. Para visualizar las propiedades del nodo en el diálogo Propiedades, efectúe una doble pulsación en el nodo o pulse con el botón derecho del ratón sobre el nodo y pulse Propiedades.
Todas las propiedades obligatorias para las que debe especificar un valor (las que no tienen un valor predeterminado definido) están marcadas con un asterisco.
Configure el nodo Compute como se indica a continuación:
Para acceder a una base de datos desde este nodo:
En sistemas z/OS, el
intermediario utiliza el ID de la tarea iniciada por el intermediario o el ID y la contraseña del usuario que se
especificaron en el JCL del mandato mqsisetdbparms BIPSDBP en el
conjunto de datos de personalización <hlq>.SBIPPROC.
El valor escogido se establece para todas las bases de datos que haya añadido; no se puede seleccionar un valor diferente para cada tabla.
Cuando selecciona el recuadro, el nodo gestiona todos los códigos de retorno positivos de la base de datos como errores y genera excepciones igual que si se tratase de 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 excepciones. El aviso más significativo es no encontrado que, en la mayoría de los casos, puede tratarse de forma segura como un código de retorno normal.
Si deselecciona el recuadro, deberá incluir ESQL para comprobar si hay algún error de la base de datos que pudiera devolverse después de cada llamada efectuada a la base de datos (esto puede hacerse utilizando SQLCODE y SQLSTATE). Si se produce un error, deberá gestionarlo en el flujo de mensajes para asegurarse de la integridad del intermediario y de la base de datos; el error se ignora si no lo gestiona a través de su propio proceso, debido a que ha decidido no invocar el manejo de errores predeterminado mediante el intermediario. Por ejemplo, puede incluir la sentencia THROW de ESQL para generar una excepción en este nodo o puede utilizar el nodo Throw para generar posteriormente su propia excepción en el flujo de mensajes.
Codifique sentencias ESQL para personalizar el comportamiento del nodo Compute. Por ejemplo, puede personalizar el nodo para que cree un nuevo mensaje o mensajes de salida, utilizando mensajes de entrada o contenido de base de datos (sin modificar o modificados), o datos nuevos. Por ejemplo, quizá desee modificar un valor en el mensaje de entrada añadiendo un valor de una base de datos y almacenando el resultado en un campo en el mensaje de salida.
Codifique las sentencias ESQL que desee 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 ESQL para cada nodo del flujo de mensajes que lo necesite. Cada parte del código relacionada con un nodo específico se denomina módulo.
Si todavía no existe ningún archivo ESQL para este flujo de mensajes, efectúe una doble pulsación en el nodo Compute o pulse el botón derecho del ratón en el nodo y pulse en Abrir ESQL. Esta acción crea y abre un nuevo archivo ESQL en la vista del editor ESQL. Si lo prefiere, puede abrir el archivo ESQL adecuado en la vista Desarrollo de intermediario y seleccionar este nodo en la vista Esquema.
Si el archivo ya existe, pulse Examinar al lado de la propiedad Módulo ESQL para visualizar el recuadro de diálogo Selección de módulo, que lista los módulos disponibles del nodo Compute definidos en los archivos ESQL a los que este flujo de mensajes puede acceder (pueden definirse archivos ESQL en otros proyectos dependientes). Seleccione el módulo apropiado y pulse Aceptar. Si no hay disponibles módulos apropiados, la lista está vacía.
Si el módulo que ha especificado no existe, se crea automáticamente y el editor lo muestra. Si el archivo y el módulo ya existen, el editor resalta el módulo adecuado.
Si se crea un esqueleto de módulo para este nodo en un archivo ESQL nuevo o ya existente, consta del ESQL siguiente. En este ejemplo se muestra el nombre de módulo predeterminado:
CREATE COMPUTE MODULE <nombre_flujo>_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;
DECLARE I INTEGER 1;por
DECLARE I INTEGER; SET I=1;
DECLARE J INTEGER CARDINALITY(InputRoot.*[]);por
DECLARE J INTEGER; SET J=CARDINALITY(InputRoot.*[]);
Si crea su propio módulo ESQL, debe crear este esqueleto exactamente tal como se muestra, a excepción de las llamadas y las definiciones de procedimiento (que se describen más abajo). Puede cambiar el nombre predeterminado, pero asegúrese de que el nombre que especifique coincida con el nombre de la propiedad de nodo correspondiente Módulo ESQL. Si desea que el nombre del módulo incluya uno o más espacios, escriba el nombre entre comillas en la propiedad Módulo ESQL.
Añada su propio ESQL para personalizar este nodo después de la sentencia BEGIN que hay después de CREATE FUNCTION y antes de RETURN TRUE. Puede utilizar las dos llamadas incluidas en el esqueleto, a los 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 llamadas en el esqueleto están comentadas; elimine las marcas de comentario si desea utilizar el procedimiento. Si no desea utilizarlo, elimine del módulo la llamada y la definición del procedimiento.
La propiedad Modalidad de cálculo controla los componentes que se utilizan de forma predeterminada en el mensaje de salida. Seleccione la propiedad para indicar si se utilizan los componentes Mensaje, Entorno local (llamado anteriormente Lista de destinos) y Lista de excepciones generados dentro del nodo o contenidos en el mensaje entrante.
Este valor predeterminado se utiliza cuando el mensaje transformado se direcciona al terminal de salida una vez que se ha completado el proceso en el nodo. También se utiliza el valor predeterminado siempre que una sentencia PROPAGATE no especifica la composición del mensaje de salida.
Esos componentes que no están incluidos en la selección se pasan sin modificarse; incluso si modifica esos componentes, las actualizaciones son locales para este nodo.
Y al revés, los componentes que no se incluyen en la selección no se pasan y persisten las actualizaciones que se realizan en el nodo.
Modalidad | Descripción |
---|---|
Mensaje (valor predeterminado) | El mensaje lo genera o lo pasa el nodo Compute tal como se ha modificado dentro del nodo. |
Entorno local | El nodo Compute genera o pasa la estructura en árbol del entorno local tal como se ha modificado dentro del nodo. |
Entorno local y mensaje | El nodo Compute genera o pasa la estructura en árbol del entorno local y el mensaje tal como lo ha modificado el nodo. |
Excepción | El nodo Compute genera o pasa la Lista de excepciones tal como la ha modificado. |
Excepción y mensaje | El nodo Compute genera o pasa la Lista de excepciones y el mensaje tal como los ha modificado el nodo. |
Excepción y entorno local | El nodo Compute genera o pasa la lista de excepciones y la estructura en árbol del entorno local tal como las ha modificado el nodo. |
Todo | El nodo Compute genera o pasa el mensaje, la Lista de excepciones y el entorno local tal como los ha modificado el nodo. |
El valor de la propiedad Modalidad de cálculo especifica qué nuevos árboles de mensaje se propagan desde el nodo Compute. Por lo tanto, para esos árboles de mensaje seleccionados, los mensajes de entrada se descartan a menos que se copien explícitamente en el nuevo árbol de mensaje de salida equivalente.
Si se ha seleccionado Todo, el nodo Compute espera generar los tres nuevos árboles de mensaje para Root, LocalEnvironment y ExceptionList rellenando OutputRoot, OutputLocalEnvironment y OutputExceptionList. Los árboles de mensaje de entrada no se pasan a la salida, a menos que se copien explícitamente de la entrada a la salida.
SET OutputRoot = InputRoot; SET OutputLocalEnvironment = InputLocalEnvironment; SET OutputExceptionList = InputExceptionList;Si el ESQL era CopyEntireMessage(), LocalEnvironment y ExceptionList no se copian ni se propagan al terminal de salida; se pierden en ese nodo en el flujo de mensajes.
Para producir un mensaje de salida nuevo o modificado y propagar los mismos LocalEnvironment y ExceptionList, establezca la propiedad Modalidad de cálculo en Mensaje para que el LocalEnvironment y ExceptionList que se pasen al nodo Compute o Mapping, se pasen desde el nodo Compute.
La Modalidad de cálculo se aplica únicamente a la propagación desde el nodo. Los tres árboles de salida se pueden crear en un nodo Compute o Mapping y se pueden manipular y existir dentro del nodo. Sin embargo, la Modalidad de cálculo determina si dichos árboles de salida se utilizan en la propagación desde el nodo.
Modalidad de cálculo | Árboles propagados |
---|---|
Todo | OutputRoot, OutputLocalEnvironment, OutputExceptionList |
Mensaje | OutputRoot, InputLocalEnvironment, InputExceptionList |
Entorno local | InputRoot, OutputLocalEnvironment, InputExceptionList |
Entorno local y mensaje | OutputRoot, OutputLocalEnvironment, InputExceptionList |
Excepción | InputRoot, InputLocalEnvironment, OutputExceptionList |
Excepción y mensaje | OutputRoot, InputLocalEnvironment, OutputExceptionList |
Excepción y entorno local | InputRoot, OutputLocalEnvironment, OutputExceptionList |
Cuando se define el nombre de un árbol de salida, ESQL crea este árbol de mensaje antes de la propagación. Si el ESQL no crea el árbol, no se propagará ningún árbol para ese nombre de correlación y el árbol de entrada no se utilizará en su lugar porque la propiedad Modalidad de cálculo no ha indicado esta opción. Por tanto, dependiendo de los valores de la propiedad Modalidad de cálculo de cálculo y del ESQL, se puede suprimir un árbol que se haya entrado al nodo porque no se ha transferido al árbol de salida, o propagar un árbol modificado, tal como deseaba.
A la inversa también se cumple. Si su ESQL interroga a los árboles de entrada y no necesita propagar estos árboles, el valor de la Modalidad de cálculo puede indicar que el árbol de mensaje se propaga cuando no es su intención que esto suceda. Por ejemplo, quizá no desee propagar LocalEnvironment y ExceptionList desde un nodo Compute, pero como seleccionó Mensaje, se propagarán las versiones de entrada de los árboles. Aunque el ESQL suprima explícitamente OutputLocalEnvironment y OutputExceptionList, esas modificaciones serán locales para el nodo debido a que el valor de la propiedad Modalidad de cálculo causa la propagación de los árboles de entrada.
El componente Entorno del árbol de mensaje no queda afectado por el valor de la propiedad Modalidad de cálculo. El contenido, si existe, se pasa desde este nodo en el mensaje de salida.
Establezca esta propiedad para que refleje el formato de mensaje de salida que requiere. Si selecciona una opción (o acepta el valor predeterminado) que no incluye una parte determinada del mensaje, esa parte del mensaje no se incluye en ningún mensaje de salida que se cree.
El nodo Compute tiene un mensaje de entrada y un mensaje de salida, por lo que puede utilizar el ESQL para hacer referencia a campos de cualquiera de los dos mensajes. También puede trabajar con InputLocalEnvironment y OutputLocalEnvironment, e InputExceptionList y OutputExceptionList, así como con los cuerpos de los mensajes de entrada y de salida.
Establezca las propiedades de validación para definir cómo debe validarse el mensaje producido por el nodo Compute. Estas propiedades no hacen que se valide el mensaje de entrada. Se espera que, si se necesita dicha validación, el nodo de entrada o un nodo de validación anterior ya habrá realizado la validación.
Si desea ver información más detallada, consulte los apartados Validar mensajes y Propiedades de validación.
Los terminales del nodo Compute están descritos en la siguiente tabla.
Terminal | Descripción |
---|---|
In (de entrada) | El terminal de entrada que acepta un mensaje para que lo procese el nodo. |
Failure (de anomalías) | Terminal de salida al que se direcciona el mensaje de entrada si durante el cálculo se produce una excepción no manejada. |
Out (de salida) | Terminal de salida al que se direcciona el mensaje transformado cuando se completa el proceso en el nodo. Es posible que una sentencia PROPAGATE también direccione el mensaje transformado a este terminal. |
Out1 | El primer terminal de salida alternativo al que es posible que una sentencia PROPAGATE direccione el mensaje transformado. |
Out2 | El segundo terminal de salida alternativo al que es posible que una sentencia PROPAGATE direccione el mensaje transformado. |
Out3 | El tercer terminal de salida alternativo al que es posible que una sentencia PROPAGATE direccione el mensaje transformado. |
Out4 | El cuarto terminal de salida alternativo al que es posible que una sentencia PROPAGATE direccione el mensaje transformado. |
Si desea ver la sintaxis de la sentencia PROPAGATE, consulte Sentencia PROPAGATE.
Las tablas siguientes describen las propiedades de nodo. La columna con la cabecera O indica si la propiedad es obligatoria (marcada con un asterisco si tiene que entrar un valor cuando no hay definido ningún valor predeterminado); la columna con la cabecera C indica si la propiedad es configurable (puede cambiar el valor cuando añade el flujo de mensajes al archivo BAR para desplegarlo).
Las propiedades de Descripción del nodo Compute están descritas en la siguiente tabla.
Propiedad | O | C | Valor predeterminado | Descripción |
---|---|---|---|---|
Nombre de nodo | No | No | El tipo de nodo | El nombre del nodo. |
Descripción corta | No | No | Descripción breve del nodo. | |
Descripción larga | No | No | Texto que describe el propósito del nodo en el flujo de mensajes. |
Las propiedades básicas del nodo Compute se describen en la siguiente tabla.
Propiedad | O | C | Valor predeterminado | Descripción |
---|---|---|---|---|
Origen de datos | No | Sí | El nombre del origen de datos ODBC para la base de datos dentro de la cual se encuentran 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 se puede especificar un origen de datos para el nodo. | |
Transacción | Sí | No | Automática | La modalidad de transacción para el nodo. Las opciones válidas son Automática y Confirmar. La propiedad sólo es válida si se ha seleccionado una tabla de base de datos para la entrada. |
Módulo ESQL | Sí | No | Compute | Nombre del módulo dentro del archivo ESQL que contiene las sentencias para ejecutar contra la base de datos y los mensajes de entrada y salida. |
Modalidad de cálculo | Sí | No | Mensaje | Elija entre:
|
Tratar los avisos como errores | Sí | No | No seleccionado | Si selecciona el recuadro, los avisos SQL de base de datos se tratan como errores. |
Generar excepción en error de base de datos | Sí | No | Seleccionado | Si selecciona este recuadro, los errores de base de datos hacen que el intermediario genere una excepción. |
En la siguiente tabla se describen las propiedades de Opciones de análisis para el nodo Compute.
Propiedad | O | C | Valor predeterminado | Descripción |
---|---|---|---|---|
Temporización del análisis | Sí | No | A petición | Esta propiedad controla cuándo se analiza un mensaje de entrada.
Los valores válidos son A
petición, Inmediato
y Completo. Si desea ver una descripción completa de esta propiedad, consulte Análisis a petición. |
Utilizar analizador compacto XMLNSC para dominio XMLNS | No | No | No seleccionado | ![]() ![]() |
Retener contenido mixto | No | No | No seleccionado | Esta propiedad controla si el analizador XMLNSC crea elementos en el árbol de mensaje cuando encuentra texto mixto en un mensaje de entrada. Si selecciona el recuadro, se crean elementos para el texto mixto. Si deselecciona el recuadro, el texto mixto se ignora y no se crea ningún elemento. |
Retener comentarios | No | No | No seleccionado | Esta propiedad controla si el analizador XMLNSC crea elementos en el árbol de mensaje cuando encuentra comentarios en un mensaje de entrada. Si selecciona el recuadro, se crean elementos para los comentarios. Si deselecciona el recuadro, los comentarios se ignoran y no se crea ningún elemento. |
Retener instrucciones de proceso | No | No | No seleccionado | Esta propiedad controla si el analizador XMLNSC crea elementos en el árbol de mensaje cuando encuentra instrucciones de proceso en un mensaje de entrada. Si selecciona el recuadro, se crean elementos para las instrucciones de proceso. Si deselecciona el recuadro, las instrucciones de proceso se ignoran y no se crea ningún elemento. |
Las propiedades de validación del nodo Compute se describen en la siguiente tabla.
Para ver la descripción completa de estas propiedades, consulte el apartado Propiedades de validación.Propiedad | O | C | Valor predeterminado | Descripción |
---|---|---|---|---|
Validar | No | Sí | Ninguna | Esta propiedad controla si tiene lugar la validación. Los valores válidos son Ninguna, Contenido y valor, Contenido y Heredar. |
Acción para anomalía | No | No | Excepción | Esta propiedad controla qué sucede si falla una validación. Sólo puede establecer esta propiedad si Validar se establece en Contenido o Contenido y valor. Los valores válidos son Rastreo de usuario, Anotaciones de error locales, Excepción y Lista de excepciones. |
Incluir todas las limitaciones de valor | No | No | Seleccionado | Esta propiedad no se puede editar. La acción predeterminada, indicada por el recuadro seleccionado, es que en la validación se incluyen todas las limitaciones de valor. |
Arreglo | No | No | Ninguna | Esta propiedad no se puede editar. Se proporciona un arreglo mínimo. Los valores válidos son Ninguna y Todos. |