Vídeo Aula – AdvPL 024 – Rotinas Automáticas em MVC

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.

Dan Atilio (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

4 Responses

  1. Felipe disse:

    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

    • Dan_Atilio disse:

      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.

  2. CAIO MAIOR GARCIA disse:

    Eu consigo gerar uma rotina automatica para qualquer rotina em MVC da TOTVS? Ou ela tem que estar preparada para isso?

Deixe uma resposta