Nodo Filter

Este tema contiene las secciones siguientes:

Finalidad

Utilice el nodo Filter para direccionar un mensaje según el contenido del mensaje. El direccionamiento se define codificando una expresión de filtro en ESQL. Puede incluir elementos del mensaje de entrada o propiedades del mensaje en la expresión de filtro. También puede utilizar datos contenidos en una base de datos externa para completar la expresión. El terminal de salida al que se dirige el mensaje depende de si la expresión se evalúa como verdadera, falsa o desconocida.

Conecte los terminales que cubren todas las situaciones que podrían resultar del filtro; si el nodo propaga el mensaje a un terminal que no está conectado, se elimina el mensaje, aunque sea transaccional.

Este nodo acepta sentencias ESQL de la misma manera que los nodos Compute y Database. La última sentencia ejecutada debe ser una sentencia RETURN <expresión> cuya expresión se evalúe en un valor booleano. Este valor booleano determina a qué terminal se direcciona el mensaje. En muchos casos, el algoritmo de direccionamiento es una simple comparación de valores de campos de mensaje. La comparación la describe la expresión y la sentencia RETURN es la única sentencia. Si codifica RETURN sin una expresión (RETURN;) o con la expresión NULL, el nodo propaga el mensaje al terminal desconocido.

Si el flujo de mensajes requiere opciones de direccionamiento más complejas, puede utilizar los nodos RouteToLabel y Label.

El nodo Filter se representa en el entorno de trabajo con el siguiente icono:

Icono de nodo Filter

Utilización de este nodo en un flujo de mensajes

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

Supongamos que ha creado una prueba en línea con diez preguntas de selección múltiple. Cada mensaje de entrada contiene el nombre y la dirección de un candidato seguidos de una serie de respuestas. Se comprueba cada respuesta y, si es correcta, se suma 1 al valor del campo SCORE. Cuando se han comprobado todas las respuestas, se comprueba si el campo SCORE es mayor que 5. Si lo es, el nodo Filter propaga el mensaje al flujo que maneja la entrada de candidatos satisfactorios; de lo contrario, el mensaje se filtra y se dirige al proceso de rechazo, y se crea un mensaje de desestimación.

Configuración del nodo Filter

Una vez ha puesto una instancia del nodo Filter en un flujo de mensajes, puede configurarlo. Pulse el botón derecho del ratón en el nodo en la vista de editor y pulse Propiedades. Aparecen las propiedades básicas del nodo.

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

Configure el nodo Filter de la manera siguiente:

  1. En Origen de datos, especifique el nombre por el que se conoce la base de datos correspondiente en el sistema en el que va a ejecutarse este flujo de mensajes. El intermediario se conecta a esta base de datos con la información de ID de usuario y contraseña que ha especificado en el mandato mqsicreatebroker, mqsichangebroker o mqsisetdbparms.

    En sistemas z/OS, el intermediario utiliza el ID de tarea iniciada de intermediario o el ID de usuario y contraseña que se han especificado en el mandato mqsisetdbparms del JCL BIPSDBP del conjunto de datos de personalización <hlq>.SBIPPROC.

  2. En Expresión de filtro, identifique el módulo dentro de un archivo ESQL que contiene las sentencias ESQL que el nodo ejecuta. Si desea que el nombre del módulo incluya uno o más espacios, escriba el nombre entre comillas en la propiedad Expresión de filtro.

    Codifique las sentencias ESQL para personalizar el comportamiento del nodo Filter, en un archivo ESQL que esté asociado al flujo de mensajes en el que ha incluido esta instancia del nodo Filter. 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, pulse el botón derecho del ratón en el nodo Filter y pulse Abrir ESQL. Se creará y abrirá un nuevo archivo ESQL en la vista de editor ESQL.

    Si el archivo ya existe, pulse el botón Examinar al lado de la propiedad Expresión de filtro. Aparece el diálogo Selección de módulo, que lista los módulos disponibles del nodo Filter 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 coloca el archivo para mostrarlo. Si el archivo y el módulo ya existen, el editor coloca el archivo y resalta el módulo adecuado.

    Si lo prefiere, puede abrir el archivo ESQL adecuado en el Navegador de recursos y seleccionar este nodo en la vista de esquema.

    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 por omisión:

    CREATE FILTER MODULE <nombre_flujo>_Filter
           CREATE FUNCTION Main() RETURNS BOOLEAN
           BEGIN
                   RETURN TRUE; 
           END;
    END MODULE;

    Si crea su propio módulo ESQL, debe crear este esqueleto exactamente tal como se muestra. Puede actualizar el nombre por omisión, pero asegúrese de que el nombre que especifique coincida con el nombre de la propiedad de nodo correspondiente Expresión de filtro.

    Añada su propio ESQL para personalizar este nodo después de la sentencia BEGIN y antes de la sentencia RETURN. Si la expresión de la sentencia RETURN no es TRUE ni FALSE, se resuelve su valor para determinar el terminal al que se propagará el mensaje. Si la expresión se resuelve en NULL, o codifica RETURN;, u omite la sentencia RETURN, el nodo propaga el mensaje al terminal desconocido.

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

    En este módulo puede utilizar todas las sentencias ESQL incluidos SET, WHILE, DECLARE e IF, pero (a diferencia del nodo Compute) el nodo Filter propaga al terminal de salida, el mensaje que recibe en su terminal de entrada sin modificar. Esto significa que, al igual que el nodo Database, en un nodo Filter sólo tiene un mensaje al que hacer referencia.

    Puesto que no puede modificar ninguna parte de ningún mensaje, la sentencia de asignación (la sentencia SET, no la cláusula SET de la sentencia INSERT) sólo puede asignar valores a variables temporales. Por tanto, el ámbito de las acciones que puede realizar con una sentencia de asignación es limitado.

  3. Seleccione el valor Transacción en el menú desplegable. Los valores son los siguientes:
    • Automática (el valor por omisión). El flujo de mensajes del que forma parte el nodo Filter se confirmará si es satisfactorio. Es decir, se realizan las acciones que se han definido en el módulo ESQL y el mensaje continúa a través del flujo de mensajes. Si el flujo de mensajes da error, la acción se restituye. Por tanto, si elige Automática, la posibilidad de confirmar o restituir la acción del nodo Filter en la base de datos depende de si el proceso de todo el flujo de mensajes es satisfactorio o no.
    • Confirmar. Si desea confirmar acciones no confirmadas realizadas en este flujo de mensajes en la base de datos conectada a este nodo, independientemente del éxito o error del flujo de mensajes como un todo, seleccione Confirmar. Los cambios en la base de datos se confirman incluso si el flujo de mensajes propiamente dicho no se ejecuta correctamente.
  4. Seleccione Básico en el navegador del diálogo de propiedades y seleccione o deseleccione los dos recuadros:
    • Si desea tratar los mensajes de aviso de la base de datos como errores y propagar el mensaje de salida del nodo al terminal anomalías, seleccione el recuadro Tratar los avisos como errores. Inicialmente, el recuadro no está seleccionado.

      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 desea que el intermediario genere una excepción cuando se detecte un error de la base de datos, seleccione el recuadro Generar excepción en error de base de datos. Inicialmente, el recuadro está seleccionado.

      Si deselecciona el recuadro, deberá incluir ESQL para saber 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 ha producido 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 ignorará si no lo gestiona a través de su propio proceso, debido a que ha elegido no invocar el manejo de errores por omisión 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.

  5. Seleccione Descripción en el navegador del diálogo de propiedades para entrar una descripción corta, una descripción larga, o ambas.
  6. Pulse Aplicar para efectuar los cambios en el nodo Filter sin cerrar el diálogo de propiedades. Pulse Aceptar para aplicar los cambios y cerrar el diálogo de propiedades.

    Pulse Cancelar para cerrar el diálogo y eliminar todos los cambios que ha efectuado en las propiedades.

Terminales y propiedades

Los terminales del nodo Filter se describen 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) El terminal de salida al que se direcciona el mensaje si se detecta una anomalía durante el cálculo.
Unknown (desconocido) El terminal de salida al que se direcciona el mensaje si la expresión de filtro especificada se evalúa como unknown o null.
False (falso) El terminal de salida al que se direcciona el mensaje si la expresión de filtro especificada se evalúa como false.
True (verdadero) El terminal de salida al que se direcciona el mensaje si la expresión de filtro especificada se evalúa como true.

Las tablas siguientes describen las propiedades del nodo; la columna con la cabecera O indica si la propiedad es obligatoria (marcada con un asterisco en el diálogo de propiedades si tiene que entrar un valor cuando no hay definido ningún valor por omisión), 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 básicas del nodo Filter se describen en la siguiente tabla.

Propiedad O C Valor por omisión Descripción
Origen de datos No   El nombre del origen de datos ODBC de la base de datos en la que residen las tablas a las que se hace referencia en el ESQL asociado a este nodo (identificado por la propiedad Expresión de filtro).
Transacción No Automática La modalidad de transacción para el nodo. Puede ser Automática o Confirmar.
Expresión de filtro No Filter Nombre del módulo dentro del recurso (archivo) ESQL que contiene las sentencias para ejecutar contra el mensaje que se recibe en el nodo.
Tratar los avisos como errores No No seleccionado Tratar los avisos SQL de base de datos como errores. Si selecciona el recuadro, se realizará esta acción.
Generar excepción en error de base de datos No Seleccionado Los errores de la base de datos hacen que el intermediario genere una excepción. Si selecciona el recuadro, se realizará esta acción.

Las propiedades de descripción del nodo Filter se describen en la siguiente tabla.

Propiedad O 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 el propósito del nodo en el flujo de mensajes.
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ac04780_