IREPORT - SubFormulário

3 respostas
D

Iae pessoal beleza?

Eu estou com o seguinte problema:

Atualmente estou utilizando IREPORT para o desenvolvimento de relatórios aqui em meu serviço. Porém eu me deparei com uma situação. Antes eu criava relatório baseados em consultas a um banco de dados. E agora eu tenho que utilizar uma camada de persistência criada pelo pessoal aqui.

Qual foi a solução encontrada? Criei um método que me retornava um JRDataSource então resolvi este problema. Porém em meus relatórios existem SubFormulários e esses eu utiliza da seguinte maneira: eu recuperava como parametro um código que estava em um FIELD de meu relatório principal, e então com base neste código ele realizava uma consulta ao banco de acordo com aquele código, mas agora eu já tenho as informações, logo não necessito mais de realizar esta consulta. Então como eu faço para inserir estes dados, que são uma coleção de objetos, dentro de um subrelatório do meu relatório?

Acho que fui muito confuso hehehe.

3 Respostas

maxguzenski

olha, eu tbm usa JRDataSource, pq vem tudo do hibernate
e eu montei um relatorio com 8 subreports :slight_smile: qual seu problema?

bom, vejamos se entendi… voce nao sabe como fazer, é isso?
é so fazer os relatorio separados, e dentro do principal chamar atraves do subreport. Passando por parametro uma instancia do teu DataSOurce:

new br.com.guj.RelatorioDS();

e passar tbm um Map, dos parametros:
$P{MApDosParametrosParaOSubReport}

e na ultima aba (3º eu acho) dizer qual pe o arquivo do relatorio.

D

Você teria um exemplo???

Vamos ver se entendi.
Eu crio um relatório com seus FIELDS, então eu chamo ele via subreport e lá em SubreportExpression eu coloco new etc.talz.DataSourceJR e lá em paramatros eu mapeio um a um?

Mas no código java eu utilizo da seguinte maneira:

public static ByteArrayOutputStream gerarRelatorio(String path) throws Exception{
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		try {
			JasperReport relatorio = JasperManager.loadReport(path + "recurso.jasper");
			JRDataSource ds = obterDados();
			Map parametros = new HashMap();

			JasperPrint impressao = JasperManager.fillReport(relatorio,parametros,ds);
			JasperPrintManager jpmImpressora = new JasperPrintManager();
			jpmImpressora.printReportToPdfStream(impressao,baos);
		}catch(Exception ex){
			System.out.println(ex);
		}
		return baos;
	}

	private static JRDataSource obterDados() {
		Collection colecao = new ArrayList();
		CabecalhoBean bean = new CabecalhoBean();
		bean.setNumeroAno("6000 / 2004");
		bean.setDataInicio("16/08/2004");
		colecao.add(bean);
	}
}

Como eu adicionaria o datasource também no código?

[color="red"][EDITADO][/color]
Consegui mais ou menos, eu consegui incluir um DTS em um sub dentro de outro sub, porém esse DTS só aparece para a primeira ocorrência do primeiro SUB!

D

Alguem sabe implementar a interface JRDataSource ai???

Criado 25 de outubro de 2004
Ultima resposta 29 de out. de 2004
Respostas 3
Participantes 2