# Verschachtelte SubReports mit iReport



## wannaknow (8. Januar 2009)

Hallo zusammen, 

ich versuche mich momentan daran mit Java einen Report aus einer xml-Datenquelle zu erzeugen. Dazu habe ich miir iReport zu Hilfe genommen. Zunächst ging das auch alles ganz intuitiv, aber nun wo ich beim Thema subreports angelangt bin, komme ich nicht so recht weiter. Folgendes Problem:

Angenommen ich habe eine xml-Datei folgender Struktur(vereinfacht):


> <A>
> <B>
> <C></C>
> <C></C>
> ...


 
In iReport habe ich einen main report angelegt, in dem das xml-file als Datenquelle angegeben ist. 
Im details band habe ich einen subreport (SubReport.jrxml) angelegt, dem ich als Datenquelle 


> ((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).dataSource("/A/B")


 übergeben habe und als Ausdruck für den Unterreport 


> $P{SUBREPORT_DIR} +
> "SubReport.jasper"


. 
So weit funktioniert auch noch alles, ich kann wie gewünscht über die b-elemente iterieren. 
Nun habe ich einen weiteren subreport angelegt (SubSubReport.jrxml) und diesen versucht in SubReport.jrxml einzubetten. 
Als Datenquelle habe ich diesmal 


> ((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).dataSource("/B/C")


übergeben und als Ausdruck für den Unterreport 


> $P{SUBREPORT_DIR} + "SubSubReport.jasper".


In iReport gibt es keine Fehlermeldungen, aber starte ich das Hauptscript mit meiner Applikation unter Eclipse, bekomme ich immer 
eine Fehlermeldung mit dem Inhalt 


> Error evaluating expression...
> net.sf.jasperreports.engine.data.JRSortableDataSource cannot be cast to net.sf.jasperreports.engine.data.JRXmlDataSource
> at SubReport_1231424772481_482053.evaluate(SubReport_1231424772481_482053:173)
> at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:186)


Es sieht irgendwie so aus, als würde hier bei der einbindung des zweiten Subreports statt einer JRXmlDataSource eine JRSortableDataSource erwartet. 
Aber woran liegt das, beim ersten Subreport hat er die JRXmlDataSource ja auch angenommen. Ich habe die Subreport-Einbindungen in beiden jrxml-Dateien verglichen und keinen relevanten Unterschied gefunden . 

Hab ich da vielleicht irgendwo eine Einstellung vergessen, die bei Sub-Subreports nötig ist?

Oder hat vielleicht jemand ein Beispiel in dem eine xml-Datei als Datenquelle für verschachtelte subreports verwendet wird?

Vielen Dank im voraus!


----------



## jeipack (8. Januar 2009)

Hi
Verstehe ich das richtig, der SubSubReport ist im Subreport eingebettet?

Das hier:

```
net.sf.jasperreports.engine.data.JRSortableDataSource cannot be cast to net.sf.jasperreports.engine.data.JRXmlDataSource
```
 wird sich ja höchstwahrscheindlich auf das hier beziehen:

```
((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).dataSource("/B/C")
```
Ich habe schon öffters mit Subreports gearbeitet aber noch nie xml als Datenquelle benutzt. Was ist denn dieses /B/C?

Vielleicht kannst du auch die Files hochladen?


Grüsse
jeipack


----------



## wannaknow (8. Januar 2009)

Ja, genau, der SubSubreport ist in den Subreport eingebunden.

"/B/C" ist ein X-Path Ausdruck, der die auszuwertenden Daten aus dem Xml-File auswählt, ähnlich eines Select-Statements bei der Verwendung von Datenbankabfragen.

Files hochladen kann ich leider nicht, da sie meinem Arbeitgeber gehören  Die originellen Knotennamen A,B und C sind auch nur eine vereinfachte Darstellung, in Wirklichkeit gibt es noch Attribute und tiefere Verschachtelungen, die aber für das Grundverständnis erstmal unwichtig sind. 

Es geht mir um die generelle Frage wie ich Sub-Subreports mit XML als Datenquelle realisiere.


----------



## jeipack (9. Januar 2009)

Morgen
Also ich würde alle Infos im Hauptreport sammeln und die Datenquelle schon richtig gecasted für den SubSubreport als Feld/Parameter dem Subreport übergeben.

An was es liegen könnte dass er die Falsche Datenquelle als Typ nimmt und diese dann casten will kann ich so leider nicht sagen.


----------



## jeipack (9. Januar 2009)

wannaknow hat gesagt.:


> Files hochladen kann ich leider nicht, da sie meinem Arbeitgeber gehören


Hmm, oder Prototypen? Müssen ja nichts können ausser SubReportlen


----------

