Variáveis de controle utilizadas na funcionalidade MsExecAuto que permite a execução de Rotinas Automáticas no Protheus.
Variáveis | Definição |
---|
lMsErroAuto | Indica de se houve erro não fatal durante a execução. |
lMsHelpAuto | Habilita a captura das mensagens de erro. |
lAutoErrNoFile | Desabilita a geração do arquivo de log padrão do sistema. |
...
Tratamento de mensagens de erro
Visualização do evento de erro
Para visualização em tela do evento de erro ocorrido durante o processamento da rotina via MsExecAuto deve-se utilizar a função MostraErro(), conforme o exemplo:
Bloco de código |
---|
language | text |
---|
linenumbers | true |
---|
|
Private lMsHelpAuto := .T.
Private lAutoErrNoFile := .F.
AADD(xAutoCab,{“A1_FILIAL” , xFilial(“SA1”) , Nil})
AADD(xAutoCab,{“A1_COD” , “000001” , Nil})
AADD(xAutoCab,{“A1_LOJA” , “01” , Nil})
AADD(xAutoCab,{“A1_NOME” , “TESTE-000001” , Nil})
BEGIN TRANSACTION
lMsErroAuto := .F.
MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)
IF lMsErroAuto
MostraErro()
DisarmTransaction()
ENDIF
END TRANSACTION |
Informações |
---|
O conteúdo das variáveis PRIVATE de controle da MsExecAuto deve ser configurado conforme abaixo: Private lMsHelpAuto := .T. Private lAutoErrNoFile := .F. |
Gravação do evento de erro em arquivo texto
Para gravação em arquivo no formato texto do evento de erro ocorrido durante o processamento da rotina via MsExecAuto deve-se utilizar a função MostraErro(), conforme o exemplo:
Bloco de código |
---|
language | text |
---|
linenumbers | true |
---|
|
Private lMsHelpAuto := .T.
Private lAutoErrNoFile := .F.
AADD(xAutoCab,{“A1_FILIAL” , xFilial(“SA1”) , Nil})
AADD(xAutoCab,{“A1_COD” , “000001” , Nil})
AADD(xAutoCab,{“A1_LOJA” , “01” , Nil})
AADD(xAutoCab,{“A1_NOME” , “TESTE-000001” , Nil})
BEGIN TRANSACTION
lMsErroAuto := .F.
MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)
IF lMsErroAuto
MostraErro(“\system\”)
DisarmTransaction()
ENDIF
END TRANSACTION |
Personalização da gravação do evento de erro
Para processamentos mais volumosos, a geração de diversos arquivos de textos ou até mesmo a geração de um único arquivo texto contendo todos os eventos de erro pode dificultar a análise e correção dos problemas encontrados durante o processamento.
Desta forma é possível personalizar a gravação do evento de erro, de forma que o mesmo seja gerado em um arquivo de log, permitindo o vínculo do registro processado com a mensagem de erro gerada.
Bloco de código |
---|
language | text |
---|
linenumbers | true |
---|
|
#include "rwmake.ch"
#include "tbiconn.ch"
User Function GravaErro()
Local nX := 0Local
nCount := 0 Local
cLogFile := ""
//nome do arquivo de log a ser gravado
Local aLog := {}
Local aVetor := {}
Local nHandle
Local lRet := .F.
// variável de controle interno da rotina automática que informa se houve erro durante o processamento.
PRIVATE lMsErroAuto := .F.
// variável que define que o help deve ser gravado no arquivo de log e que as informações estão vindo à partir da rotina automática.
Private lMsHelpAuto := .T.
// força a gravação das informações de erro em array para manipulação da gravação.
Private lAutoErrNoFile := .T.
Prepare Environment Empresa "01" Filial "01" Modulo "FAT"
//+------------------------- -------------------------------------+
//| Teste de Inclusao |
//+------------------------------------- -------------------------+
For nCount := 1 To 3
aVetor:= {{"B1_COD", "99"+Alltrim(Str(nCount)), Nil},;
{"B1_DESC" ,"Teste" ,Nil},;
{"B1_UM" ,"UN" ,Nil},;
{"B1_LOCPAD" ,"01" ,Nil}}
lMsErroAuto := .F.
lRet := .F.
AutoGrLog("Teste de geração do arquivo de log "+Alltrim(Str(nCount)))
AutoGrLog("")
MSExecAuto( {|x,y| MATA010(x, y) }, aVetor, 3 )
AutoGrLog(Replicate("-", 20))
If lMsErroAuto
cLogFile := "C:\TESTE"+Alltrim(Str(nCount))+".LOG"
//função que retorna as informações de erro ocorridos durante o processo da rotina automática
aLog := GetAutoGRLog()
//efetua o tratamento para validar se o arquivo de log já existe
If !File(cLogFile)
If (nHandle := MSFCreate(cLogFile,0)) <> -1
lRet := .T.
EndIf
Else
If (nHandle := FOpen(cLogFile,2)) <> -1
FSeek(nHandle,0,2)
lRet := .T.
EndIf
EndIf
If lRet
//grava as informações de log no arquivo especificado
For nX := 1 To Len(aLog)
FWrite(nHandle,aLog[nX]+CHR(13)+CHR(10))
Next nX
FClose(nHandle)
EndIf
EndIf
Next
If !lMsErroAuto
ConOut("Incluido com sucesso! ")
Else
ConOut("Erro na inclusao !")
EndIf
Return |
Informações |
---|
A função GetAutoGrLog() retorna um array com os erros que foram gerados durante a execução da rotina automática. Pode ser utilizada caso o desenvolvedor deseje realizar o seu próprio tratamento de erros, como por exemplo, a gravação de logs específicos para cada rotina. |