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.