I checked, but still… doesn’t work
onValidate is executed after onScriptInit, are you sure that the app is going back to onScriptInit after onValidate is call
The app is a grid with filter and the filter is initial app… So I don’t know exactly (but i think) back to onScriptInit… or no?
There is no onValidate on a grid, maybe you should try it in onHeader
I applicated on filter… I need this on filter
I don’t know if this macro is available there
Maybe you can try to set
[var_campoA] = ‘’; in onApplicationInit of the grid
Then in onScriptInit of the search
if (strlen([var_campoA]) == 0) {
[var_campoA] = {fieldA};
}
if ({fieldA} == 'value') {
if(empty({sc_where_current})){
sc_select_where(add) = " WHERE campoB = [var_campoA] ";
} else{
sc_select_where(add) = " AND fieldB = [var_campoA] ";
}
}
Humm… I’ll to try this, can be work!
Didn’t work… The field receive the value of [var_campoA], but
continue without to show the clause WHERE on result of search.
Não costumo interferir em um tópico com ajuda em andamento, mas como vi que se passou o dia e não chegaram em um resultado satisfatório, fiz um exemplo rápido aqui, mas não sei se é isso:
Link do exemplo logo abaixo.
Se for, posto o código do exemplo.
Thank you, I don’t see what he is doing wrong
Bom dia.
Como o colega disse que possui um group_concat nos cursos dos alunos, imagino que o registro se repete para cada aluno conforme o curso então criei a seguinte tabela:
CREATE TABLE `alunos` (
`aluno` VARCHAR(50) NULL DEFAULT NULL,
`curso` VARCHAR(15) NULL DEFAULT NULL
)
ENGINE=InnoDB
;
Inseri alguns dados como demonstra a figura:
Para montar a grid criei uma view em cima da tabela alunos, isso facilitará alguns processos:
CREATE OR REPLACE
ALGORITHM = UNDEFINED VIEW view_alunos AS
SELECT
a.aluno as Aluno,
(
SELECT GROUP_CONCAT (b.curso)
FROM alunos b
WHERE b.aluno = a.aluno
) AS Cursos,
a.curso AS Curso
FROM alunos a
ORDER BY a.aluno, a.curso
SQL da aplicação Grid:
SELECT
aluno,
cursos,
curso
FROM view_alunos
GROUP BY aluno
Criar campo manual no filtro avançado:
onScriptInit:
//echo "<pre>";
//print_r({cursosSel});
//echo "</pre>";
$where = '';
$cursos = '';
if ({cursosSel}) {
foreach ({cursosSel} as $valor) {
$curso = explode('##@@',$valor);
$cursos .= "'{$curso[0]}',";
}
$cursos = trim($cursos,',');
$where = " curso in ($cursos) ";
}
if ($where) {
if(empty({sc_where_current})){
sc_select_where(add) = " WHERE $where ";
}else{
sc_select_where(add) = " AND $where";
}
}
onRecord: (frescura)
$_cursos = {cursos};
if ({cursosSel}) {
foreach ({cursosSel} as $valor) {
$curso = explode('##@@',$valor);
$_curso = $curso[0];
$_cursos = str_replace($_curso,'<b>'.$_curso.'</b>', $_cursos );
}
}
{cursos} = $_cursos;
Jean-Luc, I’d like to thank you for all your help!!
Caro Haroldo, primeiramente, gostaria de expressar minha admiração por sua pessoa, não apenas pela ajuda que sempre presta a todos por aqui, mas também pelo seu profissionalismo de alto nível e altruísmo raro… Hoje em dia, com o tempo cada vez mais escasso, encontrar pessoas assim renova as esperanças por dias melhores, além de nos incentivar a fazer o mesmo, a levar o belo exemplo em frente.
Quanto ao meu problema, você não só entendeu perfeitamente o que eu tentei explicar, como dispendeu seu precioso tempo pra fazer um exemplo que resolveu em 100% a questão.
Muito obrigado pela ajuda, paciência e atenção de sempre.
Agora vou cuidar em implementar em meu projeto.
Forte abraço!
Fala Haroldo!
Estou querendo colocar outros campos com a mesma estrutura, porém não estou conseguindo, pois o filtro sempre traz apenas o último WHERE marcado e não traz os outros marcados…
O motivo eu até sei que foi porque eu apenas acrescentei a mesma estrutura de if em sequência, porém não sei como encaixaria na mesma condição que você criou.
Como devo fazer?
Obrigado!
Condições de filtro?
Basta usar a macro sc_select_filter no evento onscriptinit para melhorar a criação do Where.
Ao pensar em uma aplicação faça análise detalhada e completa dela para que a estratégia aplicada funcione definitivamente.
Implementações posteriores podem requerer refazer tudo que já funcionava.
Opa! Farei isso!
Obrigado mais uma vez!!
Boa noite, Haroldo!
Tentei implementar essa solução que você apresentou em outro projeto com seis campos virtuais do filtro, mas até agora não consegui concatenar os Where.
Poderia me dar um norte?
PS: Tentei utilizar a cláusula sc_where_filter, mas ela não retorna o Where dos campos virtuais.
Campos virtuais no filtro?
A macro só retorna a condição Where criado por colunas no filtro válidas no SQL.
Precisa descrever claramente a analise de sua necessidade.
Tudo é questão de lógica.
O exemplo inicial que criei para vc foi baseado nas informações iniciais que postou no tópico.
Necessidades adicionais precisa ver se não entram em conflito com o que foi feito inicialmente.
Nesse meu caso, criei uma view para uma grid contendo seis campos concatenados (idioma, deficiencia, habilitacao, atividades, ferramentas, transporte), daí criei os seis campos virtuais (checkbox) no filtro para que estes possam filtrar os valores selecionados.
Foi então que estagnei na lógica… não soube concatenar os campos selecionados para adicionar Where ou AND e formar a condição Where principal.
Não sei se consegui explicar bem…
O exemplo que criei não ajuda não lógica para criação de outras apps?