Criar tela em MVC usando TLPP no lugar de AdvPL

No artigo de hoje, vamos mostrar um exemplo de como criar uma tela em MVC usando TLPP.

Pessoal, recentemente a TOTVS lançou uma atualização no TDN, sendo que agora a linguagem TLPP tem suporte a criação de rotinas em MVC.

 

Montamos então um exemplo, resumidamente transformando as funções estáticas em funções de usuário, e ajustando assim onde é acionado o FWLoadModel e o ViewDef para buscar da NameSpace.

 

Segue o link da documentação no TDN: https://tdn.totvs.com/display/public/framework/Suporte+a+TLPP+no+Protheus

 

E abaixo o código fonte desenvolvido:

//Bibliotecas
#Include "tlpp-core.th"
#Include "FWMVCDef.ch"

//Declaração da namespace
Namespace custom.terminal.mvc.sbm

//Variveis Estaticas
Static cTitulo := "Grupo de Produtos"
Static cAliasMVC := "SBM"

/*/{Protheus.doc} User Function productsGroup
Cadastro de Grupo de Produtos (SBM)
@author Atilio
@since 04/03/2025
@version 1.0
@type function
@example custom.terminal.mvc.sbm.u_productsGroup()
@see https://tdn.totvs.com/display/public/framework/Suporte+a+TLPP+no+Protheus
/*/

User Function productsGroup()
	Local aArea   := FWGetArea()
	Local oBrowse
	Private aRotina := {}

    SetFunName("productsGroup")

	//Definicao do menu
	aRotina := custom.terminal.mvc.sbm.u_MenuDef()

	//Instanciando o browse
	oBrowse := FWMBrowse():New()
	oBrowse:SetAlias(cAliasMVC)
	oBrowse:SetDescription(cTitulo)
	oBrowse:DisableDetails()

	//Adicionando as Legendas
	oBrowse:AddLegend( "SBM->BM_PROORI == '1'", "BLACK",    "Original" )
	oBrowse:AddLegend( "SBM->BM_PROORI == '0'", "WHITE",    "Não Original" )
	oBrowse:AddLegend( "EMPTY(SBM->BM_PROORI)", "RED",    "Não cadastrado" )

	//Ativa a Browse
	oBrowse:Activate()

	FWRestArea(aArea)
Return Nil

/*/{Protheus.doc} User Function MenuDef
Menu de opcoes na funcao productsGroup
@author Atilio
@since 04/03/2025
@version 1.0
@type function
/*/

User Function MenuDef()
	Local aRotina := {}

	//Adicionando opcoes do menu
	ADD OPTION aRotina TITLE "Visualizar" ACTION "ViewDef.custom.terminal.mvc.sbm.productsGroup" OPERATION 1 ACCESS 0
	ADD OPTION aRotina TITLE "Incluir" ACTION    "ViewDef.custom.terminal.mvc.sbm.productsGroup" OPERATION 3 ACCESS 0
	ADD OPTION aRotina TITLE "Alterar" ACTION    "ViewDef.custom.terminal.mvc.sbm.productsGroup" OPERATION 4 ACCESS 0
	ADD OPTION aRotina TITLE "Excluir" ACTION    "ViewDef.custom.terminal.mvc.sbm.productsGroup" OPERATION 5 ACCESS 0
	ADD OPTION aRotina TITLE "Copiar" ACTION     "ViewDef.custom.terminal.mvc.sbm.productsGroup" OPERATION 9 ACCESS 0

Return aRotina

/*/{Protheus.doc} User Function ModelDef
Modelo de dados na funcao productsGroup
@author Atilio
@since 04/03/2025
@version 1.0
@type function
/*/

User Function ModelDef()
	Local oStruct := FWFormStruct(1, cAliasMVC)
	Local oModel
	Local bPre := Nil
	Local bPos := Nil
	Local bCancel := Nil


	//Cria o modelo de dados para cadastro
	oModel := MPFormModel():New("productsGroupModel", bPre, bPos, /*bCommit*/, bCancel)
	oModel:AddFields("SBMMASTER", /*cOwner*/, oStruct)
	oModel:SetDescription("Modelo de dados - " + cTitulo)
	oModel:GetModel("SBMMASTER"):SetDescription( "Dados de - " + cTitulo)
	oModel:SetPrimaryKey({})
Return oModel

/*/{Protheus.doc} User Function ViewDef
Visualizacao de dados na funcao productsGroup
@author Atilio
@since 04/03/2025
@version 1.0
@type function
/*/

User Function ViewDef()
	Local oModel := FWLoadModel("custom.terminal.mvc.sbm.productsGroup")
	Local oStruct := FWFormStruct(2, cAliasMVC)
	Local oView

	//Cria a visualizacao do cadastro
	oView := FWFormView():New()
	oView:SetModel(oModel)
	oView:AddField("VIEW_SBM", oStruct, "SBMMASTER")
	oView:CreateHorizontalBox("TELA" , 100 )
	oView:SetOwnerView("VIEW_SBM", "TELA")

Return oView

Bom pessoal, por hoje é só.

 

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação