No vídeo de hoje, vamos demonstrar em como criar uma tratativa num ComboBox para que algumas opções sejam mostradas apenas na inclusão e outras apenas na alteração.
A dúvida de hoje, nos perguntaram, se seria possível em um único ComboBox demonstrar opções diferentes entre Inclusão e Alteração em MVC.
Pensando nisso, montamos um exemplo, onde é demonstrado em como tratar a situação via SetAfterViewActive. A partir disso, definimos os itens do ComboBox dependendo da situação se é Inclusão ou Alteração.
Segue abaixo o vídeo exemplificando:
E abaixo o código fonte desenvolvido:
//Bibliotecas #Include "Totvs.ch" #Include "FWMVCDef.ch" //Variveis Estaticas Static cTitulo := "Artistas" Static cAliasMVC := "ZD1" /*/{Protheus.doc} User Function zVid0074 Cadastro de Artistas @author Daniel Atilio @since 21/01/2022 @version 1.0 @type function @obs Codigo gerado automaticamente pelo Autumn Code Maker @see http://autumncodemaker.com /*/ User Function zVid0074() Local aArea := GetArea() Local oBrowse Private aRotina := {} //Definicao do menu aRotina := MenuDef() //Instanciando o browse oBrowse := FWMBrowse():New() oBrowse:SetAlias(cAliasMVC) oBrowse:SetDescription(cTitulo) oBrowse:DisableDetails() //Ativa a Browse oBrowse:Activate() RestArea(aArea) Return Nil /*/{Protheus.doc} MenuDef Menu de opcoes na funcao zVid0074 @author Daniel Atilio @since 21/01/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.zVid0074" OPERATION 1 ACCESS 0 ADD OPTION aRotina TITLE "Incluir" ACTION "VIEWDEF.zVid0074" OPERATION 3 ACCESS 0 ADD OPTION aRotina TITLE "Alterar" ACTION "VIEWDEF.zVid0074" OPERATION 4 ACCESS 0 Return aRotina /*/{Protheus.doc} ModelDef Modelo de dados na funcao zVid0074 @author Daniel Atilio @since 21/01/2022 @version 1.0 @type function @obs Codigo gerado automaticamente pelo Autumn Code Maker @see http://autumncodemaker.com /*/ Static Function ModelDef() Local oStruct := FWFormStruct(1, cAliasMVC) Local oModel Local bPre := Nil Local bPos := Nil Local bCommit := Nil Local bCancel := Nil //oStruct:SetProperty('ZD1_DTFORM', MODEL_FIELD_INIT, FwBuildFeature(STRUCT_FEATURE_INIPAD, 'Date()')) oStruct:SetProperty('ZD1_DTFORM', MODEL_FIELD_INIT, FwBuildFeature(STRUCT_FEATURE_INIPAD, 'dDataBase')) //oStruct:SetProperty('ZD1_DTFORM', MODEL_FIELD_INIT, FwBuildFeature(STRUCT_FEATURE_INIPAD, 'sToD("20221101")')) //Cria o modelo de dados para cadastro oModel := MPFormModel():New("zVid74M", bPre, bPos, bCommit, bCancel) oModel:AddFields("ZD1MASTER", /*cOwner*/, oStruct) oModel:SetDescription("Modelo de dados - " + cTitulo) oModel:GetModel("ZD1MASTER"):SetDescription( "Dados de - " + cTitulo) oModel:SetPrimaryKey({}) Return oModel /*/{Protheus.doc} ViewDef Visualizacao de dados na funcao zVid0074 @author Daniel Atilio @since 21/01/2022 @version 1.0 @type function @obs Codigo gerado automaticamente pelo Autumn Code Maker @see http://autumncodemaker.com /*/ Static Function ViewDef() Local oModel := FWLoadModel("zVid0074") Local oStruct := FWFormStruct(2, cAliasMVC) Local oView //Cria a visualizacao do cadastro oView := FWFormView():New() oView:SetModel(oModel) oView:AddField("VIEW_ZD1", oStruct, "ZD1MASTER") oView:CreateHorizontalBox("TELA" , 100 ) oView:SetOwnerView("VIEW_ZD1", "TELA") //Define uma ação logo após abrir a tela oView:SetAfterViewActivate({|| fAtuCombo()}) Return oView /*/{Protheus.doc} fAtuCombo Função que define as opções do combo na tela @author Atilio @since 21/11/2023 @version 1.0 @type function @obs O X3_CBOX do campo esta como "1=Novo Registro;2=Inclusão Teste;3=Registro Revisado;4=Alteração Teste;5=Sem Classificação;6=Sempre Mostrar;7=Último Teste;" /*/ Static Function fAtuCombo() Local lContinua := .T. Local oModel := FWModelActive() Local nOper := oModel:GetOperation() Local oView := FWViewActive() Local oModelZD1 := oModel:GetModel("ZD1MASTER") Local aOpcoes := {} //Somente se for inclusão ou alteração If nOper == 3 .Or. nOper == 4 //Somente inclusão If nOper == 3 aAdd(aOpcoes, "1=Novo Registro") aAdd(aOpcoes, "2=Inclusão Teste") //Se for alteração ElseIf nOper == 4 .Or. nOper == 1 aAdd(aOpcoes, "3=Registro Revisado") aAdd(aOpcoes, "4=Alteração Teste") EndIf //Os outros sempre adicionam aAdd(aOpcoes, "5=Sem Classificação") aAdd(aOpcoes, "6=Sempre Mostrar") aAdd(aOpcoes, "7=Último Teste") //Define direto no Model oModelZD1:GetStruct():SetProperty("ZD1_TIPO", MODEL_FIELD_VALUES, aOpcoes) //E agora define na View oView:SetFieldProperty("ZD1MASTER", "ZD1_TIPO", "COMBOVALUES", { aOpcoes }) //Atualiza a tela oView:Refresh() EndIf Return lContinua
Bom pessoal, por hoje é só.
Abraços e até a próxima.