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
.