Ir para o conteúdo

Tratamento de Erros de Ação

Manipulação 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 realizar a ação.

As ações Business CRUD 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 interceptar e tratar a exceção.

Para tanto, as ações CRUD empresariais suportam os seguintes recursos:

  • Continuar em caso de erro
  • Manipuladores de ação

Continuar em Caso de Erro

Uma ação CRUD comercial recupera as linhas de origem da regra em lotes e executa o evento (Inserir, Atualizar ou Excluir) para cada linha do lote. Por padrão, uma exceção não tratada encerra a operação: nenhuma linha adicional é processada.

Entretanto, quando a opção Continuar em caso de erro está habilitada, a exceção é capturada. A ação continua processando as linhas restantes e o evento é concluído com êxito. Torna-se responsabilidade do desenvolvedor lidar com quaisquer falhas usando um manipulador de ações.

Manipuladores de Ação

Um manipulador de ação é fundamentalmente uma ação. No entanto, os manipuladores de ações diferem das 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ção são executados após uma ação ser bem-sucedida ou falhar.
  • Enquanto as ações estão vinculadas à linha do objeto de dados, os manipuladores de ações estão vinculados à origem da ação.

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

  • Registrando o status de linhas individuais.
  • Acompanhar o progresso de uma operação CRUD comercial de longa duração.
  • Correlacionar falhas de linha com entradas no objeto de dados públicos EventHistory.

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

  • contextid - 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 comercial CRUD.
  • rowid – Identificador exclusivo da linha na qual o evento foi invocado. No caso de uma regra CRUD comercial, isso se refere à linha de destino. No caso de um manipulador de ação, refere-se à linha de origem da ação.
  • source.rowid - Identificador exclusivo da linha de origem da regra CRUD comercial. Isso se aplica às regras de Inserção e Atualização.
  • exception - Mensagem de exceção. Esse valor estará acessível para manipuladores de falha de ação se o evento falhar como resultado de uma exceção.

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

  • Ação - Regra de inserção de CRUD de negócios que visa um endpoint REST. A opção Continuar em caso de erro está habilitada.
  • Success Handler - Uma regra CRUD do banco de dados que atualiza a linha de origem da ação para indicar que a linha foi processada. Isto pode ser usado para relatar o status de uma operação em andamento ou para excluir a linha de execuções futuras.
  • Manipulador de falhas - Uma regra CRUD do banco de dados que atualiza a linha de origem da ação para indicar que a linha falhou. A regra CRUD do banco de dados usaria o event('rowid') função para registrar o identificador da linha.

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