[Resolvido] iReport/JasperReport - Uso de subdatasets em crosstabs

Olá, pessoal

Eu preciso preencher uma crosstab do meu relatório com uma subdataset, já que os dados do preenchimento se encontram em outra datasource, diferente do relatório principal. Eu criei o subdataset e os fields que eu quero que apareçam na crosstab dentro do subdataset.

Depois eu fui em “Crosstab data” -> “Dataset run” -> “Sub dataset” e selecionei o dataset que eu tinha criado. Selecionei ainda em “Connection/Datasource expression” a opção “Use datasource expression” (já que meu datasource é uma coleção do tipo JRBeanCollectionDataSource) e coloquei como valor “P{REPORT_DATA_SOURCE}”.

Quando tento exibir o relatório no iReport, não aparecem os dados na crosstab, aparece só uma página vazia. Já usando JasperFillManager no código Java, o relatório também fica vazio.

Alguém teria alguma sugestão sobre o que possa estar acontecendo?

O JRBeanCollectionDataSource é bastante flexível e simples de usar, mas possui algumas limitações: quando se cria um conexão desse tipo no iReport, não é uma conexão real que é criada, mas uma expressão do tipo “P{REPORT_DATA_SOURCE}”. Sendo assim, não é possível utiliza-la integralmente no subdataset, pois esse tipo de estrutura só se beneficia de conexões reais com o banco de dados e consultas do tipo SQL.

A minha solução foi usar o JRBeanCollectionDataSource para retornar listas dos objetos reais de que precisava para preencher a crosstab. Já o subdataset, usei apenas para conter os fields reais e criar a crosstab. Na crosstab, usei o subdataset como conexão e usei de novo a opção “Use datasource expression”, só que dessa vez passando o field com a lista de objetos, como expressão. Ficou algo como “new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{listaDeDados})”.