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.