Atualizando informações através da MsExecAuto – Maratona AdvPL e TL++ 360

Nesse vídeo demonstraremos a utilização da função MsExecAuto, que serve para executar automaticamente alguma rotina do ERP, dessa forma incluindo, alterando ou excluindo informações.

Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function zExe360
Executa uma rotina de forma automática
@type Function
@author Atilio
@since 26/03/2023
@see https://tdn.totvs.com/pages/releaseview.action?pageId=566489232
@obs 
    Função MsExecAuto
    Parâmetros
        + Bloco de código que será executado
        + Parâmetros (1 a 15) que serão passados na rotina
    Retorno
        Função não tem Retorno

    **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao ****
/*/

User Function zExe360()
    Local aArea         := FWGetArea()
    Local aDados        := {}
    Local lAutomatico   := IsBlind()
    Local cPastaErro := '\x_logs\'
	Local cNomeErro  := ''
	Local cTextoErro := ''
	Local aLogErro   := {}
	Local nLinhaErro := 0
    Private lMsErroAuto := .F.

    //Se for automático sem tela, declara outras variáveis para não exibir a tela
    If lAutomatico
        Private lMSHelpAuto     := .T.
        Private lAutoErrNoFile  := .T.
    EndIf

    //Adiciona os campos
    aAdd(aDados, {"B1_COD",    "F0001",   Nil})
    aAdd(aDados, {"B1_DESC",   "Teste",   Nil})
    aAdd(aDados, {"B1_TIPO",   "PA",      Nil})
    aAdd(aDados, {"B1_UM",     "KG",      Nil})
    aAdd(aDados, {"B1_LOCPAD", "01",      Nil})
    aAdd(aDados, {"B1_GRUPO",  "G001",    Nil})

    //Chama a inclusão
    MsExecAuto({|x, y| MATA010(x, y)}, aDados, 3)

    //Se houve erro, mostra a mensagem
    If lMsErroAuto
        //Se for automático, irá gravar o log dentro da Protheus Data
        If lAutomatico
            cPastaErro := '\x_logs\'
            cNomeErro  := 'erro_sb1_' + dToS(Date()) + '_' + StrTran(Time(), ':', '-') + '.txt'

            //Se a pasta de erro não existir, cria ela
            If ! ExistDir(cPastaErro)
                MakeDir(cPastaErro)
            EndIf

            //Pegando log do ExecAuto, percorrendo e incrementando o texto
            aLogErro := GetAutoGRLog()
            For nLinhaErro := 1 To Len(aLogErro)
                cTextoErro += aLogErro[nLinhaErro] + CRLF
            Next

            //Criando o arquivo txt e incrementa o log
            MemoWrite(cPastaErro + cNomeErro, cTextoErro)

        //Senão, exibe a tela de erro
        Else
            MostraErro()
        EndIf

    Else
        FWAlertSuccess("Produto incluido com sucesso", "Sucesso no ExecAuto")
    EndIf

    FWRestArea(aArea)
Return

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação