Ich habe eine eigenständige Anwendung, und eine ihrer Aufgaben besteht darin, den Pfad einer * .jrxml-Datei zu übernehmen und sie zu kompilieren.
Ich kann das ohne Probleme tun, bis ein Bericht mit einem Unterbericht erscheint, in dem die Kompilierung des Masters keine seiner untergeordneten Elemente kompiliert, was zu einer Unterreportdatei * .jasper führt, die später nicht in der Spur gefunden wird.
>Gibt es einen Weg zu
?1) Legen Sie fest, dass der JasperCompileManager Unterberichte automatisch aufnimmt?
2) Erhalten Sie eine Liste der Pfade zu Unterberichten, die in einem JasperDesign- oder JasperReport-Objekt enthalten sind?
Ich habe keinen direkten Zugriff auf die jrxml-Dateien, daher ist das Ändern der Berichte für die Kompiliermethode keine Option, und es wird auch kein Standardbenennungsschema angewendet, um zu bestimmen, welche Unterberichte zu welchen Berichten gehören.
Hier gibt es ein ähnliches Problem:
wo ein JRVisitor verwendet wird, um eine Liste von JRSubreport-Objekten zu erstellen. Es gibt jedoch keine Erklärung, wie man einen Pfad zum Unterbericht erhält, um ihn zu kompilieren und rekursiv nach Unterberichten von Unterberichten zu suchen es aus.
Ok, also ein bisschen Hacking, aber ich konnte etwas herausfinden ...
Die Unterreport.getExpression (). getText () gibt das Ausdrucksfeld der Subreport-Widget-Sache im Master-Bericht zurück und ist eine Zeichenfolge, die etwa so aussieht
%Vor%So konnte ich es auseinander ziehen, um den Namen mit dem folgenden zu bekommen. Es ist nicht ideal, aber es sollte halten.
%Vor%BEARBEITEN:
Hier ist meine ganze compileReport-Methode, die demonstriert, wie Unterberichte von Unterberichten usw. rekursiv kompiliert werden. Nicht perfekt, aber gut genug für meine App. Alle kompilierten * .jasper-Dateien werden am selben Speicherort auf der Festplatte gespeichert, an dem die nicht kompilierten * .jrxml-Dateien aufgenommen wurden. Dies wäre jedoch nicht schwer zu ändern. Das kompilierte Hauptberichtobjekt wird zurückgegeben, wenn Sie es ausführen möchten oder was auch immer.
Denken Sie daran, dass dieser Code zum Zeitpunkt dieser Bearbeitung 9 Monate alt ist, und neuere Versionen von Jasper Reports können nun eine eingebaute Funktion für diese Art von Dingen haben.
%Vor%Tags und Links java reporting report jasper-reports