OnError
O framework já trata falhas de runtime de forma segura. Com OnError configurado, você decide o que gravar em log e o que devolver ao cliente.
Configuração
Configure em [UserExits] no thread pool e/ou nos slaves — erros podem ocorrer em qualquer camada:
[TP_UEX]
OnError=U_onError
[SLAVES_UEX]
OnError=U_onError
Assinatura
Function U_onError( oError As Object )
Propriedade de oError | Tipo | Conteúdo |
|---|---|---|
description | String | Descrição técnica do erro |
errorstack | String | Stack trace completo |
severity | Numeric | Nível de severidade |
genCode | Numeric | Código de erro AdvPL |
operation | String | Operação que falhou |
errorenv | String | Espelho do ambiente no momento do erro |
Retorno: Nil (sem retorno obrigatório).
Comportamento importante
- Console silenciado — com OnError ativo, o erro não é impresso automaticamente no console. Use
ConOut()dentro da sua função se quiser manter o log na tela. - HTTP 500 padrão — se você não alterar status nem corpo, o framework garante resposta 500 ao cliente.
- Mascarar para o cliente — use
oRest:SetFault(json)para devolver uma mensagem amigável sem expor stack trace.
Exemplo
#include "tlpp-core.th"
#include "tlpp-rest.th"
/*
@param oError Objeto com as propriedades e rastreio da falha de runtime
*/
Function U_onError( oError As Object )
Local cCodeTrace := U_getCodeTrace() As Character
Local cFault := '' As Character
// Grava detalhes sensíveis em log interno (não expor ao cliente)
U_TrataErro( cCodeTrace, oError:genCode, oError:description )
// Resposta mascarada para o cliente HTTP
cFault += '{'
cFault += ' "code": "' + cCodeTrace + '",'
cFault += ' "message": "Um erro interno ocorreu, por favor informe o administrador de sistema."'
cFault += '}'
If ( Type('oRest') == 'O' )
oRest:SetFault( cFault )
EndIf
Return Nil
O padrão acima gera um código de rastreio para o cliente (cCodeTrace) e envia os detalhes reais para U_TrataErro(). Para controle avançado de conexão, veja httpCallEnd em Utilitários.
Próximo passo: Avisos e dicas