Jasper Reports - Subreport zur Laufzeit ändern

Joob

Top Contributor
Ist es möglich den Subreport zur Laufzeit in jrxml zu ändern.
Bzw. im .jasper zu ändern.
oder grundsätzlich den angezeigten Subreport von einer Variable abhängig zu machen.

Leider habe ich seitdem ich auf Gradel umgestellt habe das Problem das ich in Java nicht mehr kompilieren kann.
ggf. muss ich das noch einmal zu lösen versuchen.
Ich kompiliere momentan mit JasperStudio und packe die kompilierten Reports in das Java Package.

Also ein kompilierte Report der hinsichtlich der Anzeige des Subreports auf eine Variable reagiert wäre perfekt.
Geht so was.
 

Steven Hachel

Bekanntes Mitglied
Ja klar, wenn es das ist, wie ich es verstanden habe, ein Beispiel dazu...

Template:
Code:
<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="TestHB" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="21f21710-d7f7-48fa-a58e-5262db2a903d">
    <property name="com.jaspersoft.studio.data.sql.tables" value=""/>
    <property name="..." value="..."/>
    ...
    <parameter name="SUB_TEMPLATE_FILE" class="java.lang.Object"/>
  
    <subreport>
        <reportElement positionType="Float" x="0" y="50" width="545" height="30" uuid="0bac97e0-3292-466f-846f-0aa9bf477c76"/>
        <subreportExpression><![CDATA[$P{SUB_TEMPLATE_FILE}]]></subreportExpression>
    </subreport>
</jasperReport>

Java:
Code:
URL resource = JasperReportTest.class.getResource("/templates/template.jrxml");
Path template = Paths.get(resource.toURI());
Path subTemplate = Paths.get(JasperReportTest.class.getResource("/templates/subTemplate.jrxml").toURI());

JasperReport jasperReport = jasperReportBuilder.jasperReport(template);
JasperReport subOneReport = jasperReportBuilder.jasperReport(subTemplate);
paramaters.put("SUB_TEMPLATE_FILE", subOneReport);

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, paramaters);

Ob du dann den Parameter füllst oder nicht, ist egal. Dann wird es entweder gerendert oder eben nicht. :)

Steven
 

Joob

Top Contributor
Ich habs noch nicht ausprobiert aber das sieht super aus.
Ich bau das mal übers Wochenden.

Erst mal danke.
Hoffentlich bekomme ich das hin.

Eine Frage noch :
Wenn du das so machst musst du aber den Report zur Laufzeit kompilieren, oder ?
Da hab ich ja noch ein Problem mit Gradel zu lösen.
 

Steven Hachel

Bekanntes Mitglied
Ich habs noch nicht ausprobiert aber das sieht super aus.
Ich bau das mal übers Wochenden.

Erst mal danke.
Hoffentlich bekomme ich das hin.

Eine Frage noch :
Wenn du das so machst musst du aber den Report zur Laufzeit kompilieren, oder ?
Da hab ich ja noch ein Problem mit Gradel zu lösen.
Also das Template wird bei jedem Durchlauf zu einer .jasper Datei kompiliert. Kannst das ganze auch cachen, aber dann muss
bei Änderungen innerhalb des Templates/Subtemplates der Programmteil vor
Code:
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, paramaters);
noch einmal durchlaufen werden.

Steven
 

Wurstkopp

Bekanntes Mitglied
"Bzw. im .jasper zu ändern."
Ja du solltest auch die Subreports vorher schon kompilieren können und müsstest dann als Pfad die jasper Datei angeben. Wenn du die jrxml Dateien nicht zur Laufzeit änderst hast du damit natürlich bessere Performance.
 

Joob

Top Contributor
Hat hingehauen, erst mal so.
Bin mir noch nicht ganz sicher wie ich das einbaue, aber als Prototyp super.

Code:
                        // Report und SubReport compilieren
                        JasperReport basReport = JasperCompileManager.compileReport(getClass().getResourceAsStream("/REPORTS/CoursesUser.jrxml"));
                        JasperReport subReport = JasperCompileManager.compileReport(getClass().getResourceAsStream("/REPORTS/CoursesUser_subreport.jrxml"));
                        
                        // Parameterliste erstellen ,Sprache und SupReport
                        HashMap paramsrep = getJaslanghasmap();
                        paramsrep.put("SUB_TEMPLATE_FILE", subReport);

                        // Daten generieren
                        List<RepCoursesUser> data = generateData_RepCoursesUser(idsubject, datefrom);
                        JRDataSource datasource = new JRBeanCollectionDataSource(data, true);
                        
                        // Report bauen und anzeigen
                        JasperPrint jasperPrint = JasperFillManager.fillReport(basReport, paramsrep , datasource);
                        JasperViewer.viewReport(jasperPrint,false);
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Jasper Reports - javabean Datasource Allgemeine Java-Themen 1
J Suche Alternative zu Jasper Reports Allgemeine Java-Themen 4
J Jasper Reports - Compilerproblem nach Umstellung von Groovy auf Java Allgemeine Java-Themen 7
J Jasper Reports - Daten vom Hoster Allgemeine Java-Themen 2
H Dringend: Jasper Reports - Zusammenfügen von PDFs ? Allgemeine Java-Themen 4
J Jasper Report - seltame Meldung beim compilieren Allgemeine Java-Themen 3
J Jasper ireport - wieso beendet die Anwendung wenn ich die Preview schließe Allgemeine Java-Themen 1
A Jasper Report Performance bei PDF erzeugen Allgemeine Java-Themen 0
R import von Jasper (für SICStus Prolog) klappt nicht Allgemeine Java-Themen 2
J Diverse Fragen bezüglich Jasper Allgemeine Java-Themen 3
R Jasper für Eclipse Allgemeine Java-Themen 2
R Jasper iReport erzeugen Allgemeine Java-Themen 7
G jasper report Allgemeine Java-Themen 3
M ireport (Jasper Report) geht nur auf meinen Rechner Allgemeine Java-Themen 3
OnDemand PDF Erstellung / Reports Framework Allgemeine Java-Themen 3
S Reports vergleichen Allgemeine Java-Themen 8
S Bug-Reports Allgemeine Java-Themen 2
O Junit Reports / Logs als XML ohne Maven/Ant Allgemeine Java-Themen 7
H Crystal Reports 11 - Codebeispiel Allgemeine Java-Themen 2
A JUnit Reports zu groß für XSLT Allgemeine Java-Themen 4
G JasperReports: Verwenden von vorkompilierten Reports Allgemeine Java-Themen 2
S Reports als PDF Allgemeine Java-Themen 2
J MS Access-Reports steuerung mit Java Allgemeine Java-Themen 6
Y JasperReport - SubReport wird nicht angezeigt Allgemeine Java-Themen 13

Ähnliche Java Themen

Neue Themen


Oben