FAQs - Suporte técnico

MP - ADVPL - FINAL() GERA EXCEÇÃO

OCORRÊNCIA
Ao utilizar uma rotina automática (aplica-se também a outras funções) que gere uma exceção com a função Final(), o sistema está sendo encerrado ao invés de gerar um Help().

AMBIENTE
Protheus – ADVPL – A partir da versão 12.1.17

CAUSA
Algumas rotinas, funções e métodos tratam a geração de mensagens de erro utilizando a função Final(), contudo, esta tratativa pode gerar erros se utilizada em jobs ou serviços web.

A utilização da Final() prevê o encerramento total da thread de forma a manter a integridade dos dados nela envolvidos (ROLLBACK total da transação).

SOLUÇÃO
Utilizar os pseudocomandos BEGIN SEQUENCE e END SEQUENCE em conjunto com as funções ErrorBlock() ou SysErrorBlock() em sua customização.

EXEMPLO
Sem tratamento de erro:

// BIBLIOTECAS NECESSÁRIAS
#Include "TOTVS.ch"

//-------------------------------------------------------
// EXCEÇÃO SEM TRATAMENTO DE ERRO EM FINAL()
//-------------------------------------------------------
User Function T202AFINAL()
// PREPARAÇÃO DE AMBIENTE EM CASO DE ESTADO DE JOB
If (!IsBlind())
RPCSetEnv("99", "01")
EndIf

// GERA EXCEÇÃO
Final("Encerramento normal")

// ENCERRAMENTO DE AMBIENTE EM CASO DE ESTADO DE JOB
If (!IsBlind())
RPCClearEnv()
EndIf
Return (NIL)

Com tratamento de erro:
// BIBLIOTECAS NECESSÁRIAS
#Include "TOTVS.ch"

//-------------------------------------------------------
// TRATAMENTO DE EXCEÇÃO UTILIZANDO FINAL()
// DENTRO DE BEGIN SEQUENCE
//-------------------------------------------------------

User Function T202BFINAL()
Local bError As CodeBlock// TRATAMENTO DE ERRO
    Local cError As Character // MENSAGEM DE ERRO

// PREPARAÇÃO DE AMBIENTE EM CASO DE ESTADO DE JOB
If (!IsBlind())
RPCSetEnv("99", "01")
EndIf

// INICIALIZAÇÃO DE VARIÁVEIS
    cError := Space(0)
    bError := ErrorBlock({|oError| cError := oError:Description})

// INÍCIO DA SEQUÊNCIA COM FINAL()
BEGIN SEQUENCE
Final("Encerramento normal")
END SEQUENCE

// TRANSFERE OERROR:DESCRIPTION PARA CERROR
    ErrorBlock(bError)

// VALIDAÇÃO DE ERRO
If (!Empty(cError))
ConOut(Repl("-", 80))
ConOut(PadC("Error: " + AllTrim(cError), 80))
ConOut(Repl("-", 80))
EndIf

// ENCERRAMENTO DE AMBIENTE EM CASO DE ESTADO DE JOB
If (!IsBlind())
RPCClearEnv()
EndIf
Return (NIL)

SAIBA MAIS
CONTROLE DE ERRO - TECNOLOGIA
Esse artigo foi útil?
Usuários que acharam isso útil: 0 de 0

0 Comentários

Por favor, entre para comentar.
X Fechar

Olá ,

Há pendência referente a um de seus produtos contratados para a empresa ().

Entre em contato com o Centro de Serviços TOTVS para tratativa.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cobrança – Verificação de pendências financeiras . clique aqui.

TOTVS

X Fechar

Olá ,

Seu contato não está cadastrado no Portal do Cliente como um perfil autorizado a solicitar consultoria telefônica.

Por gentileza, acione o administrador do Portal de sua empresa para: (1)configurar o seu acesso ou (2)buscar um perfil autorizado para registro desse atendimento.

Em caso de dúvidas sobre a identificação do contato administrador do Portal, ligue (11) 4003-0015, opção 7 e, em seguida, opção 4 para buscar o suporte com o time de Assessoria ao Portal do Cliente. . clique aqui.

TOTVS

X Fechar

Olá ,

Para o atendimento de "Consultoria Telefônica" você deverá estar de acordo com o Faturamento.

TOTVS

X Fechar

Olá,

Algo inesperado ocorreu, e o usuario nao foi reconhecido ou você nao se encontra logado

Por favor realize um novo login

Em caso de dúvidas, entre em contato com o administrador do Portal de Clientes de sua empresa para verificação do seu usuário, ou Centro de Serviços TOTVS.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cadastros . clique aqui.

TOTVS

Chat _

Preencha os campos abaixo para iniciar o atendimento:

Chat _