No artigo de hoje, vamos demonstrar em como criar uma pergunta logo ao abrir um browse para filtrar as informações.
Para fazermos esse procedimento, o primeiro passo é na criação do nosso FWmBrowse, nós acionarmos uma função para montar o filtro, que chamamos de fMontaFilt. Ela irá abrir uma tela de parâmetros, então logo ao abrir a rotina, será exibido uma tela similar a abaixo:
Se a tela for cancelada, nenhum filtro será aplicado. Porém, se a tela for confirmada, será aberto o browse com o filtro aplicado:
Abaixo o código fonte de exemplo:
//Bibliotecas #Include "Totvs.ch" #Include "FWMVCDef.ch" //Variveis Estaticas Static cTitulo := "Artistas" Static cAliasMVC := "ZD1" /*/{Protheus.doc} User Function zMVC01 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 zMVC01() 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() //Filtrando o browse cFiltro := fMontaFilt() If ! Empty(cFiltro) oBrowse:SetFilterDefault(cFiltro) EndIf //Ativa a Browse oBrowse:Activate() RestArea(aArea) Return Nil /*/{Protheus.doc} MenuDef Menu de opcoes na funcao zMVC01 @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.zMVC01" OPERATION 1 ACCESS 0 ADD OPTION aRotina TITLE "Incluir" ACTION "VIEWDEF.zMVC01" OPERATION 3 ACCESS 0 ADD OPTION aRotina TITLE "Alterar" ACTION "VIEWDEF.zMVC01" OPERATION 4 ACCESS 0 ADD OPTION aRotina TITLE "Excluir" ACTION "VIEWDEF.zMVC01" OPERATION 5 ACCESS 0 Return aRotina User Function z01Menu() Return MenuDef() /*/{Protheus.doc} ModelDef Modelo de dados na funcao zMVC01 @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("zMVC01M", 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 User Function z01Model() Return ModelDef() /*/{Protheus.doc} ViewDef Visualizacao de dados na funcao zMVC01 @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("zMVC01") 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") Return oView /*/{Protheus.doc} fMontaFilt Função que abre a tela de parâmetros para montagem de filtro no browse @author Atilio @since 07/02/2023 @version 1.0 /*/ Static Function fMontaFilt() Local aArea := FWGetArea() Local cFiltro := "" Local aPergs := {} Local cCodDe := Space(TamSX3('ZD1_CODIGO')[01]) Local cCodAt := StrTran(cCodDe, ' ', 'Z') Local dDataDe := FirstDate(MonthSub(Date(), 1)) Local dDataAte := Date() //Adiciona os parâmetros que serão exibidos aAdd(aPergs, {1, "Código De", cCodDe, "", ".T.", "", ".T.", 60, .F.}) aAdd(aPergs, {1, "Código Até", cCodAt, "", ".T.", "", ".T.", 60, .T.}) aAdd(aPergs, {1, "Data De", dDataDe, "", ".T.", "", ".T.", 80, .T.}) aAdd(aPergs, {1, "Data Até", dDataAte, "", ".T.", "", ".T.", 80, .T.}) //Se a pergunta for confirmada If ParamBox(aPergs, "Informe os parâmetros", , , , , , , , , .F., .F.) //Filtro da Código De If ! Empty(MV_PAR01) cFiltro += "ZD1->ZD1_CODIGO >= '" + MV_PAR01 + "'" EndIf //Filtro do Código Até If ! Empty(MV_PAR02) If ! Empty(cFiltro) cFiltro += " .And. " EndIf cFiltro += "ZD1->ZD1_CODIGO <= '" + MV_PAR02 + "'" EndIf //Filtro da Data De If ! Empty(MV_PAR03) If ! Empty(cFiltro) cFiltro += " .And. " EndIf cFiltro += "ZD1->ZD1_DTFORM >= sToD('" + dToS(MV_PAR03) + "')" EndIf //Filtro da Data Até If ! Empty(MV_PAR04) If ! Empty(cFiltro) cFiltro += " .And. " EndIf cFiltro += "ZD1->ZD1_DTFORM <= sToD('" + dToS(MV_PAR04) + "')" EndIf EndIf FWRestArea(aArea) Return cFiltro
Bom pessoal, por hoje é só.
Abraços e até a próxima.