Importante uso do errorblock quando não é aceitável que um determinado processamento gere um erro não amigável ao usuário ou quando o processamento é executado por job ou numa thread, e é necessário tratar o erro, seja anotando para uma futura ação ou para ser logado em algum lugar, como, por exemplo, no console do Protheus.

 

 

Essa função ErrorBlock define a atuação de um manipulador (handler) de erros sempre que ocorrer um erro em tempo de execução. Para isso, o manipulador de erro, é especificado com um bloco de código da seguinte forma:

{ |<objError>| <lista de expressoes>, ...}

 

Sendo:

<objError> é um error object que contém informações sobre o erro. Dentro do bloco de código, é possível enviar mensagens ao error object para obter informações sobre o erro. Porém, se o bloco de tratamento de erros retornar verdadeiro (.T.), a operação que falhou é repetida; caso contrário, falso (.F.), o processamento recomeçará.

Se não for especificado nenhum bloco de código, no parâmetro em <bErrorHandler>, utilizando a função ErrorBlock(), e ocorrer um erro em tempo de execução, o bloco de tratamento de erros padrão é avaliado. Este manipulador de erros exibirá uma mensagem descritiva na tela, ajusta a função ErrorLevel para 1, e depois sairá do programa (QUIT).

Como essa função retorna o bloco de tratamento ao de erros corrente, é possível especificar um bloco de tratamento de erros para uma operação gravando-se o bloco de manipulação de erros correntes e depois o recuperando após o final da operação. Além disso, uma importante consequência do fato de os blocos de tratamento de erros serem especificados como blocos de código, é que podem ser passados para rotinas e funções definidas por usuário e depois retornadas como valores.

 

Exemplo:

 

// ErrorBlockExample.prw

#INCLUDE "TOTVS.CH"

 

Function ErrorBlockExample()

Local cError      := ""

Local oLastError := ErrorBlock({|e| cError := e:Description + e:ErrorStack})

Local uTemp        := Nil

      

uTemp := "A" + 1

      

ErrorBlock(oLastError)

      

// Anota o erro no console.

ConOut(cError)

 

Return

 

  • Sem rótulos