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

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".

[code]Map < String, Object > parametros = new HashMap < String, Object > ();
parametros.put("NfeId", nfs);
parametros.put("SUBREPORT_DIR", "apps/");
try
{

		URL path = getClass().getResource(&quot;FRK_RelExpedicoes.jasper&quot;);			
		JasperPrint jasperPrint = JasperFillManager.fillReport(path.openStream(), parametros, DB.getConnectionRO());
		JasperViewer.viewReport(jasperPrint, &quot;Relatório de Expedições&quot;);
    } 
	catch (Exception ex) 
	{
		Log.warn(&quot;Falha ao imprimir relatório de Expedições.&quot;);
	}[/code]

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. :slight_smile:

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.

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

[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

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: