iReport - Ajuda básica [Não resolvido]

11 respostas
B

Galera,

Configurei no meu relatório (.jrxml) o parâmetro $P{SUBREPORT_DIR} que é do tipo Object. Tenho em um arquivo .jar com os meus relatórios compilados (.jasper). No meu código tento passar o valor para o parâmetro $P{SUBREPORT_DIR} da seguinte forma:

URL pathSubRelDetalhe = getClass().getClassLoader().getResource("RelatorioGeral_subreportPausasDetalhe.jasper");
......
......
Map<String, Object> paramsRelGeral = new HashMap<String, Object>();
paramsRelGeral.put("SUBREPORT_DIR", pathSubRelDetalhe.getPath());

São lançadas as seguintes exceptions:

net.sf.jasperreports.engine.JRException: Error loading object from URL : file:/C:/Documents%20and%20Settings/Bruno%20Leonardo/Meus%20documentos/NetBeansProjects/Gerencia/relatorios.jar!/RelatorioGeral_subreportPausasDetalhe.jasper
......
......
Caused by: java.io.FileNotFoundException: C:\Documents and Settings\Bruno Leonardo\Meus documentos\NetBeansProjects\Gerencia\relatorios.jar!\RelatorioGeral_subreportPausasDetalhe.jasper (O sistema não pode encontrar o caminho especificado)

Alguém tem uma ideia de como passar esse parâmetro para o relatório de forma que ele “enchergue” o .jasper?

11 Respostas

lcegatti

Ele está tentando pegar o arquivo pelo caminho fisico:

C:\Documents and Settings\Bruno Leonardo\Meus documentos\NetBeansProjects\Gerencia\relatorios.jar!\RelatorioGeral_subreportPausasDetalhe.jasper

Mude para:

InputStream is = this.getClass().getClassLoader().getResourceAsStream("RelatorioGeral_subreportPausasDetalhe.jasper");

O Jasper também aceita um InputStream como parâmetro.

[]'s

B

Já havia tentado dessa forma, mas ele da pau de cast (de InputStream para String).

java.lang.ClassCastException: sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream cannot be cast to java.lang.String

Aí mudei o tipo de $P{SUBREPORT_DIR} para InputStream e também não deu. Alguma outra sugestão?

lcegatti

Deu algum erro quando você passou o InputStream ? Você lembra qual foi(caso tenha ocorrido :smiley: ) ?

[]'s

B

lcegatti:
Deu algum erro quando você passou o InputStream ? Você lembra qual foi(caso tenha ocorrido :smiley: ) ?
[]'s

Quando passo o InputStream para o parâmetro sendo ele do tipo Object dá o seguinte erro de cast:

java.lang.ClassCastException: sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream cannot be cast to java.lang.String

Qunado altero meu relatório, e definido o tipo do parâmetro como InputStream ele dá outro erro bastante diferente:

32 [RelatorioGeral_subreportPausasDetalhe subreport filler] ERROR fill.JRFillSubreport  - Fill 30545452: exception
net.sf.jasperreports.engine.JRException: Unknown column name : MotivoDet
  • Embora ele não tenha achado essa coluna, ela existe e seu nome está certo no código e no iReport!!!
lcegatti

Bruno_Leonardo:

  • Embora ele não tenha achado essa coluna, ela existe e seu nome está certo no código e no iReport!!!

Em qual código no Java ?

No ireport vc tem que criar ela como Field ou Parameter, se vc apenas definiu no seu text $F{MotivoDet } e não criou ela no Field ocorre este erro (mas provavelmente nem compilaria o .jasper).

Você está passando algum DataSource ou é uma consulta SQL que alimenta os dados do relatório ?

A passagem do sub como parâmetro deu certo pelo jeito.

[]'s

B

O Field eu defino corretamente.

Estou passando um datasource, que são os dados de uma table swing.

Pelo jeito sim. :wink:
Segue parte do meu código:

InputStream pathRelGeral = getClass().getClassLoader().getResourceAsStream("RelatorioGeral.jasper");
            InputStream pathSubRelDetalhe = getClass().getClassLoader().getResourceAsStream("RelatorioGeral_subreportPausasDetalhe.jasper");
            InputStream pathSubRelResumo = getClass().getClassLoader().getResourceAsStream("RelatorioGeral_subreportPausasResumo.jasper");
           
            // PAUSA RESUMO (Segundo subrelatorio)               
            ListaLoginPausaAgentesPausasTableModel tmPausaRes = (ListaLoginPausaAgentesPausasTableModel) jXTablePausasResumo.getModel();
            tmPausaRes.setColumnName(0, "MotivoRes");
            tmPausaRes.setColumnName(1, "PausaRes");
            tmPausaRes.setColumnName(2, "PercentRes");

            // PAUSA DETALHE (Primeiro subrelatorio)  
            PausaDetalheTableModel tmPausaDetalhe = (PausaDetalheTableModel) jXTablePausasDetalhe.getModel();
            tmPausaDetalhe.setColumnName(0, "MotivoDet");
            tmPausaDetalhe.setColumnName(1, "DataDetI");
            tmPausaDetalhe.setColumnName(2, "HoraDetI");
            tmPausaDetalhe.setColumnName(3, "DataDetT");
            tmPausaDetalhe.setColumnName(4, "HoraDetT");
            tmPausaDetalhe.setColumnName(5, "DuracaoDet");
            Map<String, Object> paramsRelPausaDet = new HashMap<String, Object>();
            paramsRelPausaDet.put("SUBREPORT_DIR", pathSubRelResumo);

            // LOGIN/LOGOUT (Relatório Principal)  
            AgentesLoginLogoutTableModel tmLoginLogout = (AgentesLoginLogoutTableModel) jXTableLoginLogout.getModel();
            tmLoginLogout.setColumnName(0, "Data1");
            tmLoginLogout.setColumnName(1, "Hora1");
            tmLoginLogout.setColumnName(2, "Data2");
            tmLoginLogout.setColumnName(3, "Hora2");
            tmLoginLogout.setColumnName(4, "Duracao");
            Map<String, Object> paramsRelGeral = new HashMap<String, Object>();
            paramsRelGeral.put("SUBREPORT_DIR", pathSubRelDetalhe);
            paramsRelGeral.put("agente", jComboBoxAgente.getSelectedItem().toString());
            paramsRelGeral.put("dataini", dataini);
            paramsRelGeral.put("datafim", datafim);
            paramsRelGeral.put("TempoLivre", jLabelTempoDuracao.getText());
            paramsRelGeral.put("Percent", jLabelTotalPercentual.getText());
            paramsRelGeral.put("relPausaResumo", new JRTableModelDataSource(jXTablePausasResumo.getModel()));
            paramsRelGeral.put("relPausaDet", new JRTableModelDataSource(jXTablePausasDetalhe.getModel()));
lcegatti

Véio aparentemente ta tudo certo no seu código, ta muito estranho isso ai :?

B

Velho, nem fala! Já conferi todos os fiels do relatório e todos estão “verdes” indicando que o field está correto.
Mas valeu pela ajuda!!! Continuarei na batalha de desvendar este erro!!!

keller

Provavelmente isso é de um subReport certo?

Unknown column name : MotivoDet

Tens algum outro relatorio com subReport funcionando da uma conferida nos codigos acho que ta faltando algo por ai cara…

Boa sorte! :thumbup:

B

keller:
Provavelmente isso é de um subReport certo?

Unknown column name : MotivoDet

Tens algum outro relatorio com subReport funcionando da uma conferida nos codigos acho que ta faltando algo por ai cara…

Boa sorte! :thumbup:

Sim isso mesmo, MotivoDet é uma coluna de um subrelatório. O problema é que este é o primeiro relatório com subrelatórios que faço. Mas porque vc perguntou se MotivoDet é uma coluna de um subreport? Alguma sugestão?

keller

http://www.furutani.eti.br/tutoriais/Tutorial_Sub_Relatorio_ArrayList.pdf

http://br.geocities.com/robertofurutani/java/Tutorial_JasperReports/

Criado 20 de outubro de 2008
Ultima resposta 22 de out. de 2008
Respostas 11
Participantes 3