Acessando a Árvore Lista de Exceção

A árvore ExceptionList possui seu próprio nome de correlação, ExceptionList e é necessário utilizá-lo em todas as instruções ESQL que fazem referência ou definem o conteúdo dessa árvore.

Essa árvore é criada quando a árvore lógica é criada, quando uma mensagem de entrada é analisada. Ela está inicialmente vazia e será ocupada apenas se ocorrer uma exceção durante o processamento do fluxo de mensagens. É possível que possa ocorrer mais de uma exceção; se isso ocorrer, a árvore Lista de Exceção conterá uma subárvore para cada exceção.

Você pode acessar a árvore Lista de Exceção nos nós Compute, Database e Filter e pode atualizá-la em um nó Compute. Você deve utilizar o nome de correlação adequado; a Lista de Exceções de um nó Database ou Filter, e InputExceptionList para um nó Compute.

Talvez você queira acessar essa árvore em um nó em um procedimento de tratamento de erros. Por exemplo, talvez você queira rotear a mensagem para um caminho diferente, com base no tipo de exceção, por exemplo, uma que foi gerada explicitamente utilizando uma instrução ESQL THROW ou uma que foi gerada pelo intermediário.

O ESQL a seguir mostra como você pode acessar a Lista de Exceção e processar cada filho que ela contém:

-- Declare a reference for the ExceptionList
-- (em um nó Compute, utilize InputExceptionList)
DECLARE start REFERENCE TO ExceptionList.*[1];

-- Loop through the exception list children
WHILE start.Number IS NOT NULL DO
      -- more ESQL

   -- Move start to the last child of the field to which it currently points
      MOVE start LASTCHILD;
END WHILE;

O segundo exemplo a seguir mostra um extrato do ESQL codificado para um nó Compute para executar um loop através da lista de exceções para a descrição da última exceção (aninhada) e extrair o número do erro. Esse erro está relacionado à causa original do problema e normalmente fornece as informações mais precisas. A ação seguinte tomada pelo fluxo de mensagens pode ser resolvida pelo número do erro recuperado desta forma.

-- Declarar variável para o Número do Erro extraído da lista de
exceções
DECLARE Error INTEGER;
-- Declarar caminho atual dentro da lista de exceções
DECLARE Path CHARACTER;

-- Iniciar no primeiro filho da lista de exceções
SET Path = 'InputExceptionList.*[1]';

-- Executar loop até não encontrar mais filhos
WHILE EVAL( 'FIELDNAME(' || Path || ') IS NOT NULL' ) DO

    -- Verificar se número do erro está disponível
  IF EVAL( 'FIELDNAME(' || Path || '.Number) IS NOT NULL' ) THEN
        -- Registrar apenas o número do erro mais profundo
    SET Error = EVAL( Path || '.Number' );
  END IF;

  -- Etapa do último filho do elemento atual (geralmente uma lista de
exceções aninhadas)
 SET Path = Path || '.*[<]';

END WHILE;

Para obter informações adicionais sobre a utilização de ExceptionList, consulte o subfluxo na amostra Rotina de Tratamento de Erros que inclui o ESQL que interroga a estrutura de ExceptionList e executa a ação específica, de acordo com seu conteúdo.

Conceitos relacionados
Fluxos de Mensagem
Árvore Lista de Exceções
ESQL
Modelagem de Mensagens

Tarefas relacionadas
Tratando Erros em Fluxos de Mensagens
Projetando um Fluxo de Mensagens
Definindo o Conteúdo do Fluxo de Mensagens
Gerenciando Arquivos ESQL

Referências relacionadas
Nó Compute
Estrutura da Lista de Exceções
ESQL
Instrução DECLARE
Instrução EVAL
Instrução WHILE