JasperReports: Preencher um relatorio com várias collection

7 respostas
G

Ola galera,

como posso preencher um relatorio com mais de uma collection? utilizo o metodo fillReport. um dos seus parametros é um objeto JRBeanCollectionDataSource, q recebe uma collection q preencherá o relatorio. cada collection possui os JavaBeans q comporão o relatorio. se possuo no meu relatorio outros atributos q nao estão presentes nos JavaBeans da minha collection, indica um erro, já q nao podem ser nulos.
como esse metodo so recebe uma collection por vez, nao consigo inserir uma segunda collection, já que os atributos que nao foram preenchidos da primeira vez ficaram nulos, o q causa um erro.
alguem já se deparou com problemas como esse?como solucionaram?

obrigado, guilherme

7 Respostas

C

Guilherme,

Pelo que entendi, você gostaria de exibir dados que estão em beans diferentes, um ao lade do outro, como se tivesse realizado joins em várias tabelas e montado uma visualização para mostrar no seu relatório, certo?

Se for isso, tem algo errado, pois se estas beans se completam, então deveria existir uma bean principal, que faria recefência a estes outros objetos internamente. Neste caso pediria para que você expor seu caso na forma de um exemplo.

Se na verdade o que você estiver querendo é exibir sua bean principal no relatório, e abaixo uma lista de beans associadas, você pode trabalhar com sub-relatórios. Neste endereço tem um pequeno tutorial que demonstra de forma fácil como montar um sub-relatório de uma coleção: http://geocities.yahoo.com.br/robertofurutani/java/Tutorial_JasperReports/

G

o meu relatorio é composto de atributos de varios beans diferentes. esses beans estarão dentro de collections, uma para cada tipo de bean. eu só posso passar uma collection por vez pelo metodo fillReport (). com isso, quando executar esse metodo em uma primeira vez, os atributos referentes ao bean que estou passando serão preenchidos, mas ainda restarão os outros atributos dos outros beans q estão presentes em outras collections. esses beans que restarão ficarão nulos, o q causa o seguinte erro:

net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : dsAtividade

esse campo dsAtividade está presente em outro bean que ainda nao foi passado como parametro de fillReport.

C

Neste caso, acho que só daria para fazer usando sub-relatórios. Dá uma olhada no link que passei e vê se atende o seu problema.

G

Caio,

valeu pela dica, mas esse nao é realmente o meu problema. mas como é bem provavel q encontre problemas como esse seu, tentei fazer um q seguisse os passos do exemplo do tutorial, um VO com um atributo ArrayList, q contem vários VOs respectivamente.
no meu caso, a collection nao era um ArrayList e sim um Set. A principio segui todos os passos do tutorial e ocorre essa mensagem de erro:

net.sf.jasperreports.engine.JRException: Could not load object from location : sub_relatorio.jasper.

vc sabe o q pode ser?

valewwws

R

cara isso pode ser algum erro na chamada do .jasper. verifica tudo nessa chamada, inclusive o diretorio do arquivo

eu gostaria de perguntar um detalhe que deve ter até em outro topico, mas como eu to bem perdido aqui, vou colocar aqui:

eu ja to sabendo que tem que ter o mesmo .jar tanto pro ireport usar e no classpath da aplicacao

mas eu ja modifiquei meu classpath, usei o jasperreports-0.6.4.jar no iReport. e entao coloquei esse .jar no classpath.

mas toda vez que vai rodar dá erro dizendo que o classpath continua com o .jar antigo 0.6.1, muito embora a classe tenha sido serializada pelo novo jar 0.6.4

eu já deletei e recompilei as classes, mas nao teve jeito. eu to setando o classpath pelo eclipse mesmo, adicionando jar. tá errado isso?

o erro é assim:

[color=“blue”]java.io.InvalidClassException: net.sf.jasperreports.engine.base.JRBaseReport;
local class incompatible: stream classdesc serialVersionUID = 604, local class serialVersionUID = 601[/color]
alguem me ajuda ai por favor.

C

Pessoal, aproveitando o topico, alquem tem algum exemplo simples de como pegar os dados de um tb, colocar em uma colection, editar a colection em um Array[][] e depois colocar o array novamente na colection e enviala pra o Relatorio? Sera q alguem me entendeu ??

Pois as minhas dadas estao gravadas da seguinte maneira
aaaaMMdd, so q desejo apresentar a data em ddMMaaaa, alguem pd me ajudar ??

T

Oi pessoal, td bem???

Seguinte,
eu tentei usar o seguinte tutorial como base:
http://geocities.yahoo.com.br/robertofurutani/java/Tutorial_JasperReports/

Soh que eh o seguinte. Eu precisava passar pro meu sub-relatorio um ArrayList de objetos de uma classe que eu fiz.
Qual eh o JRDataSource que eu devo usar? Nao to achando nenhum que aceite um ArrayList.
Eu devo ter alguma referencia à esta classe no ireport para que eu possa mostrar os atributos deste objeto especifico, ou seja, ele chamar os metodos get e set desta classe?

Abraços
Valeu!

Criado 8 de junho de 2005
Ultima resposta 7 de jul. de 2005
Respostas 7
Participantes 5