JasperPHP icon indicating copy to clipboard operation
JasperPHP copied to clipboard

Filter by Collection or Array

Open gutembergz opened this issue 4 years ago • 4 comments

Olá, Rogério. Gostaria de saber se o JasperPHP oferece suporte a filtros sql que utilizam parâmetros Java Collection no JasperReports. Consultas como a seguinte:

SELECT * FROM bd_banco.contratos WHERE $X{IN, idCampanha, FILTRO_ID} AND $X{IN, idStatus, FILTRO_STATUS}

Desde já, agradeço a atenção.

gutembergz avatar Oct 06 '20 23:10 gutembergz

Olá, @gutembergz , eu nunca usei esse formato, então acho que não é suportado, mas se me mostrar qual a SQL resultante dessa sintaxe, podemos pensar em alguma coisa

Rctnet avatar Oct 07 '20 12:10 Rctnet

Olá, @Rctnet - estou tentando fazer um filtro simples dentro do arquivo jrxml para obter vários IDs através do comando IN do mysql, como abaixo. Porém, o comando IN não aceita strings vazias, para o caso de não haver seleção de filtro.

Já utilizando no formato $X{IN, idStatus, FILTRO_STATUS}, como orientado no JasperReports, o IN nulo funciona, mas é preciso passar os dados do php para o report como Java Array ou Collection.

Como poderíamos informar um IN vazio dentro da query do report? Agradeço a atenção!

SELECT * FROM bd_banco.contratos.idCampanha WHERE IN bd_banco.contratos IN($P!{FILTRO_ID}) AND bd_banco.contratos.idStatus IN($P!{FILTRO_IDSTATUS})

gutembergz avatar Oct 07 '20 14:10 gutembergz

é meio gambi, mas se eu entendi bem o que vc quer, eu já fiz assim, colocando o bd_banco.contratos IN(inplode($array)}) dentro do parametro, e testando antes de instanciar o relatório e decidindo se manda o filtro com ou sem in ficaria mais ou menos assim

    if(!is_array($param['proprietarios_codigo']))
    {
        $param['rd_filtrar_prop_imov'] .= "p.proprietarios_codigo = ".$param['proprietarios_codigo'];    
    }
   else 
    {
        $param['rd_filtrar_prop_imov'] .= "p.proprietarios_codigo in (".implode($param['proprietarios_codigo'],",").")";    
    }
    
    $jpReport = new TJasper("relatorio.jrxml",$param);

Rctnet avatar Oct 07 '20 15:10 Rctnet

Ola @gutembergz , conseguiu o que queria, a biblioteca tb suporta array como parâmetro, e já faz o implode com aspas de forma automática, porem não sei como seria a execução da query com um elemento string vazio.

Rctnet avatar Oct 14 '20 11:10 Rctnet