Páginas filhas
  • Variáveis de Controle - MsExecAuto

Variáveis de controle utilizadas na funcionalidade MsExecAuto que permite a execução de Rotinas Automáticas no Protheus. 

VariáveisDefinição
lMsErroAutoIndica de se houve erro não fatal durante a execução.
lMsHelpAutoHabilita a captura das mensagens de erro.
lAutoErrNoFileDesabilita 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:

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
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:

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.


#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
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.