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.
