Ajude o site desativando o bloqueador de anúncio
Cabeçalho

ADVPL - Como ler o erro do execauto?

Autor: Eurai Criado: 14/08/2021 Atualizado: 15/11/2025 ADVPL
Postagem

Como Ler Erros Após o ExecAuto no Protheus (ADVPL)

Neste artigo venho compartilhar algumas formas de realizar a leitura dos erros após a execução do execauto.

É de conhecimento geral dos desenvolvedores ADVPL que toda execução do MsExecAuto exige a declaração da variável lMsErroAuto como private. Após a execução, caso ocorra qualquer erro, essa variável receberá o valor .T.. Usando funções auxiliares, podemos capturar e analisar o erro retornado.

Existem situações em que lMsErroAuto fica como .T., porém o erro retornado é vazio. Isso normalmente ocorre devido a gatilhos (pontos de entrada) sem tratamento adequado, principalmente quando utilizam funções que não respeitam o controle de erros do ExecAuto, como Alert / MsgAlert e similares.

Também é muito comum encontrar rotinas sem diferenciação adequada entre ExecAuto, tela, job, etc., o que prejudica a análise dos erros.

Bora ao ExecAuto! 🚀

Exemplo 01 — Utilizando MostraErro()

Este é o método mais comum e simples para exibir erros após o ExecAuto.

lMsErroAuto := .F.
MsExecAuto( {|UD,ER,AM| MATA410(UD,ER,AM) }, aSC5, aSC6, 5)

If lMsErroAuto
   // DEU ERRO
   MostraErro()
Else
   // SUCESSO
Endif

Exemplo 02 — Lendo o Log Diretamente com MemoRead()

Aqui obtemos o nome do arquivo de log e lemos seu conteúdo diretamente.

lMsErroAuto := .F.
MsExecAuto( {|UD,ER,AM| MATA410(UD,ER,AM) }, aSC5, aSC6, 5)

If lMsErroAuto
   // DEU ERRO
   MemoRead( AllTrim( NomeAutoLog() ) )  // Lê o conteúdo do log
Else
   // SUCESSO
Endif

Exemplo 03 — Capturando o Erro Via Array com GetAutoGRLog()

Nesse caso, a leitura do erro ocorre por meio de um array, permitindo tratamentos mais específicos.

Não esqueça de declarar a variável lAutoErrNoFile := .T. como private.

lAutoErrNoFile := .T.
lMsErroAuto    := .F.

MsExecAuto( {|UDESENV,UNIVERSO,DESENVOLVEDOR| MATA410(UDESENV,UNIVERSO,DESENVOLVEDOR) }, aSC5, aSC6, 5)

If lMsErroAuto
   // DEU ERRO
   aRet := GetAutoGRLog()
Else
   // SUCESSO
Endif

Complementos Importantes

Se as customizações não possuem tratamentos corretos, todos os métodos acima podem retornar vazio. Já encontrei casos em que até erros padrão não eram tratados adequadamente (não é o caso do sigahelp).

Em determinadas situações, é possível utilizar a função FWGetUltHlp() para tentar identificar a última mensagem de erro. Embora não tenha sido criada especificamente para o ExecAuto, pode ajudar em diagnósticos.

Para limpar o help, basta usar a função FWClearHlp().

Finalizando

Gostou do conteúdo? Compartilhe com seus amigos e deixe um comentário! 😎

Um abraço, e até a próxima!

ASSINE A NEWSLETTER

Cadastrando...

PIX uDesenv

PIX QR Code para depósito

Clique para doar

Parceiros

Tudo em ADVPL - Blog parceiro

Blog ADVPL