Pular para o conteúdo principal

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 oErrorTipoConteúdo
descriptionStringDescrição técnica do erro
errorstackStringStack trace completo
severityNumericNível de severidade
genCodeNumericCódigo de erro AdvPL
operationStringOperação que falhou
errorenvStringEspelho do ambiente no momento do erro

Retorno: Nil (sem retorno obrigatório).

Comportamento importante

  1. 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.
  2. HTTP 500 padrão — se você não alterar status nem corpo, o framework garante resposta 500 ao cliente.
  3. 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