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.
Estou tentando gravar um ExecAuto com a GPEA010 mas estou tendo o seguinte erro:
“Atenção – Usuário sem acesso aos campos necessários ao eSocial, não será possível incluir e alterar funcionários.
Contate o administrador do Sistema.”
Já tentei permissões, usei o usuario admin pra tentar executar e nenhum sucesso, quando faço pelo cadastro consigo gravar normal, mas quando faço por execauto não funciona.
Bom dia Eliezer, tudo joia?
No caso dessa customização do ExecAuto, ela está em qual menu?
Se não estiver no 07 (SIGAGPE), faça um teste adicionando no menu 07 e execute novamente.
Agora se for via JOB por exemplo, no RPCSetEnv, passe o “GPE”, ou se for caso, tente fazer um teste alterando as variáveis nModulo e cModulo para 7 e “GPE” respectivamente.
Tenha uma ótima e abençoada terça feira.
Um forte abraço.
Consegui executar o execauto atravez de uma user function, agora vou partir para a API em si ja que sei que o execAuto esta rodando, acredito que para a API também preciso do RPCSetEnv correto? Agradeço tua atenção, Deus te abençoe
Bom dia Eliezer, Amém meu irmão, tudo joia?
Então, se você já usa a API em REST com o prepareIn, não vai precisar do RPCSetEnv. Pois não é recomendado dar um Clear Env e o Set Env dentro de um endpoint.
Talvez o que você vai precisar, é alterar as variáveis públicas de nModulo (para 7) e cModulo (para “GPE”).
Tenha uma ótima e abençoada quarta feira.
Um forte abraço.