Personalizar condições de filtro

Preciso personalizar as condições de filtro. Atualmente as condições Null e Not Null me atendem, mas quero trocar o conteúdo mostrado por esses filtros de “Conteúdo nulo” para “Não excluído” e “Conteúdo não nulo” para “Excluído” (estou filtrando um campo de data de exclusao). Além disso, também queria trocar de um combo select para dois radio button (com esses valores).

Alguém sabe/já fez algo do gênero?


Giovane M.

Você pode alterar esse nome na definição de linguagens porém vai alterar para todos.
O que recomendo é você criar um campo no filtro (com nome do campo que não tenha na consulta)
e no onScriptInit da consulta você faz um if para ver se esse campo foi preenchido.
E se for preenchido você filtra os dados com a macro sc_select_where(add)

exemplo onScriptInit

if(!empty({campo_filtro}))
{
sc_select_where(add) = " and CAMPO IS NULL "; // and se já existir alguma condição
}

Pois é, também não queria alterar para todos.

Tentei e não deu certo. Criei um novo campo no filtro, tipo checkbox, e coloquei no Lookup apenas um valor (true).
No onScriptInit da Consulta, coloquei um if igual ao que você sugeriu, no meu caso ficou assim:

if(!empty({excluidos})) {
	sc_select_where(add) = " WHERE (data_exclusao IS NULL OR data_exclusao IS NOT NULL) "; //retornar todos os registros
} else {
	sc_select_where(add) = " WHERE data_exclusao IS NULL "; //retornar apenas os registros não excluidos
}

Eu só tenho esse filtro na tela. Mesmo assim, ele ainda não filtra a consulta por esse campo (sempre cai no else, independente de estar marcado o filtro). Já tentei como radio button também, nesse caso adicionei no Lookup dois valores, true e false, e alterei o IF para ficar assim:

if({excluidos} == "true") {
	sc_select_where(add) = " WHERE (data_exclusao IS NULL OR data_exclusao IS NOT NULL) "; //retornar todos os registros
} else {
	sc_select_where(add) = " WHERE data_exclusao IS NULL "; //retornar apenas os registros não excluidos
}

E ainda assim não funcionou. Tem mais algum passo que não estou fazendo/percebendo?

Campos como duplo select, checkbox ou algum outro multi-select você precisará fazer um pouco diferente, pegando o valor do campo como variável global, vendo o delimitador que o SC usa e pegando os valores via explode
Recomendo fazer essa parte que mandei com campo rádio que dará certo.
Se não conseguir, rode em modo debug para confirmar se está montando o select corretamente.

Consegui resolver da seguinte maneira:

  • No onScriptInit (em vermelho onde eu tava errando):
    if({excluidos} == true) //antes estava if ({excluidos} == “true”) , fiz também como if({excluidos == ‘true’) e também não funcionava…
    {
    sc_select_where(add) = " WHERE (data_exclusao IS NULL OR data_exclusao IS NOT NULL) ";//retorna todos os registros excluidos e nao excluidos
    } else {
    sc_select_where(add) = " WHERE data_exclusao IS NULL ";//retorna somente registros nao excluidos
    }

Deu certo fazer como checkbox, @Rodrigo Goulart Padovezzi, deixei apenas um item no lookup com value TRUE. Não precisei fazer explode nem sc_set_global. Eu tava errando no onScriptInit mesmo, tava fazendo o IF pelo valor com aspas simples/aspas duplas, quando tirei as aspas, começou a funcionar…

Obrigado pela ajuda.

Aparentemente a variavel contida em sc_select_where é global, pois quando executo um select usando o sc_selec_where(add) funciona normalmente, mas quando executo pela segunda vez ele novamente acrescenta a minha condição de filtro ficando “where…where…”.

Como faço para apagar um eventual where existente, antes de executar o sc_select_where(add)…não há um sc_select_where(del) ???
Obrigado.