IREPORT + SUBRelatorios

5 respostas
C

Pessoal,
Preciso de uma dica, criei um relatorio com um subrelatorio no Ireport. Dentro do ireport tudo funciona. Só que quando chamo pelo java, o subrelatorio nao aparece.

segue abaixo meu código:

String query = hriquery.montaQuery(relED);	
Map map = new HashMap<String, String>();
map.put("SUBREPORT_DIR", path+"/"); // caminho do subrelatorio
hriRelatorio.geraRelatorioXLS(query, "Ind200PrincipalXls_.jasper", map);
(...)

public void geraRelatorioXLS(String sql, String jasper, Map map) {
		FacesContext faces = null;
		ResultSet rs = null;
		
		try {

			rs = HriQuery.getResultSet("DS", sql);			
			faces = FacesContext.getCurrentInstance();
			HttpServletResponse response = (HttpServletResponse) faces.getExternalContext().getResponse();			
			response.setContentType("application/vnd.ms-excel");
			response.setHeader("Content-disposition","attachment; filename=\"RelTeste.xls\"");

			imprimeXLS(jasper, map, rs,  response.getOutputStream());
                       ...


private static void imprimeXLS(String jasper, Map map, ResultSet rs, OutputStream os) throws IOException, JRException {

		JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);		
		
		JasperPrint jasperPrint;		
		String path = p.getValor("pr.Path_Reports");
		
		try {
		
			jasperPrint = JasperFillManager.fillReport(path + "/" + jasper,	map, jrRS);
                        JRXlsExporter exporter = new JRXlsExporter();
			exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, os);
			exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
			
			exporter.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE,Boolean.TRUE);

			exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE);
                        exporter.exportReport();

5 Respostas

F

Como você está instanciando esse objeto “path”?

C

Dessa forma:

Propriedades p = Propriedades.getInstance("Instancia");
String path = p.getValor("pr.Path_Reports");

eu verifiquei e o caminho esta correto.
esta variavel possui o caminho dos relatorios ( tanto o relatorio principal quanto o sub estao na mesma pasta).

F

Pô, tenta fazer dessa forma:

URL web = getClass().getResource("nome_do_relatorio.jasper");
map.put("SUBREPORT_DIR", web.toString());

Foi a solução que eu tive pro mesmo problema - que me deu bastante dor de cabeça, diga-se de passagem.

C

ocorreu a mesma coisa, ou seja, o subrelatorio nao aparece…

Como ficou o parametro SUBREPORT_DIR no ireport?

F

O subreport expression tá assim:
$P{SUBREPORT_DIR}

E o parâmetro em si não importa, porque será “sobrescrito” pelo código java, mas o default value expression dele tá assim: “meu_relatorio.java”.

Criado 2 de maio de 2012
Ultima resposta 2 de mai. de 2012
Respostas 5
Participantes 2