Ir para o conteúdo

Tratamento de Erros de Ação

Tratamento de Erros

A maioria dos tipos de ação termina imediatamente em resposta a uma exceção não tratada. A exceção é registrada no histórico de eventos. É responsabilidade do desenvolvedor validar os dados antes de executar a ação.

As ações de CRUD de negócios realizam operações entre plataformas. Em alguns casos, a operação inclui uma ou mais solicitações de API para serviços de externo, como endpoints REST. Muitas vezes, é difícil validar os dados antes de executar a ação. Em vez disso, os desenvolvedores precisam capturar e manipular a exceção.

Para isso, as ações de CRUD empresarial oferecem suporte aos seguintes recursos:

Continuar em Caso de Erro

Uma ação CRUD de negócios recupera as linhas de origem da regra em lotes e executa o evento (Insert, Update ou Delete) para cada linha no lote. Por padrão, uma exceção não tratada encerra a operação: nenhuma linha adicional é processada.

Quando a opção Continue On Error está habilitada, no entanto, a exceção é capturada. A ação continua processando as linhas restantes, e o evento é concluído com sucesso. Torna-se responsabilidade do desenvolvedor lidar com quaisquer falhas usando um manipulador de ação.

Manipuladores de Ação

Um manipulador de ação é fundamentalmente uma ação. No entanto, manipuladores de ação diferem de ações das seguintes maneiras:

  • Enquanto as ações são registradas para serem executadas antes ou depois de um evento, os manipuladores de ações são executados depois que uma ação é bem-sucedida ou falha.

  • Enquanto as ações são vinculadas à linha do objeto de dados, os manipuladores de ações são vinculados à fonte da ação.

Os manipuladores de ação podem ser usados para os seguintes propósitos:

  • Registrar o status de linhas individuais.

  • Acompanhar o progresso de uma operação CRUD empresarial de longa duração.

  • Correlacionando falhas de linha com entradas no [EventHistory][ab eventhistory] objeto de dados públicos.

  • Reverter o efeito de ações com falha que não podem ser revertidas pelo banco de dados [transações][ab transactions].

Os desenvolvedores podem usar o [event()][ab fn event] Função de tempo de execução mvSQL de dentro de manipuladores de ação para acessar informações de eventos e nível de linha, incluindo o seguinte:

  • contextid: Um identificador exclusivo que pode ser usado para correlacionar eventos que ocorrem dentro de uma única operação, por exemplo, os eventos executados por uma ação CRUD empresarial.

  • rowid: Um identificador exclusivo para a linha na qual o evento foi invocado. No caso de uma regra CRUD de negócios, isso se refere à linha de destino. No caso de um manipulador de ação, isso se refere à linha de origem da ação.

  • source.rowid: Um identificador exclusivo para a linha de origem da regra CRUD de negócios. Isso se aplica a regras de inserção e atualização.

  • exception: Uma mensagem de exceção. Este valor é acessível a manipuladores de falha de ação se o evento falhou como resultado de uma exceção.

O rowid e source.rowid propriedades permitem que os desenvolvedores correlacionem uma falha no nível da linha com uma entrada no EventHistory objeto de dados públicos. Uma configuração típica pode incluir:

  • Ação: Uma regra de inserção de CRUD empresarial que tem como alvo um endpoint REST. A opção Continuar em caso de erro está habilitada.

  • Success Handler: Uma regra CRUD de banco de dados que atualiza a linha de origem da ação para indicar que a linha foi processada. Isso pode ser usado para relatar o status de uma operação em andamento ou para excluir a linha de execuções futuras.

  • Failure Handler: Uma regra CRUD de banco de dados que atualiza a linha de origem da ação para indicar que a linha falhou. A regra CRUD de banco de dados usaria o event('rowid') função para registrar o identificador da linha.

  • Rollback Handler: Ações que revertem o efeito de todas as ações bem-sucedidas que ocorrem antes de uma ação com falha. A ação com falha em si não é manipulada por este manipulador.

Os desenvolvedores devem expor as falhas na interface do usuário. Por exemplo, o desenvolvedor pode construir uma página com dois painéis. O primeiro painel enumera as linhas com falha. O segundo painel é vinculado ao EventHistory objeto de dados públicos. O último painel é vinculado ao primeiro, correspondendo RowId para SourceRowId.