Olá pessoal…
Na aula de hoje vou mostrar como executar rotinas automáticas em MVC com FWExecView e FWMVCRotAuto.
Abaixo o código fonte de exemplo da FWExecView.
//Bibliotecas
#Include 'Protheus.ch'
#Include 'FWMVCDef.ch'
/*/{Protheus.doc} zExecView
Função de teste que demonstra o funcionamento da FWExecView
@type function
@author Atilio
@since 24/10/2016
@version 1.0
@example
u_zExecView()
@obs Se a rotina tiver grid, provavelmente será necessário declarar a variável "n" como private
/*/
User Function zExecView()
Local aArea := GetArea()
Local cFunBkp := FunName()
DbSelectArea('ZZ1')
ZZ1->(DbSetOrder(1)) //Filial + Código
//Se conseguir posicionar
If ZZ1->(DbSeek(FWxFilial('ZZ1') + "000002"))
SetFunName("zModel1")
FWExecView('Visualizacao Teste', 'zModel1', MODEL_OPERATION_VIEW)
SetFunName(cFunBkp)
EndIf
RestArea(aArea)
Return
Abaixo o código fonte de exemplo da FWMVCRotAuto.
//Bibliotecas
#Include 'Protheus.ch'
#Include 'FWMVCDef.ch'
/*/{Protheus.doc} zRotAuto
Exemplo de ExecAuto utilizando MVC (inclusão na ZZ1)
@type function
@author Atilio
@since 24/10/2016
@version 1.0
@example
u_zRotAuto()
/*/
User Function zRotAuto()
Local aArea := GetArea()
Local aDados := {}
Private aRotina := StaticCall(zModel1, MenuDef)
Private oModel := StaticCall(zModel1, ModelDef)
Private lMsErroAuto := .F.
//Adicionando os dados do ExecAuto
aAdd(aDados, {"ZZ1_DESC", "ROT AUTO", Nil})
//Chamando a inclusão - Modelo 1
lMsErroAuto := .F.
FWMVCRotAuto( oModel,; //Model
"ZZ1",; //Alias
MODEL_OPERATION_INSERT,; //Operacao
{{"FORMZZ1", aDados}}) //Dados
//Se tiver mais de um Form, deve se passar dessa forma:
// {{"ZZ2MASTER", aAutoCab}, {"ZZ3DETAIL", aAutoItens}})
//Se houve erro no ExecAuto, mostra mensagem
If lMsErroAuto
MostraErro()
//Senão, mostra uma mensagem de inclusão
Else
MsgInfo("Registro incluido!", "Atenção")
EndIf
RestArea(aArea)
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Boa tarde!
Cara tentei fazer da mesma maneira que foi indicada por você, porém está gerando um errorlog.
(argumento #0 , parâmetro oObj erro, previsto O->U on FWFORMVIEW:SETMODEL(FWFORMVIEW.PRW) 12/07/2019 17:27:31 line : 715)
Estou passando o nome do Fonte certinho, porém não funciona na hora de invoca-lo.
(
SetFunName(“TEST”)
FWExecView(‘Visualizacao Teste’, ‘TEST’, MODEL_OPERATION_UPDATE)
SetFunName(cFunBkp)
)
TEST.PRW => É o nome do fonte com os construtores MVC
Boa tarde Felipe.
No caso, a sua user function também se chama TEST? Pois o SetFunName deixa o nome da função, mas as vezes o prw tem um nome e a user function tem outro.
Fico no aguardo.
Eu consigo gerar uma rotina automatica para qualquer rotina em MVC da TOTVS? Ou ela tem que estar preparada para isso?
Creio eu que, mais de 90% de funções MVC da TOTVS você consegue usar o ExecAuto.
Só pelo fato de ter ModelDef e ViewDef você já consegue executar de maneira automática.