Relatórios Dinâmicos com IReport!?

10 respostas
B

Boa tarde pessoal,
Estou usando o IReport 3.5.2, e me passaram a missão de fazer relatórios dinâmicos, ou seja, em tempo de execução eu defino qual SQL eu quero executar.
E então o sql é colocado no .jasper de acordo com as tabelas (ComboBox ou Checkbox) escolhidas pelo cliente.
Tudo isso integrado a um projeto em JSF.

Peguei umas video-aulas do ireport e vi alguns exemplo, mas nao consegui o que eu queria.
o máximo q eu consegui foi gerar o relatório com a query do IReport, e tambem fazer subqueries.

Como posso passar o SQL como parametro ?
Como devo preparar o ireport pra receber o parametro ?

:arrow: Qualquer ajuda agradeço!

10 Respostas

V

Ola…

Voce nao passa a query, vc passa um List como dataSource, assim vc consegue fazer que quiser, efetua a pesquisa via programacao e passa o list do resultado.

veja este post
http://www.guj.com.br/posts/list/131450.java#708006

M

brunosales85:
Boa tarde pessoal,
Estou usando o IReport 3.5.2, e me passaram a missão de fazer relatórios dinâmicos, ou seja, em tempo de execução eu defino qual SQL eu quero executar.
E então o sql é colocado no .jasper de acordo com as tabelas (ComboBox ou Checkbox) escolhidas pelo cliente.
Tudo isso integrado a um projeto em JSF.

Peguei umas video-aulas do ireport e vi alguns exemplo, mas nao consegui o que eu queria.
o máximo q eu consegui foi gerar o relatório com a query do IReport, e tambem fazer subqueries.

Como posso passar o SQL como parametro ?
Como devo preparar o ireport pra receber o parametro ?
:arrow: Qualquer ajuda agradeço!

Acho que você tá querendo algo como isso aqui:

http://dynamicjasper.sourceforge.net/index.html

Exemplo:
http://dynamicjasperplayground.fdvs.com.ar/ar.com.fdvs.dj.example.djApp/djApp.html

[]'s
JL

B

Sim JL, é isso mesmo que eu to querendo.
Inclusive eu ja tinha visto esse exemplo e ja tinha baixado umas APIs do dynamic jasper.
mas ainda nao sei como implementa-lo.

se alguem tiver alguma coisa de dynamic jasper seria de grande ajuda!

[]´s

B

Ou isso ou então utilizar o IReport!
Só que nessa versão 3.5.2 eu nao to sabendo como criar os parâmetros.
Eu crio o query … Where id = $P{Param} , só que o IReport desconhece o $.
creio que se deva fazer alguma coisa pra adicionar esses parametros…
nao sei o que é!

mas continuo procurando!

[]´s

M

Faça assim, usando a exclamação:

[]'s
JL

B

tentei rolar esse query no IReport:

SELECT
municipio.“id_municipio” AS municipio_id_municipio,
municipio.“sg_municipio” AS municipio_sg_municipio,
municipio.“nm_municipio” AS municipio_nm_municipio
FROM
“public”.“municipio” municipio
WHERE
id_regiao_integracao = $P!{municipio_id_regiao_integracao}

e o erro foi esse:

Error: SQL problems: ERROR: syntax error at or near “= $”

Como eu tava dizendo, creio que tenho que fazer algo no ireport…
so nao sei como!
as informacoes que vi nao solucionaram minha duvida!

[]´s

B

opa!
consegui criar os parâmetros!
logo mais entrarei com mais duvidas, so que desta vez sobre a aplicação.

obrigado ae!

B

Fala galera!
como prometido eu disse que ia voltar!
hehe! dito e feito!
seguinte, ja consegui passar um sql como parametro, a onda agora é como deixar o layout do jasper preparado pra receber o SQL.

public JasperPrint gerar() throws ExcecaoRepositorio{
	JasperPrint rel = null;
	try {
		Connection con = Conexao.getConnection();
		HashMap map = new HashMap();
		
		String query = "select  mun.nm_municipio as NomeMunicipio, "+
		" tem.aa_referencia as AnoReferencia , "+
		"ds_item_dado as DescItem, "+
		"his.vr_historico as ValorItem "+
	"from     hist_item_dado his, "+
		"item_dado      item, "+
		"municipio      mun, "+
		"tempo          tem "+
	"where    mun.id_municipio in (1501402)    and "+
		"mun.id_local     =   his.id_local        and "+
		"his.id_item_dado = item.id_item_dado     and "+
		"his.id_tempo     in (6)                  and "+
		"item.id_item_dado in (3219)    and "+
		"his.id_tempo    =  tem.id_tempo ";
		map.put("regInt",query);
		String arquivoJasper = "Municipio.jasper";
		rel = JasperFillManager.fillReport(arquivoJasper, map, con);
	} catch (JRException e) {
		JOptionPane.showMessageDialog(null,e.getMessage());
	}
	return rel;

}}

eis o codigo da aplicação. a aplicação esta ok !

Preparei o layout do arquivoJasper pra receber esses campos, porém eu passo o SQL como parametro -> $P!(SQL)
Aí ja que o SQL depende da aplicação entao, o ireport n deixa compilar pq nao encontra os campos!

hehe

espero ter sido claro desta vez!
agradeço a ajuda desde ja!
[]´s


R

Olá!

Então amigo, vamos ver se entendi…

Eu faço o que vc quer normalmente. Tenho no meu jasper um parâmetro chamado parSql e jogo nele uma string que contém meu SQL. Ai uso ele com o $P!{parSql}, como vc já disse.

Parece que seu problema agora é que o jasper não compila pq vc não tem os campos, afinal, ele não consegue “resolver” o parSql e criar os campos, é isso?

Bem, eu solucionei isso facilmente criando os campos “na mão”! Isso mesmo! Vá até a lista de campos e crie-os manualmente, o jasper vai compilar e tudo vai ficar ok. Ah! Mas presta atenção! Vc tem que criar os campos certinhos da forma como eles serão trazidos pelo sql (quero dizer nome, tipo e tamanho), senão vc terá erros em tempo de execução do seu relatório.

Boa sorte!
[]'s - Renata

B

Beleza! Resolvido!

XD

Obrigado a todos!

Criado 8 de julho de 2009
Ultima resposta 13 de jul. de 2009
Respostas 10
Participantes 4