Post Anteriores:
1-Escopo do projeto aqui.
2-Introdução ao MVC aqui.
3-Criar update aqui.
4-Cadastro de despesa ou receita aqui.
Nos posts anteriores criamos toda a estrutura necessária para começarmos nosso projeto bem como a primeira rotina MVC para cadastro das despesas e receitas. Essa primeira rotina era somente uma tabela sem relacionamento, realmente bem simples.
Nesse post criaremos a segunda rotina em MVC, essa rotina será responsável por disponibilizar os grupos de Despesas e Receitas para nós, nessa rotina usaremos entre destaque o relacionamento de duas tabelas (pai e filho).
#INCLUDE "PROTHEUS.CH" #INCLUDE "FWMBROWSE.CH" #INCLUDE "FWMVCDEF.CH" /*/{Protheus.doc} SPFIN02 Tela de cadastro grupo de despesa (modelo 3) @author @since @version 1.0 @project /*/ User Function SPFIN02() Local oBrowse as Object Private aRotina as ARRAY // Instanciamento da Classe de Browse oBrowse := FWMBrowse():New() // Definição da tabela do Browse oBrowse:SetAlias('ZRB') // Titulo da Browse oBrowse:SetDescription('Cadastro de Grupo de Despesa') // Ativação da Classe oBrowse:Activate() Return Nil /*/{Protheus.doc} MenuDef MenuDef definition @author @since @version 1.0 @project */ Static Function MenuDef() Local aRotina as array aRotina := {} ADD OPTION aRotina Title "Vizualizar" Action 'VIEWDEF.SPFIN02' OPERATION MODEL_OPERATION_VIEW ACCESS 0 //View ADD OPTION aRotina Title "Incluir" Action 'VIEWDEF.SPFIN02' OPERATION MODEL_OPERATION_INSERT ACCESS 0 //Add ADD OPTION aRotina Title "Alterar" Action 'VIEWDEF.SPFIN02' OPERATION MODEL_OPERATION_UPDATE ACCESS 0 //Change ADD OPTION aRotina Title "Deletar" Action 'VIEWDEF.SPFIN02' OPERATION MODEL_OPERATION_DELETE ACCESS 0 //Delete /* maneira simplificada Será criado um menu padrão com as opções: Visualizar, Incluir, Alterar, Excluir, Imprimir e Copiar Static Function MenuDef() Return FWMVCMenu( 'SPFIN01' )) */ Return aRotina /*/{Protheus.doc} ModelDef definition @author @since @version 1.0 @project /*/ Static Function ModelDef() Local oStrZRB as Object Local oStrZRC as Object Local oModel as Object // Modelo de dados que será construído oModel := MPFormModel():New("_SPFIN02") // Cria o objeto do Modelo de Dados oStrZRB := FWFormStruct(1, "ZRB") // Cria a estrutura a ser usada no Modelo de Dados oStrZRC := FWFormStruct(1, "ZRC") // Cria a estrutura a ser usada no Modelo de Dados oModel:AddFields("ZRBMASTER",, oStrZRB)// Adiciona ao modelo um componente de formulário oModel:AddGrid("ZRCDETAIL", "ZRBMASTER", oStrZRC)// Adiciona ao modelo um componente de Grid oModel:GetModel("ZRCDETAIL"):SetDescription('Despesas/Receitas ') //Sections oModel:GetModel("ZRCDETAIL"):SetUniqueLine({"ZRC_FILIAL","ZRC_CODGRP","ZRC_CODZRA"},/*bCodeLineIsNotUnique*/) oModel:GetModel("ZRCDETAIL"):SetOptional(.T.)//opcionaol informar ou nao os itens //Define o relacionamento oModel:SetRelation("ZRCDETAIL", {{"ZRC_FILIAL","xFilial('ZRB')"},; {"ZRC_CODGRP","ZRB_CODIGO"}},ZRC->(IndexKey(1))) // Adiciona a descrição do Modelo de Dados oModel:SetDescription( 'Cadastro de Grupo de despesa ou receita' ) //Cria gatilho para preencher a descricao da despesa/receita, poderia seer feito via SX7 ou SXB //oStrZRC:AddTrigger("ZRC_CODZRA" , "ZRC_DESCRI" ,, {|oModel| SPTRIGGER("ZRC_CODZRA")}) //oUpdF5VEvt := SPFIN02Event():New() //oModel:InstallEvent("SPFIN02EventID",,oUpdF5VEvt) // Retorna o Modelo de dados Return oModel /*/{Protheus.doc} ViewDef definition @author @since @version 1.0 @project /*/ Static Function ViewDef() // Cria um objeto de Modelo de dados baseado no ModelDef() do fonte informado Local oModel := FWLoadModel( 'SPFIN02' ) // Cria a estrutura a ser usada na View Local oStruZRB := FWFormStruct( 2, 'ZRB') Local oStruZRC := FWFormStruct( 2, 'ZRC', {|x| !AllTrim(x) $ "ZRC_CODGRP"}) //remover codigo do grupo da tela //oStruZRC:RemoveField("ZRC_CODGRP") //outra opcao para remover o campo da tela // Interface de visualização construída Local oView // Cria o objeto de View oView := FWFormView():New() // Define qual o Modelo de dados será utilizado na View oView:SetModel( oModel ) // Adiciona no nosso View um controle do tipo formulário // (antiga Enchoice) oView:AddField( 'VIEW_ZRB', oStruZRB, 'ZRBMASTER' ) //Adiciona o grid oView:AddGrid("VIEW_ZRC", oStruZRC, "ZRCDETAIL") // Criar um "box" horizontal para receber algum elemento da view oView:CreateHorizontalBox( 'TELA' , 35 ) oView:CreateHorizontalBox( 'ITEM' , 65 ) // Relaciona o identificador (ID) da View com o "box" para exibição oView:SetOwnerView( 'ZRBMASTER', 'TELA' ) oView:SetOwnerView( 'ZRCDETAIL', 'ITEM' ) Return oView
Não deixe de assinar a nossa newsletter e fica por dentro de todos os post.
O código fonte desse e outros exemplos podem ser encontrados em nosso git.
Post interessantes:
Aprenda a instalar o Protheus aqui.
Retornar datas por extenso aqui.
Barras de progresso aqui.
Dúvidas e sugestões, entre em contato.
Obrigado e até a próxima!
0 comentário