No artigo de hoje, vamos demonstrar em como acionar uma função logo após abrir a tela em MVC com o método SetAfterViewActivate.
Essa dica foi enviada pelo meu amigo Milton Camara, onde ele comentou da possibilidade de acionar uma determinada funcionalidade logo após abrir a tela em MVC.
No passado até montamos um artigo sobre isso, mas na ocasião mostramos em como fazer utilizando ponto de entrada (veja mais em – Inicializar Grid Temporária em MVC | Ti Responde 038).
Dessa vez, o que fizemos foi, na nossa ViewDef acionar uma função, que chamamos de fInclLinha. Nessa função, se for inclusão, basicamente preenchemos a grid automaticamente, gerando o resultado similar ao abaixo:
Com isso em mente, você pode acionar suas customizações que quer, logo após a abertura da tela.
Abaixo o código fonte montado para o exemplo descrito acima.
//Bibliotecas #Include "Totvs.ch" #Include "FWMVCDef.ch" //Variveis Estaticas Static cTitulo := "Cadastro de CDs" Static cTabPai := "ZD2" Static cTabFilho := "ZD3" /*/{Protheus.doc} User Function zMVC02 CDs @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 zMVC02() Local aArea := GetArea() 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() RestArea(aArea) Return Nil /*/{Protheus.doc} MenuDef Menu de opcoes na funcao zMVC02 @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.zMVC02" OPERATION 1 ACCESS 0 ADD OPTION aRotina TITLE "Incluir" ACTION "VIEWDEF.zMVC02" OPERATION 3 ACCESS 0 ADD OPTION aRotina TITLE "Alterar" ACTION "VIEWDEF.zMVC02" OPERATION 4 ACCESS 0 ADD OPTION aRotina TITLE "Excluir" ACTION "VIEWDEF.zMVC02" OPERATION 5 ACCESS 0 Return aRotina User Function z02Menu() Return MenuDef() /*/{Protheus.doc} ModelDef Modelo de dados na funcao zMVC02 @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 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("zMVC02M", 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'}) Return oModel /*/{Protheus.doc} ViewDef Visualizacao de dados na funcao zMVC02 @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("zMVC02") 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 (CDs)") oView:EnableTitleView("VIEW_ZD3", "Grid - ZD3 (Musicas dos CDs)") //Removendo campos oStruFilho:RemoveField("ZD3_CD") //Adicionando campo incremental na grid oView:AddIncrementField("VIEW_ZD3", "ZD3_ITEM") //Define uma ação logo após abrir a tela oView:SetAfterViewActivate({|| fInclLinha()}) Return oView Static Function fInclLinha() Local lContinua := .T. Local oModel := FWModelActive() Local nOper := oModel:GetOperation() Local oView := FWViewActive() Local oModelGrid := oModel:GetModel("ZD3DETAIL") Local nLinhas := 12 Local nLinAtu := 0 //Se for inclusão If nOper == 3 //Limpando a grid If oModelGrid:CanClearData() oModelGrid:ClearData() EndIf //Percorrendo as linhas e adicionano na grid For nLinAtu := 1 To nLinhas oModelGrid:AddLine() oModelGrid:GoLine(nLinAtu) oModelGrid:LoadValue("ZD3_MUSICA", "Faixa de número " + cValToChar(nLinAtu)) Next //Posiciona na linha 1 oModelGrid:GoLine(1) oView:Refresh() EndIf Return lContinua
Bom pessoal, por hoje é só.
Abraços e até a próxima.