# JasperReport: Problem mit Subreport



## tubamanu (3. März 2009)

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();
		}
	}
}


----------

