Uso do MSExecAuto

Olá Pessoal,

Encontrei esse material bem legal na net, para quem esta iniciando no ADVPL,

Objetivo
Fazer manutenção automática (inclusão, alteração e exclusão) das rotinas de manipulação de dados do sistema, automatizando o processo de entrada de dados sem a necessidade de desenvolver rotinas especificas.

Aplicação
Esta tecnica é aplicada em todas as versões Protheus.

Vantagens
1) Interface : Os dados de entrada são enviados a rotina em forma de campos e conteudos (array) e desta forma não é necessario a apresentação de nenhuma inteface ao usuário.
2) Segurança : A utilização de rotinas automáticas aumenta consideravelmente a segurança do sistema, uma vez que utiliza as validações padrões e diminui os problemas causados por atualização de versão ou inclusão de customizações nas rotinas padrões do sistema.
3) Agilidade no processo : Aumenta consideravemente o tempo de desenvolvimento das customizações que necessitam de entrada de dados. Exemplo: Importação de pedido de venda.

Procedimentos

Existem duas maneiras de utilizar a rotina automatica, sendo elas:

1. Sem Interface
2. Com Interface

Para a utilizacao da rotina automatica sem interface deve-se, configurar o ambiente utilizando-se o comando PREPARE ENVIRONMENT e chamar diretamente o nome da função.

Exemplo:

User Function IncProd()
    Local aRotAuto := {}
    Local nOpc := 3 // inclusao
    Private lMsHelpAuto := .t. // se .t. direciona as mensagens     de help para o arq. de log
    Private lMsErroAuto := .f. // necessario a criacao, pois sera     //atualizado quando houver
    // alguma incosistencia nos parametros
    PREPARE ENVIRONMENT EMPRESA '99' FILIAL '01' MODULO    'FAT'
Begin Transaction
aRotAuto:= {{'B1_COD' ,'1010' ,Nil},;
{'B1_DESC' ,'Produto teste',Nil},;
{'B1_TIPO' ,'PA' ,Nil},;
{'B1_UM' ,'UN' ,Nil},;
{'B1_LOCPAD' ,'01' ,Nil},;
{'B1_PICM' ,0 ,Nil},;
{'B1_IPI' ,0 ,Nil},;
{'B1_PRV1' ,100 ,Nil},;
{'B1_LOCALIZ' ,'N' ,Nil},;
{'B1_CODBAR' ,'789888800001' ,Nil}}
MSExecAuto({|x,y| mata010(x,y)},aProduto,nOpc)
If lMsErroAuto
DisarmTransaction()
break
EndIf
End Transaction
If lMsErroAuto
/*
Se estiver em uma aplicao normal e ocorrer alguma incosistencia nos parametros
passados,mostrar na tela o log informando qual coluna teve a incosistencia.
*/
Mostraerro()
Return .f.
EndIf
Return .t.

Já para rotinas que possuem interface, devemos usar a MSExecAuto, pois a mesma tem a função de guardar o ambiente , executar a função automatica e retornar de onde parou.

Exemplo:

User Function IncProd()
Local aRotAuto := {}
Local nOpc := 3 // inclusao
Private lMsHelpAuto := .t. // se .t. direciona as mensagens de help para o arq. de log
Private lMsErroAuto := .f. //necessario a criacao, pois sera //atualizado quando houver
//alguma incosistencia nos parametros
Begin Transaction
aRotAuto:= {{'B1_COD' ,'1010' ,Nil},;
{'B1_DESC' ,'Produto teste',Nil},;
{'B1_TIPO' ,'PA' ,Nil},;
{'B1_UM' ,'UN' ,Nil},;
{'B1_LOCPAD' ,'01' ,Nil},;
{'B1_PICM' ,0 ,Nil},;
{'B1_IPI' ,0 ,Nil},;
{'B1_PRV1' ,100 ,Nil},;
{'B1_LOCALIZ' ,'N' ,Nil},;
{'B1_CODBAR' ,'789888800001' ,Nil}}
MSExecAuto({|x,y| mata010(x,y)},aProduto,nOpc)
If lMsErroAuto
DisarmTransaction()
break
EndIf
End Transaction
If lMsErroAuto
/*
Se estiver em uma aplicao normal e ocorrer alguma incosistencia nos parametros
passados,mostrar na tela o log informando qual coluna teve a incosistencia.
*/
Mostraerro()
Return .f.
EndIf
Return .t.

Fonte: http://advpl.inovese.com



0 Comments

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="">

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.