Olá pessoal…
Na vídeo aula de hoje, vou falar um pouco sobre gravação de registros rotinas automáticas (MsExecAuto) e Controle de transações.
Abaixo o código fonte utilizado para os testes:
//Bibliotecas #Include "Protheus.ch" #Include "RwMake.ch" #Include "TBIConn.ch" /*/{Protheus.doc} zExecAuto Exemplo de gravação via ExecAuto @author Atilio @since 29/11/2015 @version 1.0 @example u_zExecAuto() /*/ User Function zExecAuto() Local aArea := GetArea() Local aVetor := {} //Variáveis utilizadas pelo ExecAuto (caso queira gravar o log em arquivo texto, utilize as duas variáveis abaixo /*Private lMSHelpAuto := .T. Private lAutoErrNoFile := .T.*/ Private lMsErroAuto := .F. //Adicionando dados no produto para testar inclusão aVetor := {; {"B1_COD", "99999Z", Nil},; {"B1_DESC", "PRODUTO TESTE - ROTINA AUTOMATICA", Nil},; {"B1_TIPO", "P+", Nil},; {"B1_UM", "UN", Nil},; {"B1_LOCPAD", "01", Nil},; {"B1_PICM", 0, Nil},; {"B1_IPI", 0, Nil},; {"B1_CONTRAT", "N", Nil},; {"B1_LOCALIZ", "N", Nil}; } //Iniciando controle de transação Begin Transaction //Chamando o cadastro de produtos de forma automática MSExecAuto({|x,y| Mata010(x,y)},aVetor,3) //Se houve erro If lMsErroAuto //Caso queira gravar o log em arquivo texto, não se deve usar a rotina MostraErro, mas sim o trecho abaixo: /* aLogAuto := {} cLogTxt := "" //Pegando log do ExecAuto aLogAuto := GetAutoGRLog() //Percorrendo o Log For nAux:=1 To Len(aLogAuto) cLogTxt += aLogAuto[nAux] + Chr(13)+Chr(10) Next */ //Mostrando a janela de erro MostraErro() //Disarmando a transação DisarmTransaction() EndIf End Transaction RestArea(aArea) Return
Se quiser fazer o download desse código ou do conteúdo mostrado na vídeo aula, acesse nosso GitHub pelo link github.com/dan-atilio/AdvPL (Exemplos > Vídeo Aulas > 011 – Gravação de Registros via MsExecAuto).
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Parabéns pelo vídeo, ficou bom. Geralmente não ensinam sobre os campos obrigatórios no Execauto e no início quebramos a cabeça.
Boa tarde Diego.
Eu que agradeço.
Se tiver sugestões, pode entrar em contato.
Um grande abraço.
Bom dia Dan_Atilio. Seu post é antigo, mas pra mim foi muito útil. Estou com uma dúvida e se voce puder me responder agradeço. Segue: Há possibilidade de criar um msexecauto entre empresas? No meu caso seria a rotina FINA100 – Transferencia.
Valeu!!!
Boa noite Anizio, tudo bem?
Não entendi muito bem, você quer rodar a FINA100 para todas as empresas? Filiais?
Se sim, você pode criar uma variável com as empresas / filiais (ou usar rotinas padrão, como a FWAllFilial), e depois alterar as variáveis cEmpAnt e cFilAnt (respectivamente Empresa e Filial), lembrando de tomar cuidado de sempre fazer um backup dessas variáveis (pois são variáveis públicas do Protheus).
Abaixo um pequeno exemplo:
Espero ter ajudado.
Um grande abraço.
Que tal Daniel tengo un problema con la msexecauto de la mata 265, me manda error en la fecha y no se porque si asi es como debe ser, el error es el siguiente
(argument #0 error, expected D-C, function dtoc on MSLOGITENS(MATXFUNB.PRX))
La linea la traigo asi:
Aadd(_aItem2, {{“DB_ITEM” ,”0001″ ,NIL},{“DB_LOCALIZ” ,aWBrowse1[nDA][6] ,NIL},{“DB_DATA” ,ddatabase ,NIL},;
{“DB_QUANT” ,Val(aWBrowse1[nDA][7]) ,NIL}})//,{“DB_DOC” ,cDocu ,NIL}})
Agradeceria tu ayuda
Boa noite Shava, tudo bem?
Rapaz, que estranho, ele está dizendo que esperava um tipo Data e recebeu um Caracter.
Tente primeiramente alterar no seu fonte o dDataBase para Date().
Caso o erro continue, por favor, me envie o error log completo para eu dar uma olhada.
Um grande abraço.
Que tal Daniel, tengo la Imagen del Error, podrías proporcionarme tu correo para enviarte el Archivo (Imagen), Saludos
Boa noite Shava, tudo bem?
Está na aba de Contato, lá tem o e-mail.
Abraços.
Olá amigo!
me ajuda numa dúvida?
Dá pra usar o MSExecAuto em uma rotina customizada? Pra explicar, essa rotina usa um MBrowse para gerir uma determinada tabela, então conta com AxInclui, AxAltera, AxExclui, etc… Por exemplo ao incluir, abre a interface com os campos (e seus diversos gatilhos) que salva o registro após clicar em Confirmar.
O que eu penso em fazer é alimentar um array com diversos registros e incluir por lote (automaticamente, de uma só vez). Então a ideia é colocar num laço e mandar cada linha desse array para ser incluído. O mais importante é aproveitar a estrutura de gatilhos já configurado por trás dessa rotina, então enviando os dados, deve-se incluí-lo considerando as interações dos gatilhos. Assim como funciona com o MSExecAuto, entrentanto no meu caso a rotina é customizada.
Alguma ideia?
Grato!
Boa noite Armando, tudo bem?
A maneira mais fácil que eu sei, é você criar o cadastro em MVC, você pode criar um fonte comum em mvc, conforme o link:
https://terminaldeinformacao.com/2016/08/04/vd-advpl-018/
E depois é só você usar a FWMVCRotAuto para criar um registro, que também eu mostro como fazer no link:
https://terminaldeinformacao.com/2017/01/23/vd-advpl-024/
Espero ter ajudado.
Abraços.
Boa tarde Daniel, tudo bem?
Como faço para identificar quais rotinas possuem Execauto ou FWMVCRotAuto?
Exemplo : JURA162 ou JURA095.
Muito Obrigado.
Atenciosamente,
Jorge Miguel
Olá Jorge.
Para identificar se um fonte é MVC, utilize essa função – https://terminaldeinformacao.com/2018/04/24/saiba-como-identificar-se-uma-funcao-e-em-mvc-como-fazer-seu-ponto-de-entrada/
Se o fonte for MVC, logo ele poderá ter o FWMVCRotAuto.
Abraços.
Muito bom rapaz! Parabéns pela iniciativa e muito obrigado!
Opa, eu que agradeço pelo feedback jovem.
Grande abraço.