Would anyone explain me how to add a data source to a "part" of a Report Book?


I am trying to add a data source to a "part" of a Report Book. Or I should say passing the information to the fields on that "part" of the ReportBook( or why not, the Main Report). I have come to realize that this is not exactly how things were done with MainReport and Subreport(s). This is a new concept of jasper 6.2.0, so is not exactly the old known subreport and traditional way of doing things(or is it? Do not know..., please if you don't main, explain that too, thanks).

I have read a lot of examples out there ( see one here), of how to pass data source through jasper parameters and then, utilize those parameters referenced  in <dataSourceExpression>, but it does not seem to be the same way when working with "parts" of a Report Book.

I can provide more information, but essentially what I need is to pass that data source to the part, that refer to my other report (or subreport if you will) named Content.jrxml, so the other report can print/render the right information of those fields. This report contains fields and no information is passing to those fields there went I print the Report Book to pdf. those fields are showing as null.

However I am able to pass parameters successfully is just with passing the fields values and the data source  in general, which I have a problem

Does anyone have done  or deal with this before or knows of a good example/tutorial that could point me to the solution?

Please help me, I don't know what else to do :(

Thanks in advance!

alestar's picture
Joined: Jan 25 2016 - 1:19pm
Last seen: 5 years 4 months ago

2 Answers:

Sorry, it took me a long time to post back.

I find a solution after Theodor (Jasper API main author give me some insights) and here is it! So, for the Jasper Report engine to handle multiple data sources passed to the report, you have to take into account 2 essential things:

First, for every data source that you want to pass to the Report, you will need to create a new instance. Jasper engine consumes each data source iterating over all the elements in it. When it gets to the next page, there won't be any data, fields or information to read from and fill up the fields on that particular page. Therefore, information won't show up (null) or "blank", depending on the report template configuration.


Last, make sure you pass a new JREmptyDataSource() when filling the report and pass the data sources instance as parameters, and later as sub-parameters for each individual page. Like this:


jasperPrint = JasperFillManager.fillReport(jasperReport, jasperParameter,new JREmptyDataSource() );

That way main report, or the wrapping report (the book), does not use any data source of the pages instances (if it does not need it, of course) and each page will get a data source, through the parameters.

Ultimately, on runtime, it the page of the book can consume individually each data source without affecting each other.

Let me know if this makes any sense? Thanks

alestar's picture
Joined: Jan 25 2016 - 1:19pm
Last seen: 5 years 4 months ago


Recently, I worked out a real time solution on table of contents, book marks with the help of exsiting example which is 17th one in out of the box report examples.

Try looking into it. I was able to pass parameters from book to parts(JRXMLS) and parts to sub reports(JRXMLS).

sadakar's picture
Joined: Aug 14 2012 - 3:57am
Last seen: 7 months 2 weeks ago