Jasper Reports - Subreport zur Laufzeit ändern

Diskutiere Jasper Reports - Subreport zur Laufzeit ändern im Allgemeine Java-Themen Bereich.
J

Joob

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.
 
S

Steven Hachel

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
 
J

Joob

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.
 
S

Steven Hachel

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

Wurstkopp

"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.
 
J

Joob

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);
 
Thema: 

Jasper Reports - Subreport zur Laufzeit ändern

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben