Nesse vídeo demonstraremos a utilização da função BuildExpr que abre uma tela para montar um filtro de um alias.
Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} User Function zExe069
Exemplo para filtrar tabelas através e uma tela de filtro
@type Function
@author Atilio
@since 06/12/2022
@see https://tdn.totvs.com/display/public/framework/BuildExpr
@obs
Função BuildExpr
Parâmetros
+ cAlias , Caractere , Alias da Tabela
+ oWnd , Objeto , Objeto que chamou a função
+ cFilter , Caractere , String já contendo o filtro
+ lTopFilter , Lógico , Utiliza expressão SQL (.T.) ou AdvPL (.F.)
+ bOk , Bloco de Código , Bloco de código executado ao clicar no botão Confirmar
+ oDlg , Objeto , Dialog onde será apresentado o construtor de filtros
+ aUsado , Array , Array com os campos que poderão ser usados nos filtros
+ cDesc , Caractere , Título da Janela
+ nRow , Numérico , Posição da linha inicial para exibir a tela de filtro
+ nCol , Numérico , Posição da coluna inicial para exibir a tela de filtro
+ aCampo , Array , Array com os campos que serão apresentados
+ lVisibleTopFilter , Lógico , Verifica expressão do filtro como TopConnect
+ lExpBtn , Lógico , Permite habilitar ou desabilitar o botão Expressão
+ cTopFilter , Caractere , Expressão do filtro do TopConnect
Retorno
+ cRet , Caractere , Expressão do filtro
**** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao ****
/*/
User Function zExe069()
Local aArea := FWGetArea()
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
FWRestArea(aArea)
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.
posso usar essa função para montar uma query ? pelo que vi o retorno ele monta expressoes nao compativeis com o SQL
Bom dia Divair, tudo joia?
Até onde sei, a BuildExpr é exclusiva para comandos em AdvPL / TLPP, então ela deve ser usada em conjunto por exemplo com a DbSetFilter.
Pode ser que até tenha alguma função que converta filtro de expressões em AdvPL / TLPP para SQL, mas eu desconheço.
Vou tentar pesquisar e se encontrar algo te aviso.
De antemão, você poderia pegar o resultado da BuildExpr e tratar, por exemplo, usar StrTran substituindo .And. por AND, .Or. por OR, $ por IN e assim por diante.
Um grande abraço.