Problema passando datasource para subreport

Olá a todos,

estou tentando desenvolver um relatório genérico em java com iReport, que exibe alguns campos em um subreport, isso é necessário pois o subreport é configurado por código para carregar informações diferentes para subreports diferentes. Até aqui tudo bem, mas não estou conseguindo passar o datacourse (é um bean criado em java) do relatório pai para o subrelatório e depois ler e exibir as informações desse datasource (os campos do subrelatório ficam mostrando “null”). Sei que o datasource não está vazio pois para testar carreguei alguns campos redundantemente no report pai e no subreport e eles são exibidos com sucesso no pai.

Alguem tem mais informações sobre como proceder para conseguir passar com sucesso um datasource do relatório pai para um subreport?

Kyo,

Estou com este mesmo problema. Você conseguiu resolver?

Abraços

Não sei se é seu caso, mas utilizo esta maneira para passar um java.util.list para o subreport

Na opção Connection type seleciono “Use a datasource expression”

Na opção Data source expression utilizo “new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{listaBean})”

Tchaco,

E de onde viria o field $F{listaBean}?

Obrigado.

Eu envio para o relatorio uma lista pronta.

Ex: Estoque e EstoqueItens

O relatório pai recebe os dados do Estoque e o subrelatorio o EstoqueItens.

O field $F{listaBean} seria o EstoqueItens.

Entendeu?

Tchaco,

Obrigado pela paciência.

Veja só, ainda não entendi direito. Veja minha implementação:

Parte Java:

[code]JasperDesign desenho;
try {

		desenho = JRXmlLoader.load("relatorio_mestre.jrxml");
		
		JasperReport relatorio = JasperCompileManager.compileReport(desenho);
			
		JRBeanCollectionDataSource jDataSource = new JRBeanCollectionDataSource(getDataList()); // getDataList retorna uma lista de Alunos
		
		JasperPrint impressao = JasperFillManager.fillReport(relatorio,	getParameters(), jDataSource);

		JasperExportManager.exportReportToPdfFile(impressao, destFileName);
	} catch (Exception e) {
		e.printStackTrace();
	}[/code]

Daí, no meu relatorio_mestre eu defino o classpath para a pasta bin do projeto.
Em seguida, em “Edit Report Query”, na aba “JavaBean DataSource”, defino o class name como o caminho completo da minha classe Aluno, e escolho os atributos que eu quero que apareça no meu relatório.

Até aqui, tudo bem… Eu consigo ler os atributos no relatório pai.

Entretanto, eu não consigo ler esses atributos num sub-relatório.

Estou usando o iReport 3.7.6

Não sei sei existe outra forma de passar esse bean para o relatório… essa é a única forma que eu sei.

Na criação do sub-relatório, eu faço esses passos:

1- Escolho a opção “Create a new report”
2- Escolho o layout Blank A4 (irrelevante para o problema)
3- Escolho “Empty datasource”
4- Fields - não aparece nenhum para escolher
5- Group - nenhum
6- Store the directory name in a parameter
7- Connection: Acho que é aqui que o “bixo pega”. Estou escolhendo “Use a empty datasource”, mas, pelo que eu entedi, você falou para escolher “Use JRDataSource Expression” e definir a expressão “new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{listaBean})”, não é isso?

Mas não rola não.

Se puder analisar a situação, agradeço mais ainda.

abraço.

Criei um pequeno teste simplificando o problema. Se alguém puder baixar e analisar onde está o erro, agradeço.

p.s.: Não colequei as libs do jasperreport para o arquivo não ficar muito grande.

Edenilton Fr?s, pelo seu exemplo, não tem necessidade de um subrelatório.

Esses dados são apresentados no relatorio pai mesmo.

O subrelatório seria, tipo se vc tivesse, por exemplo, uma entidade AlunoDependentes e esse aluno poderia ter x dependentes.
Entao nos fields do pai, vc declararia a lista de dependentes que seria passada para o subrelatorio onde vc criaria os fields da classe.

Tchaco,

Realmente, não há necessidade nesse exemplo, mas foi só uma simplificação.

O que eu quero, na verdade, é exibir os dados normalmente, e, no canto direito da banda detail exibir um texto. Esse texto deve aparecer uma única vez, independente do número de registro que tenha em minha lista.

Por isso eu pensei em usar subrelatório, mas se houver outra forma, serve.

mais uma vez, obrigado.