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