Acceso al árbol ExceptionList

El árbol ExceptionList tiene su propio nombre de correlación, ExceptionList, y debe utilizarlo en todas las sentencias ESQL que hacen referencia o establecen el contenido de este árbol.

Este árbol se crea con el árbol lógico cuando se analiza un mensaje de entrada. Inicialmente está vacío y sólo se rellena si se produce una excepción durante el proceso del flujo de mensajes. Es posible que se produzca más de una excepción. Si esto es así, el árbol ExceptionList contiene un subárbol para cada excepción.

Puede acceder al árbol ExceptionList en los nodos Compute, Database y Filter y puede actualizarlo en un nodo Compute. Debe utilizar el nombre de correlación adecuado; la lista de excepciones para un nodo Database o Filter, e InputExceptionList para un nodo Compute.

Es posible que desee acceder a este árbol en un nodo de un procedimiento de manejo de errores. Por ejemplo, es posible que desee direccionar el mensaje a una vía de acceso diferente basada en el tipo de excepción, por ejemplo, una que haya generado explícitamente utilizando una sentencia ESQL THROW o una que haya generado el intermediario.

El ESQL le muestra cómo puede acceder a ExceptionListy procesar cada hijo que contiene:

-- Declarar una referencia para ExceptionList
-- (en un nodo Compute utilice InputExceptionList)
DECLARE start REFERENCE TO ExceptionList.*[1];

-- Efectuar un bucle por los hijos de la lista de excepciones
WHILE start.Number IS NOT NULL DO
   -- more ESQL

   -- Mover el inicio al último hijo del campo al que apunta actualmente
   MOVE start LASTCHILD;
END WHILE;         

El segundo ejemplo siguiente muestra un extracto de ESQL que se ha codificado para un nodo Compute para efectuar un bucle por la lista de excepciones hasta la última descripción de excepción (anidada) y extraer el número de error. Este error está relacionado con la causa original del problema y normalmente proporciona la información más precisa. La siguiente acción que ha de tomar el flujo de mensajes se puede decidir mediante el número de error que se ha recuperado de este modo.

-- Declarar la variable para el número de error extraído de la lista de excepciones
DECLARE Error INTEGER;
-- Declarar la vía de acceso actual en la lista de excepciones
DECLARE Path CHARACTER;

-- Iniciar en el primer hijo de la lista de excepciones
SET Path = 'InputExceptionList.*[1]';

-- Efectuar un bucle hasta que no haya más hijos
WHILE EVAL( 'FIELDNAME(' || Path || ') IS NOT NULL' ) DO

  -- Comprobar si hay un número de error disponible
  IF EVAL( 'FIELDNAME(' || Path || '.Number) IS NOT NULL' ) THEN
    -- Registrar sólo el número de error más alto
    SET Error = EVAL( Path || '.Number' );
  END IF;

 -- Ir al último hijo del elemento actual (generalmente una lista de excepciones anidada
 SET Path = Path || '.*[<]';

END WHILE; 

Para obtener más información acerca de cómo utilizar ExceptionList, consulte el subflujo del ejemplo de Manejador de errores, que incluye ESQL que interroga a la estructura de ExceptionList y toma una acción específica según su contenido.

Conceptos relacionados
Flujos de mensajes
Árbol ExceptionList
ESQL
Diseño de mensajes

Tareas relacionadas
Manejo de errores en flujos de mensajes
Diseño de un flujo de mensajes
Definición del contenido del flujo de mensajes
Gestión de archivos ESQL

Referencia relacionada
Nodo Compute
Estructura de la lista de excepciones
ESQL
Sentencia DECLARE
Sentencia EVAL
Sentencia WHILE