贾斯珀子报告

时间:2014-12-13 05:31:55

标签: java jasper-reports javabeans subreport

苦苦挣扎了一个星期,是的,由于之前关于同一主题的帖子,我没有完全进步。

两份报告:

Master Report - Contains company info
Sub Report - Contains 1..* company orders in detail list

数据源是从pojo数组列表构建的:

主报告:

<parameter name="SUB_REPORT" class="java.lang.Object"/>
<queryString>
  <![CDATA[]]>
</queryString>
<field name="companyName" class="java.lang.String">
  <fieldDescription><![CDATA[companyName]]></fieldDescription>
</field>
<field name="companyOrders" class="java.util.List">
  <fieldDescription><![CDATA[companyOrders]]></fieldDescription>
</field>
<background>
  <band splitType="Stretch"/>
</background>
<pageHeader>
  <band height="214" splitType="Stretch">
    <textField>
      <reportElement x="415" y="5" width="40" height="14" uuid="f03490b8-4ab1-4d61-a0d6-f43214dd1c1c"/>
      <textElement>
        <font isBold="false"/>
        <paragraph lineSpacing="Single" lineSpacingSize="2.0"/>
      </textElement>
      <textFieldExpression><![CDATA["Date:"]]></textFieldExpression>
    </textField>
    <textField>
      <reportElement x="1" y="110" width="99" height="14" uuid="e82847e9-7235-45d6-9eeb-0f5d2fc2622c"/>
      <textElement>
        <font isBold="false"/>
        <paragraph lineSpacing="Single" lineSpacingSize="2.0"/>
      </textElement>
      <textFieldExpression><![CDATA["Business Name:"]]></textFieldExpression>
    </textField>    
    <textField>
      <reportElement x="113" y="110" width="252" height="15" uuid="68e891b9-cd70-4b65-90f3-b11866446f4a"/>
      <textFieldExpression><![CDATA[$F{companyName}]]></textFieldExpression>
    </textField>
  </band>
</pageHeader>
<columnHeader>
  <band height="17" splitType="Stretch">
    <staticText>
      <reportElement x="0" y="2" width="100" height="15" uuid="309582cb-bde5-4a37-a97b-c9058fc5e184"/>
      <text><![CDATA[Order Num]]></text>
    </staticText>
    <staticText>
      <reportElement x="110" y="2" width="100" height="15" uuid="a6fb5059-8126-4ae2-be9c-a5d0ed700ef9"/>
      <text><![CDATA[Order Amount]]></text>
    </staticText>
    <staticText>
      <reportElement x="220" y="2" width="100" height="15" uuid="198d15de-1484-41cc-b2b0-66b8a75c106d"/>
      <text><![CDATA[Order Date]]></text>
    </staticText>
    <staticText>
      <reportElement x="369" y="2" width="100" height="15" uuid="d142e6aa-0ff5-416f-b367-d639a287aadd"/>
      <text><![CDATA[Order Paid]]></text>
    </staticText>
  </band>
</columnHeader>
<detail>
  <band height="28" splitType="Stretch">
    <subreport>
      <reportElement x="1" y="4" width="468" height="21" uuid="77507436-37c6-4f8e-bc13-3997be8ffbee"/>
      <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{companyOrders})]]></dataSourceExpression>
      <subreportExpression><![CDATA[$P{SUB_REPORT}]]></subreportExpression>
    </subreport>
  </band>
</detail>

子报告:

<field name="orderNum" class="java.lang.Long">
    <fieldDescription><![CDATA[orderNum]]></fieldDescription>
</field>
<field name="orderTotal" class="java.lang.Double">
    <fieldDescription><![CDATA[orderTotal]]></fieldDescription>
</field>
<field name="orderDate" class="java.sql.Timestamp">
    <fieldDescription><![CDATA[orderDate]]></fieldDescription>
</field>
<field name="orderPaid" class="java.lang.Integer">
    <fieldDescription><![CDATA[orderPaid]]></fieldDescription>
</field>
<background>
    <band splitType="Stretch"/>
</background>
<detail>
    <band height="24" splitType="Stretch">
        <textField>
            <reportElement x="0" y="3" width="100" height="15" uuid="d356cc51-325b-43c3-ab2d-dc9f5041d3e4"/>
            <textFieldExpression><![CDATA[$F{orderNum}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="110" y="3" width="100" height="15" uuid="d91fd44f-12f9-4c67-aaca-24c7efa6c75c"/>
            <textFieldExpression><![CDATA[$F{orderTotal}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="222" y="3" width="100" height="15" uuid="af910428-2309-4159-ba5e-c29748f00b6f"/>
            <textFieldExpression><![CDATA[$F{orderDate}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="369" y="3" width="100" height="15" uuid="2921437b-8146-41e4-86fa-6b5ec39f4d65"/>
            <textFieldExpression><![CDATA[$F{orderPaid}]]></textFieldExpression>
        </textField>
    </band>
</detail>

我用来在运行时编译和打印报告的java代码:

CompanyMapper cm = new CompanyMapper();         
this.company = cm.getCompanyByID((Long) httpRequest.getSession().getAttribute("userCompanyID"));
List<ACompany> c = new ArrayList<ACompany>();
List<AOrder> companyOrders = getOrders(getParameterInt("orderStatus"));

c.add(this.company);

String reportFolder = httpRequest.getServletContext().getRealPath("/").replace('\\', '/') + "reports/";         
String invoice = reportFolder + ReportManager.getProperty("orders");            
String orders = reportFolder + ReportManager.getProperty("orderList");
File invoiceFile = new File(invoice);
File orderFile = new File(orders);
msgHelper = new MessageHelper();        

JasperReport jasperMasterReport = JasperCompileManager.compileReport(invoiceFile.getAbsolutePath());
JasperReport jasperSubReport = JasperCompileManager.compileReport(orderFile.getAbsolutePath());

Map<String,Object> parameters = new HashMap<String,Object>();                       
parameters.put("SUB_REPORT", jasperSubReport);
parameters.put("SUB_REPORT_DATA", new JRBeanCollectionDataSource(companyOrders));

JasperFillManager.fillReport(jasperSubReport, parameters, new JRBeanCollectionDataSource(companyOrders));
JasperPrint print = JasperFillManager.fillReport(jasperMasterReport, parameters, new JRBeanCollectionDataSource(c));            

公司信息在主报告中显示正常,但是子报告中没有打印详细订单。当我打印子报表时,会显示按预期显示的数据(即订单详细信息)。我只想在主人的细节部分传递子报告,一切都会很完美。

1 个答案:

答案 0 :(得分:0)

如果您想在报告中使用“companyOrders”作为字段,则必须将其放入“ACompany”POJO中,或多或少是这样:

public class DataBean {
    private String companyName;
    private List<AOrder> companyOrders;
}
相关问题