Jasperreport: Die Subreport Hölle

knowhowto

Grünschnabel
Hallo!
Ich hoffe hier weiß jemand Rat bzw. ich befinde mich im richtigen Unterforum für meine Frage. :)
Derzeit arbeite ich mit Jasperreport daran ein paar Reports mit Daten aus Java zu füttern und diese dann nach PDF zu exportieren. Dies funktioniert problemlos, jedoch will weder die Vorschau des von mir verwendeten Programmes iReport (3.6.0) noch die Live Applikation einen von mir eingebundenen Subreport anzeigen.

Beide Reports, der Mainreport und der Subreport können problemlos einzeln in der Preview und Live Applikation dargestellt werden.

Da sich im Netz mehrere Lösungsansätze finden ließen habe ich schon eine Menge versucht.

Folgende Fehlerquellen wurden am meisten aufgeführt: Falscher Pfad / Fehlerhafter Pfad zum Subreport, Subreport wird ohne einen Übergabeparameter nicht angezeigt...
Die im Netz zu findenden Tutorials zum Thema Subreports konnten mir auch nicht weiterhelfen.

Was ich bereits habe:
Code:
			JasperReport jReport = JasperCompileManager.compileReport("C:/tmp/ReportTest/Mainreport.jrxml");
			
			fillFields();
			JRMapCollectionDataSource ds = new JRMapCollectionDataSource(listFields);			
			JasperPrint jPrint = JasperFillManager.fillReport(jReport, parameter, ds);
			
			JasperExportManager.exportReportToPdfStream(jPrint,response.getOutputStream());
In der Funktion fillFields wird die Hashmap listFields befüllt. Danach wird die Report Datei durch dem Compiler gejagt und dann weiter unten in PDF gewandelt.

Hier noch der Code zu meinem Mainreport:
Code:
<?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="Mainreport" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
	<parameter name="SUB_REPORT" class="net.sf.jasperreports.engine.JREmptyDataSource"/>
	<field name="Vorname" class="java.lang.String"/>
	<field name="Nachname" class="java.lang.String"/>
	<field name="Straße" class="java.lang.String"/>
	<field name="Ort" class="java.lang.String"/>
	<background>
		<band splitType="Stretch"/>
	</background>
	<title>
		<band height="79" splitType="Stretch">
			<staticText>
				<reportElement x="11" y="15" width="100" height="20"/>
				<textElement/>
				<text><![CDATA[Datenblatt]]></text>
			</staticText>
		</band>
	</title>
	<pageHeader>
		<band height="35" splitType="Stretch"/>
	</pageHeader>
	<columnHeader>
		<band height="90" splitType="Stretch">
			<rectangle radius="10">
				<reportElement x="21" y="8" width="172" height="20"/>
			</rectangle>
			<staticText>
				<reportElement x="31" y="8" width="392" height="20"/>
				<textElement/>
				<text><![CDATA[Hier befinden sich die Kostenstellen]]></text>
			</staticText>
			<textField>
				<reportElement x="21" y="28" width="100" height="20"/>
				<textElement/>
				<textFieldExpression class="java.lang.String"><![CDATA[$F{Vorname}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement x="121" y="28" width="100" height="20"/>
				<textElement/>
				<textFieldExpression class="java.lang.String"><![CDATA[$F{Nachname}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement x="21" y="48" width="100" height="20"/>
				<textElement/>
				<textFieldExpression class="java.lang.String"><![CDATA[$F{Straße}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement x="21" y="68" width="100" height="20"/>
				<textElement/>
				<textFieldExpression class="java.lang.String"><![CDATA[$F{Ort}]]></textFieldExpression>
			</textField>
		</band>
	</columnHeader>
	<detail>
		<band height="125" splitType="Stretch">
			<subreport>
				<reportElement x="0" y="0" width="555" height="125"/>
				<subreportParameter name="Vorname">
					<subreportParameterExpression><![CDATA[$F{Vorname}]]></subreportParameterExpression>
				</subreportParameter>
				<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
				<subreportExpression class="java.lang.String"><![CDATA["C:\\tmp\\ReportTest\\Mainreport_subreport1.jasper"]]></subreportExpression>
			</subreport>
		</band>
	</detail>
	<columnFooter>
		<band height="45" splitType="Stretch"/>
	</columnFooter>
	<pageFooter>
		<band height="54" splitType="Stretch"/>
	</pageFooter>
	<summary>
		<band height="42" splitType="Stretch"/>
	</summary>
</jasperReport>

und zu meinem Subreport
Code:
<?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="Mainreport_subreport1" language="groovy" pageWidth="555" pageHeight="802" columnWidth="555" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0">
	<parameter name="Vorname" class="java.lang.String"/>
	<background>
		<band splitType="Stretch"/>
	</background>
	<title>
		<band height="79" splitType="Stretch"/>
	</title>
	<pageHeader>
		<band height="35" splitType="Stretch"/>
	</pageHeader>
	<columnHeader>
		<band height="61" splitType="Stretch"/>
	</columnHeader>
	<detail>
		<band height="125" splitType="Stretch">
			<staticText>
				<reportElement x="42" y="30" width="100" height="20"/>
				<textElement/>
				<text><![CDATA[Dies ist ein Test, lol]]></text>
			</staticText>
			<textField>
				<reportElement x="42" y="64" width="100" height="20"/>
				<textElement/>
				<textFieldExpression class="java.lang.String"><![CDATA[$P{Vorname}]]></textFieldExpression>
			</textField>
		</band>
	</detail>
	<columnFooter>
		<band height="45" splitType="Stretch"/>
	</columnFooter>
	<pageFooter>
		<band height="54" splitType="Stretch"/>
	</pageFooter>
	<summary>
		<band height="42" splitType="Stretch"/>
	</summary>
</jasperReport>

Kann es sein das ich den Mainreport auf spezielle Weise auch als "Main Report" bekanntgeben muss? Oder kann jeder Report verwendet werden.

Ich hoffe jemand weiß Rat. :)

Grüße
 
Hi,

also ich hab in meinem Main-Report noch einen Parameter SUBREPORT_DIR, den ich einfach auf "./" (mit Anführungszeichen, ist ja nen String) gesetzt habe. Dann alle SubReports ins selbe Verzeichnis, und drauf achten, dass die in den Subreports evtl benötigten Parameter auch korrekt übergeben werden:

<subreport>
<reportElement x="0" y="620" width="555" height="12"/>
<subreportParameter name="DetailText6">
<subreportParameterExpression><![CDATA[$P{DetailText6}]]></subreportParameterExpression>
</subreportParameter>
</subreport>

Hoffe, ich konnte helfen, sonst einfach noch mal melden.
 
Zurück