Estou tendo que efetuar algumas manutenções em relatórios legados (que usam o RPTStatus ainda) e onde o usuário tem a possibilidade de customizar o filtro do relatório. Acontece que o retorno na variável aReturn vem na forma de uma expressão ADVPL. Também tenho outros fontes legados que fazem um tratamento semelhante e preciso converter para SQL por questões de performance.
Tem alguma função padrão que possamos utilizar para efetuar essa conversão ?
Cirilo, já vi funções que fazem isso, porém não sei se estão documentadas, vou pesquisar e dou um retorno melhor. Mas já adianto, que essas funções não fazem um parse, o correto é fazer um parse para depois efetuar a transformação, elas leem de forma simples e convertem, logo são bem limitadas, expressões complexas provavelmente não serão resolvidas.
— Daniel Mendes 22 de Nov de 2022Daniel fico muito grato pela atenção. Não entendi bem o que você falou sobre o parse que seria o processo ideal. Se houver uma forma melhor de trabalhar (usando o parse) posso utilizar. Não sei se o que estou falando faz sentido porque não entendi bem.
— Cirilo Rocha 22 de Nov de 2022Eu não sei internamente como faz mas a função BuildExpr() de algum modo converte a expressão de filtro dependendo de um parâmetro. Talvez ajude a achar alguma coisa.
— Cirilo Rocha 23 de Nov de 2022Cirilo, não encontrei nenhuma função publicada que faça essa transformação. Basicamente as rotinas existentes procuram valores e trocam por outros, por exemplo, eu procuro ".And." e troco por " AND " etc... Claro, dependendo do filtro ADVPL a conversão é impossível, casos que usam funções ADVPL por exemplo.
— Daniel Mendes 23 de Nov de 2022Daniel obrigado pelo apoio. E como as funções padrão BuildExpr() e dbSetFilter() fazem esse processo? São funções de uso exclusivo interno da Totvs?
— Cirilo Rocha 23 de Nov de 2022