[Resolvido] Chamar sub-relatório em classe java

4 respostas
C

Bom dia.
Li diversos posts sobre como chamar um sub-relatório do iReport em uma classe java, mas nenhum conseguiu me ajudar.
O meu sub-relatório está na mesma pasta que o relatório pai, só que não posso definir todo o caminho fixo, pois o relatório será usado em 2 servidores diferentes.
Teria como eu chamar somente pela pasta onde está o relatório?
Como por exempo, a minha pasta final é a pasta "apps".

Map < String, Object > parametros = new HashMap < String, Object > ();
		parametros.put("NfeId", nfs);
		parametros.put("SUBREPORT_DIR", "apps/");
		try 
		{
			
			URL path = getClass().getResource("FRK_RelExpedicoes.jasper");			
			JasperPrint jasperPrint = JasperFillManager.fillReport(path.openStream(), parametros, DB.getConnectionRO());
			JasperViewer.viewReport(jasperPrint, "Relatório de Expedições");
        } 
		catch (Exception ex) 
		{
			Log.warn("Falha ao imprimir relatório de Expedições.");
		}
E se eu passar o caminho do SUBREPORT_DIR por parâmetro, no ireport deixo em branco? Se eu tiro o subreport do meu relatório, ele abre normal... se eu deixo, ele nem abre :cry: Se alguém puder me ajudar obrigada. :)

4 Respostas

J

Você pode tentar algo similar a isto:

...

InputStream f = null;
InputStream subReport1, subReport2 = null;
InputStream inputStream = null;

...

String jasperName = "relatorio.jasper";
String path = "/apps/relatorio/layout/";
inputStream = getClass().getResourceAsStream(path + jasperName);
subReport1 = getClass().getResourceAsStream(path + "subreport1.jasper");
subReport2 = getClass().getResourceAsStream(path + "subreport2.jasper");

...	

parametros.put("sub1", subReport1);
parametros.put("sub2", subReport2);

...

E no ireport no componente do seu subrelatorio você configura:
Subreport expression: $P{seu parametro}
Expression class: java.io.InputStream
Using cache: marcar

Sem contar a opção de connection type e data source expression de acordo com seu data source.

Espero que ajude.

F

Eu tive um problema sério pra conseguir fazer um sub-relatório funcionar em outros computadores, mas consegui assim:

C

[quote=fasts]Eu tive um problema sério pra conseguir fazer um sub-relatório funcionar em outros computadores, mas consegui assim:

No meu caso seria

URL web = getClass().getResource("../apps/FRK_RelExpedicoes_Sub.jasper"); parametros.put("SUBREPORT_DIR", web.toString());
porque uso linux…
mas e no campo “Default Value Expression” do SUBREPORT_DIR no iReport, coloco o que?
porque ali vai só o caminho e no campo “Subreport Expression” do subreport, vai o SUBREPORT_DIR+o nome do relatório… coloco o que?

Obrigada

C

No campo “Default Value Expression” do SUBREPORT_DIR no iReport deixei em branco e no código deixei só a pasta dai no campo “Subreport Expression” do subreport deixei como estava.

URL web = getClass().getResource("../apps/"); parametros.put("SUBREPORT_DIR", web.toString());

Obrigada a todos :smiley:

Criado 28 de junho de 2012
Ultima resposta 28 de jun. de 2012
Respostas 4
Participantes 3