-1

There are many examples regarding the jasper sub reports, but non of them wasn't enough to get work with my current issue. I wanna set Jasper Sub report inside another sub report. first sub report contains the company list and second sub report use to display the branch and agent details of each company.

Report main object as follows.

public class CompanyData{
  private String comapnyCode; 
  private String companyName; 
  private List<CompanyReportData> records

}

List of companies pass to Jasper report generate.

List<CompanyData> companyList;

Jasper report generation Java code:

   CompanyReportDataList returnDataList = new CompanyReportDataList();
   returnDataList.setCompanyReportData(companyList);
        
   List<CompanyReportDataList > list = new ArrayList<>();
   list.add(returnDataList);
                
   JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(list);

 Map<String, Object> parameters = new LinkedHashMap<>();
    parameters.put("subPath1", templateSub1);
    parameters.put("subPath2", templateSub2);

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource);

CompanyReportDataList class

  public class CompanyReportDataList {
    private List<CompanyData> companyReportData;
  }

Jasper Main Report

<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="MainReport" pageWidth="1000" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="6698cc8d-8fb1-4ee3-ae8e-71751cf1d8c5">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <parameter name="subPath1" class="net.sf.jasperreports.engine.JasperReport"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <field name="companyReportData" class="java.util.List">
        <fieldDescription><![CDATA[companyReportData]]></fieldDescription>
    </field>
 ~~~~~~~~~
 ~~~~~~~~~
 <subreport>
    <reportElement x="0" y="0" width="940" height="30" uuid="efc7e0c7-fba6-4224-9661-f6549524f16a">
        <property name="com.jaspersoft.studio.unit.y" value="pixel"/>
        <property name="com.jaspersoft.studio.unit.height" value="pixel"/>
    </reportElement>
    <dataSourceExpression>
       <![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{companyReportData})]]>
    </dataSourceExpression>
    <subreportExpression><![CDATA[$P{subPath1}]]></subreportExpression>
 </subreport>

Sub Report 1

<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Sub1Report" pageWidth="940" pageHeight="30" columnWidth="940" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="3122c926-c215-4716-9ae5-2e4d036eea35">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <parameter name="subPath2" class="net.sf.jasperreports.engine.JasperReport"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <field name="comapnyCode" class="java.lang.String"/>
    <field name="comapnyName" class="java.lang.String"/>
    <field name="records" class="java.util.List"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <subreport>
      <reportElement positionType="Float" x="0" y="0" width="760" height="15" uuid="21e7bc9e-c4b3-4c20-95d6-3dbac43e834d">
         <property name="com.jaspersoft.studio.unit.y" value="pixel"/>
         <property name="com.jaspersoft.studio.unit.height" value="pixel"/>
         <property name="com.jaspersoft.studio.unit.x" value="pixel"/>
     </reportElement>
         <dataSourceExpression>
            <![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{records})]]>
         </dataSourceExpression>
         <subreportExpression><![CDATA[$P{subPath2}]]></subreportExpression>
    </subreport>

Sub Report 2

<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Sub2Report" pageWidth="760" pageHeight="15" columnWidth="555" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="163c4f3a-27ec-4ece-82ca-069c27d06d1b">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <field name="comapnyCode" class="java.lang.String"/>
    <field name="branchCode" class="java.lang.String"/>
    <field name="branchName" class="java.lang.String"/>
    <field name="agentCode" class="java.lang.String"/>
    <field name="agentName" class="java.lang.String"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <detail>
        <band height="15" splitType="Stretch">
    ~~~
    <subreport>
        <reportElement positionType="Float" x="0" y="0" width="760" height="15" uuid="21e7bc9e-c4b3-4c20-95d6-3dbac43e834d">
            <property name="com.jaspersoft.studio.unit.y" value="pixel"/>
                <property name="com.jaspersoft.studio.unit.height" value="pixel"/>
                <property name="com.jaspersoft.studio.unit.x" value="pixel"/>
        </reportElement>
            <dataSourceExpression>
              <![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{records})]]>
            </dataSourceExpression>
            <subreportExpression><![CDATA[$P{subPath2}]]></subreportExpression>
    </subreport>
    

I think issue is in the data objects setting section to the Jasper files but it's seems so hard to find correct way because of the sub report structure. please add your ideas regarding set data Objects in Main report and sub reports.

Any suggestions or answers are highly appreciate

Sample Report Output

enter image description here

Alex K
  • 22,315
  • 19
  • 108
  • 236
DalusC
  • 391
  • 1
  • 12

1 Answers1

0

Following stack might be help.

How to show data from the java.util.List from JavaBean

*JavaBean contains the java.util.List.*
 
Userinfo {
    private String username;
    private String password;
    List<Address> listAddress;
}
  • The key points of this sample: 1) using of the _THIS expression; 2) using List (jr:list) component in Detail band – john dk Aug 07 '23 at 07:10