Olá pessoal…
Hoje vou mostrar como chamar a tela de filtragem padrão de registros de uma tabela utilizando o AdvPL.
Para utilizar esse recurso pessoal, nós chamamos a função SduExp dentro do fonte APSDU, essa função é aquela que quando você está no APSDU e você tem uma tabela aberta e você clica em filtrar ou dá um Ctrl+F, é mostrado aquela tela de pesquisa.
Para ela funcionar devidamente, abra o alias, e através do StaticCall nós iremos chamar essa função interna do APSDU, atribuindo o resultado em uma variável caracter. Se esse retorno tiver conteúdo, existe um filtro, e nós utilizamos no DbSetFilter, do contrário, não existe filtro, e nós poderemos limpar a tabela.
//Bibliotecas #Include "Protheus.ch" /*/{Protheus.doc} zTeste Função de teste para abrir a filtragem de tabela @author Atilio @since 21/10/2017 @version 1.0 @type function /*/ User Function zTeste() Local aArea := GetArea() Local cFiltro := "" //Mostrando a tela de filtro DbSelectArea('SA1') cFiltro := StaticCall(APSDU, SduExp) //Se tiver filtro, usa o DbSetFilter para filtrar a tabela If ! Empty(cFiltro) SA1->(DbSetfilter({|| &(cFiltro)}, cFiltro)) //Senão, limpa qualquer filtragem Else SA1->(DbClearFilter()) Endif RestArea(aArea) Return
Update Novembro de 2021:
Pessoal, como a função StaticCall foi desativada para compilações, eu pesquisei, e estou atualizando o artigo, no caso ao invés de usar essa SduExp, nós iremos utilizar a função BuildExpr. Abaixo o exemplo:
//Bibliotecas #Include "Protheus.ch" /*/{Protheus.doc} zTeste Função de teste para abrir a filtragem de tabela @author Atilio @since 21/10/2017 @version 1.0 @type function /*/ User Function zTeste() Local aArea := GetArea() Local cFiltro := "" //Mostrando a tela de filtro DbSelectArea('SA1') cFiltro := BuildExpr('SA1') //Se tiver filtro, usa o DbSetFilter para filtrar a tabela If ! Empty(cFiltro) SA1->(DbSetfilter({|| &(cFiltro)}, cFiltro)) //Senão, limpa qualquer filtragem Else SA1->(DbClearFilter()) Endif RestArea(aArea) Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.