Apanhar erros em todo o lado

Tradução automática de Deepl

A gestão de erros é frequentemente uma parte constrangedora do desenvolvimento em todas as línguas. Em 4D, se se esquecer de chamar um método de tratamento de erros num novo processo/trabalhador ou usar componentes que não lidam com erros, o diálogo de erro 4D incorporado pode aparecer ao utilizador final. Os programadores 4D gostariam de apanhar todos os erros em todos os contextos para evitar a exibição deste diálogo de erros 4D incorporado.

Vamos ver como podemos gerir este comportamento com o 4D v19 R8.

Demonstração de Tratamento de Erros

Gestor global de erros

Até agora, a melhor prática para lidar com erros num contexto de execução era utilizar o ON ERR CALL e passar o manipulador do método como um parâmetro. No entanto, este método de erro foi chamado apenas no contexto do processo actual.
A partir de 4D v19 R8, também se pode definir um manipulador de erros global que será eficiente para todos os contextos de execução. Se se esquecer de definir um manipulador de erros local num novo processo/trabalhador, o manipulador de erros global será invocado automaticamente. Assim, para salvar a sua aplicação, pode definir o seu manipulador de erros global no método de base de dados On Startup, por exemplo.

ON ERR CALL("myGlobalErrorHandler"; ek global)

A aprovação de um método de erro a ser chamado no processo actual ainda é eficiente. Renomeámo-lo de ” manipulador de erros local”.

ON ERR CALL("myLocalErrorHandler")
// equivalent to:
ON ERR CALL("myLocalErrorHandler"; ek local)

Note que o manipulador de erros local ainda é invocado se definido, mesmo que seja definido um manipulador de erros global, pelo que os seus manipuladores de erros locais definidos funcionarão como habitualmente. O manipulador de erro global só é invocado se não estiver definido um manipulador de erro local no contexto de execução actual.

Funções ORDA e atributos computados no Servidor 4D

Como deve saber, quando uma função ORDA ou atributo computorizado é utilizado numa aplicação cliente, é executado no lado do Servidor 4D. Assim, se estas funções ou atributos computados não definirem um manipulador de erros local e lançarem erros, o diálogo de erro 4D incorporado é exibido no Servidor 4D quando não executado sem cabeça.
Para evitar isso, é agora possível definir um manipulador de erros global no lado do servidor no método de base de dados On Server Startup por exemplo:

ON ERR CALL("myServerGlobalErrorHandler"; ek global)

Componentes

Como desenvolvedor de componentes, é agora mais fácil para si lidar com erros. Basta definir o seu manipulador de erros global no método On Host Database Event database database (por exemplo, no On antes do evento de arranque da base de dados anfitriã ) para garantir que nenhum erro exibirá o diálogo de erro 4D incorporado na base de dados anfitriã! Ao fazer isto, todos os erros gerados pelo componente chamarão o manipulador de erros global do componente sem quaisquer efeitos secundários na base de dados anfitriã.

Como utilizador do componente, pode tornar a sua aplicação mais segura ao lidar com erros do componente que não tenham sido apanhados no contexto de execução do componente. Fazendo isto, se utilizar componentes que não gerem correctamente os seus próprios erros, poderá geri-los, e não aparecerá mais diálogo de erro 4D incorporado. Para instalar um método manipulador de erros de componentes, basta usar o parâmetro correspondente desta forma:

ON ERR CALL("myComponentErrorHandler"; ek errors from components)

Este é também um manipulador de erros global, mas dedicado a erros não detectados por componentes, para que possa desenvolver coisas específicas para estes. Basta notar que as variáveis do sistema de erros(erro, método de erro, linha de erro e fórmula de erro) não estão disponíveis neste manipulador de erros de componentes, porque os erros passam a provir de outro contexto de execução. Mas a pilha de erros ainda está disponível.

COMPORTAMENTOS COMUNS

Pilha de erros

Introduzimos também um novo comando para obter toda a pilha de erros: Last errors. Este comando devolve uma colecção onde cada item é um erro de toda a pilha, cada erro contendo informação sobre o número do erro, a mensagem, e a assinatura da componente interna.

Obtenção do manipulador de erros actual

O Method called on the error admite agora um parâmetro opcional para recuperar o manipulador de erros global e o manipulador de erros componente, como nesta amostra:

$localHandler:=Method called on error
$globalHandler:=Method called on error(ek global)
$componentHandler:=Method called on error(ek errors from component)

Erro de abortamento

Não importa qual o manipulador que é executado, o ABORT é sempre prático e permite interromper o código como de costume.

Pode testar todos estes novos comportamentos com o HDI acima.

Avatar
• Proprietário do produto - Damien Fuzeau entrou ao time 4D Product em fevereiro de 2019. Como Proprietário do Produto, está a cargo de escrever as histórias dos usuários e depois traduzi-las em especificações funcionais. Seu papel também é garantir que a implementação da funcionalidade entregue cumpra com as necessidades do cliente. Damien é formado em engenharia de software pela Universidade de Nantes. Trabalhou mais de 23 anos em sua empresa anterior, primeiro como desenvolvedor (descobrindo 4D em 1997), e mais tarde como gerente de engenharia e arquiteto de software. Essa empresa é um Partner OEM de 4D e lançou softwares empresariais baseados em 4D para milhares de usuários em centenas de servidores. Portanto Damien está acostumado ao desenvolvimento e lançamento de 4D em contextos multilinguais.