Clodoaldo,
Em ADVPL costumamos utilizar do Begin Sequence
em conjunto com o ErrorBlock
para proteção de erros, veja abaixo um exemplo:
#include "protheus.ch"
//-----------------------------------------------------------
/*/{Protheus.doc} deuRuim
Exemplo de proteção de erro simples, apenas protegendo o erro
@author Daniel Mendes
@since 01/04/2021
@version 1.0
/*/
//-----------------------------------------------------------
user function deuRuim()
local cString as char
local bError as block
cString := ""
bError := ErrorBlock({|oError| Break(oError)})
begin sequence
if cString == 1
endif
end sequence
ErrorBlock(bError)
return
//-----------------------------------------------------------
/*/{Protheus.doc} verErro
Exemplo de proteção de erro usando o objeto de erro
@author Daniel Mendes
@since 01/04/2021
@version 1.0
/*/
//-----------------------------------------------------------
user function verErro()
local cString as char
local bError as block
local cError as char
cString := ""
//Também é possível usar a propriedade ErrorStack, que traz a pilha do erro
bError := ErrorBlock({|oError| cError := oError:Description})
begin sequence
if cString == 1
endif
end sequence
ErrorBlock(bError)
if !Empty(cError)
ConErr(cError)
endif
return
Obs.: Nem todos os erros podem ser capturados, alguns geram exceção a nível binário.
Documentações:
https://tdn.totvs.com/pages/viewpage.action?pageId=23888930
https://tdn.totvs.com/display/tec/ErrorBlock
https://tdn.totvs.com/display/framework/BEGIN+SEQUENCE+...+END
Para binários mais recentes, em TLPP, já existe o try/catch
:
https://tdn.totvs.com/display/tec/Try...Catch
Obs.: Fique atento a versão do binário, é um recurso bem recente.