JasperReport: Problem mit Subreport

tubamanu

Grünschnabel
Hallo allerseits,

ich versuche gerade mit JasperReport und iReport einen Report zu erstellen. Dabei nutze ich eine XML Datei als DataSource. Mein Problem ist nun folgendes:
Meine XML Datei entählt Bestellaufträge die untereinander aufgelistet werden sollen ( im pdf ). Jeder Bestellauftrag enthält mehrere Artikel.

Mein PDF sieht aktuell so aus

Auftrag 1
Artikel1
Artikel2
Artikel3

Auftrag 2
Artikel1
Artikel2
Artikel3

Das Problem ist jedoch, daß mein Auftrag 1, nur aus Artikel 1 und 2 besteht und mein Auftrag 2 nur aus Artikel 3.

Ich habe schon gesucht und glaube das mein problem beim übergeben des Paramters vom Master zum Subreport auftritt. Leider bin ich momentan ein wenig ratlos....






Mastertemplate

<?xml version="1.0" encoding="UTF-8"?>
<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="report name" pageWidth="595" pageHeight="842" columnWidth="535" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">


<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["C:\\Dokumente und Einstellungen\\praksoft\\Eigene Dateien\\workspace_java\\reportSubTemplate\\template\\"]]></defaultValueExpression>
</parameter>

<parameter name="datasource" class="net.sf.jasperreports.engine.JRDataSource"/>



<field name="packstnumber" class="java.lang.String">
<fieldDescription><![CDATA[packstnumber]]></fieldDescription>
</field>
<field name="packstart" class="java.lang.String">
<fieldDescription><![CDATA[packstart]]></fieldDescription>
</field>
<field name="measure" class="java.lang.String">
<fieldDescription><![CDATA[measure]]></fieldDescription>
</field>
<field name="weight" class="java.lang.String">
<fieldDescription><![CDATA[weight]]></fieldDescription>
</field>
<background>
<band/>
</background>
<title>
<band height="143">
<image>
<reportElement x="325" y="0" width="230" height="70"/>
<imageExpression class="java.lang.String"><![CDATA["C:\\Dokumente und Einstellungen\\praksoft\\Eigene Dateien\\workspace_java\\reportTemplate\\header_left.jpg"]]></imageExpression>
</image>
<staticText>
<reportElement x="0" y="97" width="55" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Packst.-]]></text>
</staticText>
<staticText>
<reportElement x="0" y="110" width="30" height="14"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Nr.]]></text>
</staticText>
<staticText>
<reportElement x="55" y="97" width="55" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Packst.-]]></text>
</staticText>
<staticText>
<reportElement x="55" y="110" width="30" height="14"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Art]]></text>
</staticText>
<staticText>
<reportElement x="137" y="97" width="73" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Abmessung]]></text>
</staticText>
<staticText>
<reportElement x="137" y="110" width="41" height="14"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[in cm]]></text>
</staticText>
<staticText>
<reportElement x="237" y="100" width="56" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Gewicht]]></text>
</staticText>
<staticText>
<reportElement x="237" y="111" width="41" height="14"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[in kg]]></text>
</staticText>
<line>
<reportElement x="0" y="95" width="555" height="3"/>
</line>
<line>
<reportElement x="0" y="128" width="555" height="3"/>
</line>
<staticText>
<reportElement x="305" y="100" width="38" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Pos.]]></text>
</staticText>
<staticText>
<reportElement x="350" y="100" width="84" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Teilenummer /]]></text>
</staticText>
<staticText>
<reportElement x="350" y="112" width="84" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Bezeichnung]]></text>
</staticText>
<staticText>
<reportElement x="486" y="100" width="56" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Anzahl /]]></text>
</staticText>
<staticText>
<reportElement x="486" y="112" width="56" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Einheit]]></text>
</staticText>
</band>
</title>
<detail>
<band height="72">
<textField>
<reportElement x="0" y="0" width="55" height="25"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{packstnumber}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="55" y="0" width="55" height="25"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{packstart}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="137" y="0" width="73" height="25"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{measure}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="237" y="0" width="56" height="25"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{weight}]]></textFieldExpression>
</textField>
<subreport>
<reportElement x="305" y="0" width="250" height="42" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true"/>
<subreportParameter name="packstnumber">
<subreportParameterExpression><![CDATA[$F{packstnumber}]]></subreportParameterExpression>
</subreportParameter>
<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).dataSource("/list/orderarticle/article")]]></dataSourceExpression>
<subreportExpression class="java.lang.String"><![CDATA[$P{SUBREPORT_DIR} + "reportSubTemplate.jasper"]]></subreportExpression>
</subreport>
</band>
</detail>
<columnFooter>
<band height="271">
</band>
</columnFooter>
</jasperReport>






Subreport


<?xml version="1.0" encoding="UTF-8"?>
<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="reportTemplate" pageWidth="595" pageHeight="842" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0">
<reportFont name="Arial" isDefault="true" fontName="Arial" size="10" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfFontName="Helvetica" pdfEncoding="Cp1252" isPdfEmbedded="false"/>
<reportFont name="Courier" isDefault="false" fontName="Courier New" size="10" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfFontName="Helvetica" pdfEncoding="Cp1252" isPdfEmbedded="false"/>

<parameter name="packstnumber" class="java.lang.String"/>

<queryString language="xPath"><![CDATA[/list/orderarticle/article/[packstnumber = '$P{packstnumber}']]]></queryString>


<field name="position" class="java.lang.String">
<fieldDescription><![CDATA[position]]></fieldDescription>
</field>
<field name="description" class="java.lang.String">
<fieldDescription><![CDATA[description]]></fieldDescription>
</field>
<field name="value" class="java.lang.String">
<fieldDescription><![CDATA[value]]></fieldDescription>
</field>


<detail>
<band height="16">
<textField>
<reportElement x="0" y="1" width="37" height="15"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{position}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="47" y="0" width="101" height="15"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{description}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="181" y="0" width="55" height="15"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{value}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>




XML


<?xml version='1.0' encoding='ISO-8859-1' ?>
<list>
<customer>
<firm>Rast und Ruh</firm>
<street>Hauptstraße 6</street>
<zip>71034</zip>
<city>Böblingen</city>
<phone>1234567</phone>
</customer>

<order>
<packst>
<packstnumber>1</packstnumber>
<packstart>EWP</packstart>
<measure>80 x 80 x 80</measure>
<weight>150</weight>
</packst>
<packst>
<packstnumber>2</packstnumber>
<packstart>EWP</packstart>
<measure>80 x 80 x 80</measure>
<weight>120</weight>
</packst>
</order>


<orderarticle>
<article>
<packstnumber>1</packstnumber>
<position>20</position>
<description>Winkel</description>
<value>20 St.</value>
</article>
<article>
<packstnumber>1</packstnumber>
<position>30</position>
<description>Rechteck</description>
<value>21 St.</value>
</article>
<article>
<packstnumber>2</packstnumber>
<position>40</position>
<description>Quadrat</description>
<value>22 St.</value>
</article>
</orderarticle>
</list>




JAVA Class


import java.io.File;
import java.util.HashMap;


import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRXmlDataSource;



public class mySubTemplate {

public static void main(String[] args) {

JasperReport jasperReport;
JasperPrint jasperPrint;
HashMap<String, String> parameter = new HashMap<String, String>();

try {
JasperCompileManager.compileReportToFile("template/reportTemplate.jrxml","template/reportTemplate.jasper");
JasperCompileManager.compileReportToFile("template/reportSubTemplate.jrxml","template/reportSubTemplate.jasper");
}
catch (JRException ex) {
ex.printStackTrace();
}


try {
JRXmlDataSource xml = new JRXmlDataSource(new File("data/testData.xml"), "/list/order/packst");

jasperReport = JasperCompileManager.compileReport("template/reportTemplate.jrxml");
jasperPrint = JasperFillManager.fillReport(jasperReport, parameter, xml);

// pdf output
JasperExportManager.exportReportToPdfFile(jasperPrint, "output_sub.pdf");
}
catch (JRException e) {
e.printStackTrace();
}
}
}
 

Neue Beiträge

Zurück