Comecei a aprender a mexer com o IReport ontem. Até que o desenvolvimento do relatório está legal, pois já trabalhei com desenvolvimento de relatórios usando outras ferramentas.
Este relatório será chamado por uma página JSP e os parametros virão desta página (apesar de que eu não sei como faz isso, mas estou pesquisando como farei…).
Porém, estou precisando de uma ajuda. O select dom meu relatório é esse:
SELECT
convert(varchar(30),getdate(),103) AS datadeemissao,
a."empr_raza_soci",
b."seto_nome",
c."cent_cust_nume",
e."entr_hard_nume_patr",
f."tipo_hard_nome"
FROM
"Empresa" a INNER JOIN "Saida_Hardware" d ON a."IDempresa" = d."IDempresa"
INNER JOIN "Setor" b ON d."IDsetor" = b."IDsetor"
INNER JOIN "Entrada_Hardware" e ON d."IDentradahardware" = e."IDentradahardware"
INNER JOIN "Tipo_Hardware" f ON e."IDtipohardware" = f."IDtipohardware"
INNER JOIN "Centro_Custo" c ON b."IDcentrocusto" = c."IDcentrocusto"
WHERE
d.IDsaidahardware IN ($P!{IDsaidahardware})
GROUP BY
a.empr_raza_soci,
b.seto_nome,
c.cent_cust_nume,
e.entr_hard_nume_patr,
f.tipo_hard_nome
ORDER BY
e.entr_hard_nume_patr ASC
O select está certo, já que eu consigo ver o relatório. Porém, quando eu quero tentar mais de um parametro, não retorna nada.
O teste que eu faço é pela ferramenta do IReport 4.0.1, onde eu peço um prompt do Parametro $P!{IDsaidahardware}. No prompt, se eu colocar o valor 3, o relatório funciona. Se eu colocar no prompt 3,4 , não aparece resultado nenhum.
Aí vem as dúvidas:
Via Prompt eu consigo passar dois valores int distintos para fazer um teste, ou só quando eu passar os valores via página JSP que o relatório será executado como eu quero? Pois no prompt, não consegui colocar dois valores inteiros distintos…
OBS: Se eu substituir o parametro $P!{IDsaidahardware} pela escrita literal 3,4 , funciona. Acredito que estou apanhando mesmo é neste bendito parametro.
Se vc quer vários resultados para o parametro, vai ter que criar algo diferente, exemplo ArrayList de parametros… nao tem como vc atribuir a um String 2 resultados no mesmo momento… é igual java…
String um, dois;
Senhores, obrigado a quem pelo menos leu o tópico.
Após muito pesquisar, consegui colocar a cláusula IN funcionando. O IReport utiliza o parâmetro $X{clausulaINouNOTIN, nomedocampodatabela, nomedoparametro} para tratar os comandos IN ou NOT IN em SQL.
Outro detalhe importante é que é necessário mudar o parâmetro que vai ser passado para java.util.Collection
Com isso, vou colocar o meu comando SQL acertado para o IREPORT
SELECT
convert(varchar(30),getdate(),103) AS datadeemissao,
a."empr_raza_soci",
b."seto_nome",
c."cent_cust_nume",
e."entr_hard_nume_patr",
f."tipo_hard_nome"
FROM
"Empresa" a INNER JOIN "Saida_Hardware" d ON a."IDempresa" = d."IDempresa"
INNER JOIN "Setor" b ON d."IDsetor" = b."IDsetor"
INNER JOIN "Entrada_Hardware" e ON d."IDentradahardware" = e."IDentradahardware"
INNER JOIN "Tipo_Hardware" f ON e."IDtipohardware" = f."IDtipohardware"
INNER JOIN "Centro_Custo" c ON b."IDcentrocusto" = c."IDcentrocusto"
WHERE
$X{IN,d.IDsaidahardware,IDsaidahardware} /*Aqui está a parte diferente do comando acima postado*/
GROUP BY
a.empr_raza_soci,
b.seto_nome,
c.cent_cust_nume,
e.entr_hard_nume_patr,
f.tipo_hard_nome
ORDER BY
e.entr_hard_nume_patr ASC
Agora pode marcar o seu parametro com PROMPT e executar o relatório. Na janela que aparecer, digite o que se deseja, (no meu caso, digitei “3,4”, sem as aspas duplas).