Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pass a List of JRBeanCollectionDataSource to a subreport

I am generating a report from a JRBeanCollectionDataSource. This report is about a customer's order.

This is my code

public class Customer
{
    private String customerName;
    private String customerNo;
    private String customerAddress;
    private ArrayList<CustomerOrder> customerOrders;
    //Getters and Setters
}


private class CustomerOrder
{
    private String itemName;
    private BigDecimal amount;
    private int itemQuantity;
    //Getters and Setters
}

When a customer a report containing the customer details and a list of the customer orders need to be generated. Since JRBeanCollectionDataSource takes a collection, this is what i did.

Customer cust; //Customer Instance

ArrayList<Customer> custList = new ArrayList<Customer>();
custList.add(cust); 

JRBeanCollectionDataSource rptData = new JRBeanCollectionDataSource(custList);

How can i extract the CustomerOrder list in Customer and pass it as a subreport?

like image 495
Uchenna Nwanyanwu Avatar asked Nov 14 '12 18:11

Uchenna Nwanyanwu


1 Answers

You should be able to set the datasource expression for the subreport:

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{customerOrders})

The resulting xml should have a subreport tag that resembles:

<subreport>
    <reportElement uuid="e9fc4a60-3844-41b7-a38c-768f06f09b44" x="0" y="57" width="555" height="68"/>
    <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{customerOrders})]]></dataSourceExpression>
    <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "report2_subreport1.jasper"]]></subreportExpression>
</subreport>

The only other thing you need to check is that the Language for the report properties is set to Java.

like image 170
Jacob Schoen Avatar answered Nov 10 '22 14:11

Jacob Schoen