Error handling
O manejo de erros é o processo de antecipar e responder aos erros que possam ocorrer em sua aplicação. 4D oferece assistência completa à detecção e notificação de erros no tempo de execução, assim como a análise de suas condições.
Manejo de erros responde à duas necessidades principais:
- descobrir e consertar erros potenciais e bugs no código durante a fase de desenvolvimento,
- detectar e recuperar de erros inesperados nas aplicações implementadas; em particular pode substituir diálogos de erros de sistemas (disco cheio, arquivo faltando, etc) com sua própria interface.
É recomendado instalar um método de gerenciamento de erros em 4D Server, para todos os códigos rodando no servidor. Esse método evitaria a aparição de caixas de diálogo inesperadas no servidor e poderia registrar os erros em um arquivo especifico para sua análise posterior.
Error or status
Many 4D class functions, such as entity.save()
or transporter.send()
, return a status object. This object is used to store "predictable" errors in the runtime context, e.g. invalid password, locked entity, etc., that do not stop program execution. This category of errors can be handled by regular code.
Other "unpredictable" errors include disk write error, network failure, or in general any unexpected interruption. This category of errors generates exceptions and needs to be handled through an error-handling method.
Instalação de um método de gestão de erros
In 4D, all errors can be caught and handled in a specific project method, the error-handling (or error-catching) method.
Este método projeto se instala para o processo atual e será chamado automaticamente para qualquer erro que se produza no processo, em modo interpretado ou compilado. Para instalar este método projeto, basta com chamar ao comando ON ERR CALL
com o nome do método projeto como parâmetro. Por exemplo:
ON ERR CALL("IO_ERRORS") //Instala o método de gestão de erros
Para deixar de detectar erros e devolver o controle a 4D, chame a ON ERR CALL
com uma string vazia:
ON ERR CALL("") //devolve o controle a 4D
The Method called on error
command allows you to know the name of the method installed by ON ERR CALL
for the current process. It is particularly useful in the context of generic code because it enables you to temporarily change and then restore the error-catching method:
$methCurrent:=Method called on error
ON ERR CALL("NewMethod")
//Se o documento não pouder ser aberto, um erro é gerado
$ref:=Open document("MyDocument")
//Reinstalação do método anterior
ON ERR CALL($methCurrent)
Alcance e componentes
Pode definir um único método de captura de erros para toda a aplicação ou diferentes métodos por módulo de aplicação. Entretanto, apenas um método pode ser instalado por processo.
An error-handling method installed by the ON ERR CALL
command only applies to the running application. In the case of an error generated by a component, the ON ERR CALL
error-handling method of the host application is not called, and vice versa.
Manejo de erros dentro do método
Within the custom error method, you have access to several pieces of information that will help you identifying the error:
variáveis sistema (*):
Error
(inteiro longo): código de erroError method
(texto): nome do método que provocou o erroError line
(entero largo): número de línea do método que provocou o erroError formula
(text): fórmula do código 4D (texto bruto) que está na origem do erro.
(*) 4D mantém automaticamente uma série de variáveis chamadas variáveis sistema, que respondem a diferentes necessidades. Consulte o Manual da linguagem de 4D.
- o comando
GET LAST ERROR STACK
que devolve informação sobre a pilha de erros atual da aplicação 4D. - o comando
Get call chain
que devolve uma coleção de objetos que descrevem cada passo da string de chamadas a métodos dentro do processo atual.
Exemplo
Aqui está um sistema de gestão de erros simples:
//instalar o método de gestão de erros
ON ERR CALL("errorMethod")
//... executar o código
ON ERR CALL("") //retorna o controle para 4D
// método projeto errorMethod
If(Error#1006) //essa não é uma interrupção do usuário
ALERT("Um erro foi produzido "+String(Error)+". O código em questão é: \""+Error formula+"\"")
End if
Utilizar um método de gestão de erro vazio
Se quiser que a caixa de diálogo fique escondida, pode instalar um método de gestão de erros vazio. A variável sistema Error
pode ser provada em qualquer método, ou seja, fora do método de gestão de erros:
ON ERR CALL("emptyMethod") //emptyMethod existe mas está vazio
$doc:=Open document( "myFile.txt")
If (Error=-43)
ALERT("File not found.")
End if
ON ERR CALL("")