Ireport - Parâmetros condicionais

Olá Pessoal… estou com o seguinte problema…

Estou criando meus relatórios pelo ireport, mas acontece que quero passar parâmetros condicionais… ou seja… eu tenho três parâmetros… e dois deles não são obrigatórios… o usuário pode escolher por completa-lo ou não… na query no ireport… eu precisaria fazer uma verficação se esses parâmetros são nulos ou não… e caso eles fossem nulos eu não os colocaria na cláusula where do meu select…

Ou seja eu preciso mudar o critério de pesquisa dinamicamente… tem como ?..

ou ainda escolher o campo para ordenar o select… tipo o usuário pode escolher se ordena o relatório por x ou y…

Não sei se deu pra entender direito… :wink:

Basicamente, eu queria saber se tem como modificar o select dinamicamente, ou fazer algo do tipo:

select campo from tabela where $P{condicoes}

Agradeço desde já…

Oi… sim tem como… e o caminho é esse mesmo, o que exatamente não está dando certo ?!? algum erro !?? se for, poste aqui…
:slight_smile:

Quando vc usa um where clause dinamco, ou um order by dinamico no jasper vc tem que dizer pra ele que tambem eh dinamico.
Eh soh usar assim:

no lugar de :

$P{condicoes}

use:

$P!{condicoes}

ou seja… adicione o ’ ! ’ depois do P…

[]s

Se a dica do lvffilho não te ajudar você pode tentar usar um case when na sql

Ou outra…

trata direto no teu sql…

por exemplo…

SELECT * FROM
TABLE1
INNER JOIN TABE2 ON…
WHERE (TABLE1.CAMPO1 = $P{PARAMETRO} OR $P{PARAMETRO} IS NULL)
AND (TABLE1.CAMPO2 = $P{PARAMETRO2} OR $P{PARAMETRO2} IS NULL)

[]s

Mi_Michele,

se der tudo errado, você pode fazer a pesquisa no seu programa e passar um List para o iReport, isso evita regra de negócio em relatório, e por experiência própria, isso pode dar creca, hehehe.

vlw

Não deu certo não… nem colocando o ‘!’ antes …

Quando eu tento algo do tipo:

select campo from tabela where $P!{condicoes}

Dá o seguinte erro:

Error:SQL problems:ORA-00920:invalid relational operator

O parâmetro precisa ser de algum tipo em especial?..

e nem tratando o select!!.. :frowning:
Como seria essa idéia de passar um list pro ireport… ?.. seria passar o resultado do select ?..

Valew…

Olá!

O esquema da exclamação tem que dar certo sim, onde vc está declarando este SQL?

olá, eu estou enfrentando exatamente o mesmo problema

eu tenho o select

c.dataPag is null
    and p.numeroEndereco = $P{idRua}
    and c.id             = $P{NumeroConta}
    and c.dataVence between $P{dataincio} and $P{datafim}

porem os campos nao sao obrigatorios
para data eu ate pensei em colocar um case,
algo como

se o usuario nao digitar nada seria entre 1900 e 2100
porem para os campos de rua e numero de conta, o ideal seria nem os considerar ja que o cliente pode resolver gerar todas as contas ou de todas as ruas.

nesse caso eu preciso que o codigo anterior vire esse

c.dataPag is null
//--    and p.numeroEndereco = $P{idRua}                                            // linha desconsiderada
//--    and c.id             = $P{NumeroConta}                                    // linha desconsiderada
//--    and c.dataVence between $P{dataincio} and $P{datafim}        // linha desconsiderada

o jeito mais simples é tirar esse sql do relatório e fazer em java, montar a lista e passar para o relatório por JRBeanCollectionDataSource. Pronto é melhor pra vc e pra pessoa que for dar manutenção…

obrigado amigo,
eu fiz assim mesmo, ficou bem melhor,

o relatorio tem o select seguido de um unico parametro que eu gero na aplicacao,
ficou realmente muito melhor.

se alguem precisar de um exemplo fale comigo =)