No vídeo de hoje vamos demonstrar em como deixar uma Enchoice não editável em MVC.
Esse vídeo foi uma contribuição do grande Marco, onde ele disse que precisava em uma tela com grid e cabeçalho (Enchoice), desativar a alteração dos campos do cabeçalho.
Então montamos esse exemplo demonstrando a utilização do método SetOnlyView.
E abaixo o código fonte desenvolvido para exemplificar:
//Bibliotecas
#Include "Totvs.ch"
#Include "FWMVCDef.ch"
//Variveis Estaticas
Static cTitulo := "Cadastro de CDs"
Static cTabPai := "ZD2"
Static cTabFilho := "ZD3"
/*/{Protheus.doc} User Function zVid0050
Cadastro de CDs
@author Daniel Atilio
@since 16/07/2022
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
@see http://autumncodemaker.com
/*/
User Function zVid0050()
Local aArea := FWGetArea()
Local oBrowse
Private aRotina := {}
//Definicao do menu
aRotina := MenuDef()
//Instanciando o browse
oBrowse := FWMBrowse():New()
oBrowse:SetAlias(cTabPai)
oBrowse:SetDescription(cTitulo)
oBrowse:DisableDetails()
//Ativa a Browse
oBrowse:Activate()
FWRestArea(aArea)
Return Nil
/*/{Protheus.doc} MenuDef
Menu de opcoes na funcao zVid0050
@author Daniel Atilio
@since 16/07/2022
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
@see http://autumncodemaker.com
/*/
Static Function MenuDef()
Local aRotina := {}
//Adicionando opcoes do menu
ADD OPTION aRotina TITLE "Visualizar" ACTION "VIEWDEF.zVid0050" OPERATION 1 ACCESS 0
ADD OPTION aRotina TITLE "Alterar" ACTION "VIEWDEF.zVid0050" OPERATION 4 ACCESS 0
Return aRotina
/*/{Protheus.doc} ModelDef
Modelo de dados na funcao zVid0050
@author Daniel Atilio
@since 16/07/2022
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
@see http://autumncodemaker.com
/*/
Static Function ModelDef()
Local oStruPai := FWFormStruct(1, cTabPai)
Local oStruFilho := FWFormStruct(1, cTabFilho)
Local aRelation := {}
Local oModel
Local bPre := Nil
Local bPos := Nil
Local bCommit := Nil
Local bCancel := Nil
//Cria o modelo de dados para cadastro
oModel := MPFormModel():New("zVid50M", bPre, bPos, bCommit, bCancel)
oModel:AddFields("ZD2MASTER", /*cOwner*/, oStruPai)
oModel:AddGrid("ZD3DETAIL","ZD2MASTER",oStruFilho,/*bLinePre*/, /*bLinePost*/,/*bPre - Grid Inteiro*/,/*bPos - Grid Inteiro*/,/*bLoad - Carga do modelo manualmente*/)
oModel:SetDescription("Modelo de dados - " + cTitulo)
oModel:GetModel("ZD2MASTER"):SetDescription( "Dados de - " + cTitulo)
oModel:GetModel("ZD3DETAIL"):SetDescription( "Grid de - " + cTitulo)
oModel:SetPrimaryKey({})
//Fazendo o relacionamento
aAdd(aRelation, {"ZD3_FILIAL", "FWxFilial('ZD3')"} )
aAdd(aRelation, {"ZD3_CD", "ZD2_CD"})
oModel:SetRelation("ZD3DETAIL", aRelation, ZD3->(IndexKey(1)))
//Definindo campos unicos da linha
oModel:GetModel("ZD3DETAIL"):SetUniqueLine({'ZD3_MUSICA'})
//Deixando o cabeçalho como não editável
oModel:GetModel("ZD2MASTER"):SetOnlyView(.T.)
Return oModel
/*/{Protheus.doc} ViewDef
Visualizacao de dados na funcao zVid0050
@author Daniel Atilio
@since 16/07/2022
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
@see http://autumncodemaker.com
/*/
Static Function ViewDef()
Local oModel := FWLoadModel("zVid0050")
Local oStruPai := FWFormStruct(2, cTabPai)
Local oStruFilho := FWFormStruct(2, cTabFilho)
Local oView
//Cria a visualizacao do cadastro
oView := FWFormView():New()
oView:SetModel(oModel)
oView:AddField("VIEW_ZD2", oStruPai, "ZD2MASTER")
oView:AddGrid("VIEW_ZD3", oStruFilho, "ZD3DETAIL")
//Partes da tela
oView:CreateHorizontalBox("CABEC", 30)
oView:CreateHorizontalBox("GRID", 70)
oView:SetOwnerView("VIEW_ZD2", "CABEC")
oView:SetOwnerView("VIEW_ZD3", "GRID")
//Titulos
oView:EnableTitleView("VIEW_ZD2", "Cabecalho - ZD2")
oView:EnableTitleView("VIEW_ZD3", "Grid - ZD3")
//Removendo campos
oStruFilho:RemoveField("ZD3_CD")
//Adicionando campo incremental na grid
oView:AddIncrementField("VIEW_ZD3", "ZD3_ITEM")
Return oView
Bom pessoal, por hoje é só.
Abraços e até a próxima.