Creación de ESQL para un nodo

Cree ESQL para personalizar el funcionamiento de un nodo Compute, Database o Filter dentro de un archivo ESQL.

Antes de empezar

Para llevar a cabo esta tarea, ya ha de haber realizado la siguiente:

Dentro del archivo ESQL, cree un módulo que esté asociado con un nodo en el flujo de mensajes. Un módulo puede estar asociado con un solo nódulo de un tipo determinado (Compute, Database o Filter). Dentro del módulo, puede crear y utilizar funciones y procedimientos así como las sentencias y funciones suministradas. También puede crear variables y constantes locales.

Si ha creado constantes, funciones o procedimientos a nivel del esquema del intermediario, también podrá hacer referencia a éstos dentro del módulo. Puede definir rutinas a un nivel en el que varios módulos distintos puedan utilizarlas, lo que le ahorrará tiempo en el desarrollo y trabajo de mantenimiento.

Para crear ESQL para un nodo:

  1. Vaya a la perspectiva Desarrollo de aplicaciones de intermediario.
  2. En la vista Navegador, efectúe una doble pulsación en el flujo de mensajes que incluya el nodo para el que desee ESQL. El flujo de mensajes se abre en la vista del editor.
  3. Pulse el botón derecho del ratón en el nodo (que ha de ser Compute, Database o Filter) y pulse Abrir ESQL. El archivo ESQL por omisión para este flujo de mensajes, <nombre_flujo_mensajes>.esql, se abre en la vista del editor (el archivo se creará si no existe aún).

    (Si ya ha creado el archivo por omisión y pulsa Abrir ESQL, el archivo se abrirá en la vista del editor y se creará un nuevo módulo que aparecerá resaltado.)

    Al final del archivo ESQL se creará un módulo de esquema para ese nodo. Su contenido exacto depende del tipo de nodo.

    El siguiente módulo se crea para un nodo Compute

    CREATE COMPUTE MODULE <nombre_módulo>
           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;

    El nombre del módulo se determina mediante el valor que se haya establecido para la propiedad del nodo correspondiente. El valor por omisión es <nombre_flujo_mensajes>_<tipo_nodo>. La función Principal contiene llamadas a dos procedimientos, descritos más adelante, que se declaran dentro del módulo del nodo Compute, a continuación de la función Principal. Estas llamadas están comentadas. Si desea incluir la función que proporcionan, quite la marca de comentario de dichas líneas y colóquelas en el punto adecuado del ESQL que ha creado para Principal.

    CopyMessageHeaders
    Este procedimiento crea un bucle entre las cabeceras contenidas en el mensaje de entrada y las copia en el mensaje de salida.

    Si está efectuando una migración desde la versión 2.1, este procedimiento es el equivalente al código generado cuando se selecciona el botón Copiar cabeceras de mensajes en el diálogo de propiedades del nodo Compute.

    CopyEntireMessage
    Este procedimiento copia todo el contenido del mensaje de entrada, incluidas la cabeceras, en el mensaje de salida.

    Si está efectuando una migración desde la versión 2.1, este procedimiento es el equivalente al código generado cuando se selecciona el botón Copiar mensaje completo en el diálogo de propiedades del nodo Compute.

    Si crea un módulo ESQL para un nodo Database, se creará el siguiente módulo:

    CREATE DATABASE MODULE <nombre_módulo>
           CREATE FUNCTION Main() RETURNS BOOLEAN
           BEGIN
                   	 	RETURN TRUE; 
           END;
    END MODULE;

    para un nodo Filter, el módulo es idéntico al creado para el nodo Database excepto en la primera línea, que es como sigue:

    CREATE FILTER MODULE <nombre_módulo>
  4. Añada ESQL a este archivo para personalizar el funcionamiento del nodo.

    La mayor parte del ESQL ha de añadirse dentro de la función Principal, es decir, después de la sentencia BEGIN y antes de RETURN TRUE. Puede añadir al módulo sentencias DECLARE que no estén dentro de la función Principal. Para añadir una nueva línea al archivo, pulse Intro.

    Para ayudarle a codificar ESQL válido, el editor visualiza una lista de sentencias y funciones válidas en el punto que indica el cursor. Para invocar esta ayuda, pulse Editar > Asistencia de contenido. En algunos sistemas, es posible que también pueda utilizar la combinación de teclas Control+Espacio. Desplace el contenido de la lista que se visualiza, resalte la que necesite y pulse Intro. El código adecuado se insertará en el módulo y la lista desaparecerá.

    La Asistencia de contenido se proporciona en las siguientes áreas:

    • Palabras clave aplicables basándose en la sintaxis del lenguaje.
    • Bloques de código que vayan juntos como, por ejemplo, BEGIN END;.
    • Constantes que haya definido, identificadores, etiquetas, funciones y procedimientos que puedan utilizarse, donde las rutinas puedan estar en cualquier lugar, incluso si el proyecto actual no hace referencia ellos.
    • Nombres de tablas y esquema de base de datos según la correlación del nombre de la base de datos, así como nombres de columnas en sentencias INSERT, UPDATE, DELETE y SELECT y, en la mayoría de los casos, las cláusulas WHERE de dichas sentencias.
    • Elementos de referencia de campo de mensajes: nombres de dominio de ejecución (analizador), formato de expresión de tipo, identificadores de espacio de nombres, nombres de atributos y elementos de espacio de nombres calificados y formato de expresiones de índice.
    • Contenido de la carpeta Propiedades bajo la raíz del mensaje de salida.
    • Para la sentencia DECLARE NAMESPACE, espacios de nombres de destino de conjuntos de mensajes y nombres de esquemas.

    La Asistencia de contenido funciona únicamente si ESQL puede analizarse correctamente. Errores como, por ejemplo, un END que falte después del BEGIN y demás sentencias de bloques indeterminadas, causan errores del analizador y la asistencia de contenido no puede facilitarse. Intente utilizar la Asistencia de contenido en otras áreas de alrededor de la sentencia donde no funciona, para ir determinando el jugar del error. De forma alternativa, puede guardar el archivo ESQL; al guardar el archivo se produce una validación y todos los errores de sintaxis se escriben en la vista Tareas. Consulte los errores indicados para comprender y corregir la sintaxis ESQL. Si utiliza la Asistencia de contenido para generar la mayoría de los elementos (como, por ejemplo sentencias de bloque), éstas se especificarán correctamente y habrá menos posibilidades de error.

  5. Cuando haya terminado de trabajar con ese módulo, podrá cerrar el archivo ESQL. Guarde el archivo antes de cerrarlo para conservar todos los cambios y validar el ESQL.

Si lo prefiere, puede abrir el archivo ESQL directamente y crear el módulo dentro del archivo utilizando el editor. Para ello:

  1. Vaya a la perspectiva Desarrollo de aplicaciones de intermediario.
  2. Seleccione el archivo ESQL en que desee crear el módulo. Efectúe una doble pulsación para abrir este archivo en la vista del editor o pulse el botón derecho del ratón y pulse Abrir.
  3. En la vista del editor, coloque el cursor en una nueva línea y utilice la asistencia de contenido para seleccionar el esquema de módulo adecuado para este tipo de nodo, por ejemplo, CREATE COMPUTE MODULE END MODULE;. Si lo prefiere, puede escribir esto personalmente, pero asegúrese de que lo que escribe es coherente con el esquema necesario, que se indica arriba. Es aconsejable utilizar la asistencia de contenido porque le proporciona más ayuda al insertar únicamente el ESQL válido y al incluir sentencias finales en los pares de sentencias (por ejemplo, END MODULE;) cuando éstas son necesarias.
  4. Complete la codificación del módulo cuando sea adecuado.

Sea cual sea el método que utilice para abrir el archivo ESQL, recuerde que el editor proporciona funciones para ayudarle a codificar ESQL. Esta sección se refiere a la asistencia de contenido, pero el editor dispone de más funciones. Para obtener más información sobre dichas funciones, consulte el apartado Editor ESQL.

Conceptos relacionados
Flujos de mensajes
Esquema de intermediario
Módulos ESQL

Tareas relacionadas
Desarrollo de aplicaciones de flujos de mensajes
Modificación de ESQL para un nodo
Modificación de los valores del editor de ESQL

Referencia relacionada
Nodos incorporados
ESQL
Editor ESQL