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.