Popular SubRelatorio com Ireport e JasperReports

18 respostas
Pedrosa

Olá, estou tentando montar um relatório com DataSource em XML, mas os valores do subreport estão vindo como Null, minha classe que le os arquivos gerados pelo IReport está assim:

public static void main(String[] args) throws Exception {
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse("test.xml");
    String recordPath = "/addressbook/category/person";
    String arquivoJasper = "relatorioXML.jasper";
    JRXmlDataSource xmlDataSource = new JRXmlDataSource(doc, recordPath);
    JasperPrint rel = JasperFillManager.fillReport(arquivoJasper,new HashMap(), xmlDataSource);
    JasperViewer.viewReport(rel, false);
}

Minhas configurações estão conforme as imagens abaixo, alguém já implementou esse tipo de relatório para dar um help?





18 Respostas

ze_kiefa

Adicione a variável $P{SUBREPORT_DIR} e o seu respectivo valor ao Hashmap.

Pedrosa

E como exatamente fazer isso?, sem querer abusar.

ze_kiefa
HashMap parametros = new HashMap();
parametros.put("SUBREPORT_DIR", "diretorio");
JasperPrint rel = JasperFillManager.fillReport(arquivoJasper,parametros, xmlDataSource);

Todos os parâmetros que você definir no iReports, o JasperReports os buscará no HashMap que você passar como parâmetro para JasperFillManager.fillReport().

Pedrosa

Criei essa variável porém não compila, e estranho que nem dá erro simplesmente não gera o .jasper

ze_kiefa

Você não tratou as exceções.
Coloque o seu código em um bloco try/catch e confira qual a exceção que está (se está) sendo lançada.

OK?

Pedrosa

Não é no Java e sim Ireport que não esta gerando .jasper, alguma configuração errada ainda, pois se eu apago o subrelatorio ele gera o .jasper corretamente.

ze_kiefa

Se eu não me engano, o parâmetro $P{SUBREPORT_DIR} você não precisa definir no iReports, pois quando você adiciona um subrelatório, o próprio iReports se encarrega disso.

Experiento retirar esse parâmetro e ‘reincluir’ (apagar/incluir) o subrelatório novamente.
Verifique também se não falta nenhum parâmetro para o subrelatório.

OK?

ze_kiefa

Se eu não me engano, o parâmetro $P{SUBREPORT_DIR} você não precisa definir no iReports, pois quando você adiciona um subrelatório, o próprio iReports se encarrega disso.

Experiento retirar esse parâmetro e ‘reincluir’ (apagar/incluir) o subrelatório novamente.
Verifique também se não falta nenhum parâmetro para o subrelatório.

OK?

ze_kiefa

Se eu não me engano, o parâmetro $P{SUBREPORT_DIR} você não precisa definir no iReports, pois quando você adiciona um subrelatório, o próprio iReports se encarrega disso.

Experiento retirar esse parâmetro e ‘reincluir’ (apagar/incluir) o subrelatório novamente.
Verifique também se não falta nenhum parâmetro para o subrelatório.

OK?

Pedrosa

Retirei a variável pelo Ireport, mas não traz os valores do sub ainda. estou anexando os arquivos.

Pedrosa

Alguma sugestão, palpite?

Os valores ainda estão chegando como null no subrelatório.

ze_kiefa

Eu testei e o mesmo resultado: o sub-relatório vem vazio.
Se eu executo apenas o sub-relatório, os dados vem.

Veja se as configurações conferem:

1. Relatório
Query: /addressbook/category/person
Campos: LASTNAME, FIRSTNAME, ID, EMAIL

2. Sub-Relatório
Query: /addressbook/category/person[@id=$P{ID}]
Campos: EMAIL
Parâmetros: $P{ID}

Fonte de dados: arquivo XML denominada fonteXML

Pedrosa

A parte do subrelatorio esta diferente não tem esse parametro e essa query, você conseguiu roda-lo com os resultados certos?

ze_kiefa

Eu refiz o sub-relatório.
O objetivo é trazer nele apenas os emails de CADA , por isso a query com o parâmetro $P{ID}.
Esse parâmetro eu configurei no relatório mestre para passar para o sub.
Anexei os fontes.

ze_kiefa

Segue uma referência para XPath (é uma SQL para XML).

www.w3schools.com/xpath

Pedrosa

Valeu cara pela força, mas os fontes do subrelatório vieram iguais.

Pedrosa

Valeu cara pela força, mas os fontes do subrelatório vieram iguais.

E agora causam essa Warning:

26/09/2007 12:50:19 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
26/09/2007 12:50:19 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
26/09/2007 12:50:19 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
26/09/2007 12:50:19 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
26/09/2007 12:50:19 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
26/09/2007 12:50:20 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
26/09/2007 12:50:20 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
26/09/2007 12:50:20 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
26/09/2007 12:50:20 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
26/09/2007 12:50:20 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
26/09/2007 12:50:20 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
26/09/2007 12:50:20 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
26/09/2007 12:50:20 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
ze_kiefa

Anexei somente o fonte do sub-relatorio. Teste aí.

Criado 24 de setembro de 2007
Ultima resposta 26 de set. de 2007
Respostas 18
Participantes 2