Verständnissfrage JasperReports / Java Obekte POJO?

Status
Nicht offen für weitere Antworten.

KEhlers

Mitglied
Hallo zusammen,

mir fehlt leider der nötige Ansatz um mit JasperReports loszulegen. Ich hoffe ihr könnt mir helfen.

Wir wollen unsere Reportingfunktion in unsere Java Applikation verbessern. Bisher wurden PDF oder HTML Reports von hand programmiert. Das soll jetzt mit Hilfe von JasperReports oder vielleicht Birt verbessert werden. Die Daten können sowohl aus einer Oracle Datenbank (was keine Probleme bereiten wird) aber auch aus einem Object (RECORD) der Java Applikation kommen.

Die Frage ist jetzt wie und ob ich überhaupt in dem Report auf das Objekt zugreifen kann. In iReport wird das nicht gehen weil das Object auf Session Daten zugreift. In iReport müsste man also "blind" auf das Obejct zugreifen, etwa so: "CRECORD.getValue(parameter1, param...);". Ist es dann möglich bei dem Filling aus der Java Applikation (Wenn der Report getriggert wird), da wo die Session dann existiert, die Funktionen aufzurufen um an die Daten zu gelangen?

Wenn ja wo instanziiere ich denn das Object, in dem Report? Der Ablauf ist mir leider noch absolut nicht schlüssig. Ich hoffe ihr könnte mir da ein bisschen auf die Sprünge helfen.

Danke

Gruß
 

foobar

Top Contributor
Ja, Jasperreports unterstützt Beandatasources.

Das ganze ist ziemlich simpel. Du gibst dem Report einfach eine Datasource mit das kann eine JdbcDatasource, eine Hibernateconnection aber auch einfach eine Liste von Beans sein:

data ist hier meine Liste von Beans:
Code:
JasperPrint print = JasperFillManager.fillReport(inComp, params, new JRBeanCollectionDataSource(data));

In Ireport legst du dann einfach eine neues Field an. Das Field ist eine Property deiner Bean auf das über den Getter zugegriffen wird. Du kannst dem Report aber auch einfach einen Parameter übergeben z.b. für den Titel, Footertext etc.
Guck dir mal die Beispiele im Ordner Samples von JasperReports an. Da siehste schon was man alles damit machen kann z.b. Crosstabs, Subereports und was weiß ich noch alles.
 

KEhlers

Mitglied
Danke foobar für deine Antwort

foobar hat gesagt.:
In Ireport legst du dann einfach eine neues Field an. Das Field ist eine Property deiner Bean auf das über den Getter zugegriffen wird.

Ich habe meine Problemstellung nicht ausreichend dargestellt. Das Problem ist, dass mein Object "Record" nicht selber die Daten als Attribute speichert sondern selbst über die Methoden wie z.B. getValue(...) anfragen an die Oracle Datenbank schickt um die Daten zu sammeln.

Ich muss also tatsächlich die Funktionen getValue(...), getAttribute(...) aufrufen um über die Rückgabewerte an die Daten zu kommen.

Ist das auch irgendwie umsetzbar?

Danke nochmal
 

KEhlers

Mitglied
vielleicht könnte ich mir eine wrapper Klasse schreiben die mir in einer hashmap die zurueckgegeben werte der Funktionsaufrufe abspeichert...

Aus dem Report wird zb "0;0;0;initials" gelesen und darauf wird getValue(0,0,0,initials) aufgerufen. Aber wie bringe ich ihn dazu die Funktion aufzurufen?

ich muss mir das mal ansehen ganz so firm bin ich in dem jetzt noch nicht. Könnte das irgendwie gehen?

edit: nunja wenn ich das richtig verstehe wird, wenn im report das Field "0;0;0;initials" gelesen wird die Methode get0;0;0;initials aufgerufen. Das bringt mich natuerlich nicht weiter, selbst wenn man den Namen so vergeben würde das es funktioniert. Ich kann ja nicht für jede Kombination aus Parametern eine neue Methode schreiben. Gibt es eine Möglichkeit den gettern einen Parameter mit zu übergeben?

Und noch eine Frage in iReport muss ich eine Factory Klasse angeben sonst funktioniert das ganze nicht. In meinem Fall brauche ich das aber gar nicht, kann ich das dann auch irgendwie weglassen?
 

foobar

Top Contributor
Achso du willst keine Beans(Entities) an den Report übergeben sondern Services(Geschäftslogik) oder DAOs.
Das macht wenig Sinn. Ich würde dei Services aufrufen und dann das Ergebnis als die Collection von Beans an Jasper übergeben.
Damit haste eine saubere Trennung. Ansonsten kannste direkt eine Jdbc Connection oder eine Hibernatesession an Jasper übergeben.
 

KEhlers

Mitglied
Danke nochmal foobar, ich habe das Problem jetzt gelösst. Allerdings stehe ich jetzt vor dem nächsten. Ich würde gerne in meinem Report sowohl Beans als auch eine JDBC Connection als DataSource benutzten. Ich habe gelesen das ich dafür SubReports brauche und an den SubReport die 2te DatenSource weiterreichen soll.

Ich verstehe allerdings nicht wie das gehen soll. Denn an meinem Masterreport den ich mit runReportToPdfStream() befülle kann nur eine der Datenquellen weitergegeben werden.

Wie geht das bloss?

Danke
 

KEhlers

Mitglied
hmm vielleicht habe ich es jetzt selber rasugefunden. Wird evtl. eine Connection in der Hashmap hinzugefügt um sie dem MasterReport mitzugeben der sie dann an den subreport weiterleitet?
 

foobar

Top Contributor
Parameter die an den Subreport übergeben werden sollen, müssen zuerst an den Masterreport übergeben werden. Von dort aus werden die Parameter dann weiter gereicht.
Guck dir dazu mal die Beispiele an. Da kannste das ganze in Aktion erleben.
Um einen Subreport in einen Masterreport einzubinden gibt es mehrere Möglichkeiten. Ich kompiliere den Subreport immer schon vorher und übergebe den kompilierten Report als Parameter. Man kann aber auch nur einen Namen oder Pfad+Namen an den Masterreport übergeben.
 

KEhlers

Mitglied
Okay hab gerade mal kurz reingesehen und gleich im "subreport" sample gesehen wie der kompilierte Subreport als Parameter an den Masterreport gereicht wird. Danke soweit

Jetzt ergibt sich fuer mich aber noch eine weitere Frage.

Die Erzeugung der Reports soll bei mir aus einer Java Applikation geschehen. Wie könnte ich es geschickt anstellen, dass der Fill- und Erzeugungsprozess nicht jedesmal für einen neuen Report umprogrammiert werden muss. Jeder Report benötigt ja evtl. unterschiedliche Parameter für Subreports etc. und andere Data Sources. Gibt es für dieses Problem Ansätze?

Es wäre toll wenn es vermeidbar ist, dass der Reportschreiber jedesmal auch den Java Code umschreiben bzw. anpassen muss.

Danke
 

foobar

Top Contributor
Das wird sich nicht vermeiden lassen, da eine Änderung des Reports aus einer fachlichen Änderung entsteht z.b. eine zusätzliche Spalte im Report. D.h. du mußt sowieso den Code ändern, um dem Report diese Daten zugänglich zu machen. Wie sollte man das variabel halten?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Problem mit JasperReports Allgemeine Java-Themen 8
J WARNING: An illegal reflective access operation has occurred, beim Compilieren von JasperReports, was bedeutet das ? Allgemeine Java-Themen 23
A JasperReports (iReports) und openPDF Allgemeine Java-Themen 4
T JasperReports mit Null Pointer Allgemeine Java-Themen 3
M Kapselung JasperReports Server und Java Allgemeine Java-Themen 5
C JasperReports, PDF und "Speichern unter"-Dialog Allgemeine Java-Themen 7
S GlassFish und Jasperreports - grauer Report Allgemeine Java-Themen 3
A Jasperreports automatisch ausführen lassen Allgemeine Java-Themen 5
T Probleme mit JasperReports Allgemeine Java-Themen 7
N NoClassDefFoundError bei JasperReports Allgemeine Java-Themen 2
C JasperReports in J2SE 1.4 Allgemeine Java-Themen 2
S Boolean Ausgabe JasperReports Allgemeine Java-Themen 2
J NullPointerException bei JasperReports Allgemeine Java-Themen 2
S JasperReports Tutorials Allgemeine Java-Themen 3
T html Datei in jrxml Datei (JasperReports) umwandeln Allgemeine Java-Themen 6
K JasperReports -> PDF Allgemeine Java-Themen 9
M Jasperreports Allgemeine Java-Themen 2
foobar Druckausgabe Jasperreports Allgemeine Java-Themen 2
G JasperReports: Verwenden von vorkompilierten Reports Allgemeine Java-Themen 2
S JasperReports: Kompillieren des JasperDesign Allgemeine Java-Themen 5
H Frage zu JasperReports und JRDataSource Allgemeine Java-Themen 3
D JasperReports Allgemeine Java-Themen 5
D Problem mit JasperReports Allgemeine Java-Themen 2
X JasperReports Bibliotheken Einbinden Allgemeine Java-Themen 2
V Suche einfaches JasperReports Tutorial Allgemeine Java-Themen 23
theJavaMaschine Mitstreiter gesucht: Gemeinsam Java und Android Development lernen! Allgemeine Java-Themen 5
PARAS Karriereberatung benötigt: Wie kann ich ein Java Full Stack Entwickler werden? Allgemeine Java-Themen 7
P Java Access Bridge Allgemeine Java-Themen 5
W ICEpdf PDF-Dateien werden mit Java 21 nicht nicht mehr vollständig dargestellt Allgemeine Java-Themen 3
MiMa Grundsätzliche Frage zur Verwendung von Java Versionen?? Allgemeine Java-Themen 3
OnDemand Java Deployment Vaadin Allgemeine Java-Themen 3
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
Zrebna Wieso sind eigentlich JUnit-Tests in src/test/java platziert - nur Konvention? Allgemeine Java-Themen 7
N LlaMA, KI, java-llama.cpp Allgemeine Java-Themen 39
V Java-Codierungsherausforderung: Navigieren durch die Macken der Datumsmanipulation Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
M java: unexpected type Allgemeine Java-Themen 2
harrytut Java Input/Output Tests Junit Allgemeine Java-Themen 3
B Java Discord bot auf ein Root Server? Allgemeine Java-Themen 1
BetziTheRealOne Java PKIX path building failed as non Admin Allgemeine Java-Themen 15
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
KonradN Java 21 Release Allgemeine Java-Themen 5
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
K Java Anwendung machen Anleitung Allgemeine Java-Themen 5
G java.io.listFiles() Allgemeine Java-Themen 3
8u3631984 Frage zu Java Streams min / max Allgemeine Java-Themen 17
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
K Java-Projekt Allgemeine Java-Themen 11
K Java-Projekt Allgemeine Java-Themen 0
ruutaiokwu Welcher Browser unterstützt heutzutage noch Java Applets? Allgemeine Java-Themen 5
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
rode45e Java Threads Allgemeine Java-Themen 4
G java.io.listFiles() Allgemeine Java-Themen 2
N Java Dynamic Proxy Allgemeine Java-Themen 3
N Leichte Java Gegner Ki Allgemeine Java-Themen 10
A Java modul Problem Allgemeine Java-Themen 4
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
V Funktionale Schnittstelle in Java Allgemeine Java-Themen 3
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
berserkerdq2 Wenn ich bei Intelij javafx mit maven importieren will, muss ich das in die pom.xml reintun, aber warum noch in module-info.java? Allgemeine Java-Themen 3
KonradN Java 20 am 21. März Allgemeine Java-Themen 1
O Java Website Stock Bot Allgemeine Java-Themen 3
J Front-/Backend in Java Allgemeine Java-Themen 14
doopexxx JAVA Google Webcrawler Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
G java.lang.NoClassDefFoundError: org/aspectj/lang/Signature Allgemeine Java-Themen 2
lalex1491 Java Aktienkurse nachfragen Allgemeine Java-Themen 4
J Class to link Java Allgemeine Java-Themen 4
V Wie funktioniert das Schlüsselwort "final" von Java? Allgemeine Java-Themen 19
mrStudent Inferenz JAVA Allgemeine Java-Themen 6
U URI Rechner (Java Script) Allgemeine Java-Themen 7
TheSkyRider Java Geburtsdatum Textfeld Allgemeine Java-Themen 7
mihe7 Java 19 JavaDocs: Browserintegration Allgemeine Java-Themen 1
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
H Java Rechner Programmierung der Mathematik Allgemeine Java-Themen 33
Lennox Schinkel Java Kara Auf einen Java Host laufen lassen Allgemeine Java-Themen 17
C Fußnoten von DocX mit Java Allgemeine Java-Themen 2
C Fußnoten in DocX mit Java Allgemeine Java-Themen 1
M Aussagenlogik in Java Programmieren Allgemeine Java-Themen 22
B Per Java Word Dokument schreiben? Allgemeine Java-Themen 8
krgewb Java-Bibliothek für ONVIF Allgemeine Java-Themen 1
KonradN Oracle übergibt (Java Teile der) GraalVM Community Edition an OpenJDK Community Allgemeine Java-Themen 2
Momo16 Brauche Hilfe - Java Projekt kann nicht erstellt werden Allgemeine Java-Themen 12
B Java mit command line und jars benutzen? Allgemeine Java-Themen 18
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
Mick P. F. Wie kriege ich die Fehlermeldung "java: symbol lookup error: ..." weg? Allgemeine Java-Themen 11
K Nachhilfe Java Allgemeine Java-Themen 11
KonradN Java 19 Allgemeine Java-Themen 11
F IDEA IntelliJ Java Songliste erstellen Allgemeine Java-Themen 6
TheSepp Java bestimmtes Array auf den Wert 0 setzen Allgemeine Java-Themen 32
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
Sachinbhatt Sind alle Methoden in Java implizit virtuell Allgemeine Java-Themen 2
E Java und integrierte Grafikkarten Allgemeine Java-Themen 18
Sachinbhatt Wie wird die Typumwandlung bei Mehrfachvererbung in Java implementiert? Allgemeine Java-Themen 3
Peterw73 Hilfe bei Java gesucht Allgemeine Java-Themen 3
A Java unter Win 10 Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben