F3 customizado em MVC | Ti Responde 068

No vídeo de hoje, vamos demonstrar em como modificar um F3 de um campo via MVC.

A dúvida de hoje foi feita por alguns alunos, que questionaram a possibilidade de alterar o F3 (Consulta Padrão, aquela lupinha) usando código em AdvPL.

Pensando nisso, montamos esse exemplo usando o método SetProperty e uma função estático.

E abaixo o código fonte desenvolvido para exemplificar:

//Bibliotecas
#Include "Totvs.ch"
#Include "FWMVCDef.ch"
 
//Variveis Estaticas
Static cTitulo := "Artistas"
Static cAliasMVC := "ZD1"
 
/*/{Protheus.doc} User Function zVid0068
Cadastro de Artistas
@author Daniel Atilio
@since 10/09/2022
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
@see http://autumncodemaker.com
/*/
 
User Function zVid0068()
    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 zVid0068
@author Daniel Atilio
@since 10/09/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.zVid0068" OPERATION 1 ACCESS 0
    ADD OPTION aRotina TITLE "Incluir" ACTION "VIEWDEF.zVid0068" OPERATION 3 ACCESS 0
    ADD OPTION aRotina TITLE "Alterar" ACTION "VIEWDEF.zVid0068" OPERATION 4 ACCESS 0
    ADD OPTION aRotina TITLE "Excluir" ACTION "VIEWDEF.zVid0068" OPERATION 5 ACCESS 0
 
Return aRotina
 
/*/{Protheus.doc} ModelDef
Modelo de dados na funcao zVid0068
@author Daniel Atilio
@since 10/09/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
 
 
    //Cria o modelo de dados para cadastro
    oModel := MPFormModel():New("zVid68M", 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 zVid0068
@author Daniel Atilio
@since 10/09/2022
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
@see http://autumncodemaker.com
/*/
 
Static Function ViewDef()
    Local oModel := FWLoadModel("zVid0068")
    Local oStruct := FWFormStruct(2, cAliasMVC)
    Local oView
 
    //Define a consulta padrão do campo de observação
    oStruct:SetProperty("ZD1_OBSERV", MVC_VIEW_LOOKUP, {|| fObsF3()})
 
    //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")
 
Return oView
 
Static Function fObsF3()
    Local oModel    := FwModelActive()
    Local oModZD1   := oModel:GetModel("ZD1MASTER")
    Local cNome     := Upper(oModZD1:GetValue("ZD1_NOME"))
    Local cConsulta := ""
 
    //Se a primeira letra do nome do artista for C, irá usar a consulta de Clientes
    If Left(cNome, 1) == "C"
        cConsulta := "SA1"
 
    //Senão se a primeira letra do nome do artista for F, irá usar a consulta de Fornecedores
    ElseIf Left(cNome, 1) == "F"
        cConsulta := "SA2"
 
    //Senão por default usará a de Produtos
    Else
        cConsulta := "SB1"
    EndIf
 
Return cConsulta

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação