► Warum?
► JasperReports ▪ Kurzvorstellung, Features ▪ Getting Started ▪ Umsetzung relevanter Use Cases in JasperReports
► Integration with APEX
► Fazit
Agenda
26.06.2012 Oracle Reports to JasperReports Page 1
► 3 Dinge! ▪ JasperReports ist
eine mächtige Alternative zu Oracle Reports
▪ Die wichtigsten Design Patterns sind übersetzbar
▪ Einfache Integration mit APEX
► Entwicklung von Web-Applikationen auf dem Oracle Stack seit 1997 ▪ Portal, Forms, Reports, OWA Toolkit, jetzt fokussiert auf APEX!
► Dipl.-Inform. Dietmar Aust, Freelance Consultant
► 1997-2000: Consultant bei Oracle in Düsseldorf
► Seit 09/2000: Freiberuflich, seit 2006 ausschließlicher Fokus APEX
► Blog: http://daust.blogspot.com/
► Regelmäßige Vorträge in der Oracle Community (ODTUG, DOAG, OOW)
► Bereitstellung kostenloser Tools, z.B die JasperReportsIntegration ▪ http://www.opal-consulting.de/tools
Vorstellung Opal Consulting
26.06.2012 Oracle Reports to JasperReports Page 2
► Regelmäßige Durchführung von APEX Trainings zusammen mit Denes Kubicek
► Mitautor von „Oracle APEX und XE in der Praxis“ ▪ Veröffentlicht 21.12.2009 auf Deutsch
► Mitautor von „Expert Oracle Application Express“ − Veröffentlicht 25.05.2011
− Charity Projekt in Gedenken an Carl Backstrom und Scott Spadafore (ehemalige Entwickler aus dem APEX Team)
Vorstellung Opal Consulting
26.06.2012 Oracle Reports to JasperReports Page 3
► Oracle Forms and Oracle Reports werden mittelfristig von Oracle nicht mehr unterstützt ▪ Viele Firmen suchen sich Alternativen zu Oracle Forms ▪ Oracle (Sales) empfiehlt Fusion / ADF, den „Java Stack“, ist es immer die
beste Wahl?
► Triftige Gründe, um zu APEX zu wechseln: ▪ Investitionsschutz
− Es wurde bereits viel in die Business Logik mit PL/SQL investiert
− Robuster, gut getesteter, performanter und zuverlässiger Code
▪ Menschen: − Technologische Ähnlichkeit, SQL und PL/SQL ebenfalls Fundament
von APEX, sanfte Lernkurve durch Fokussierung auf Business Logik, HTML, CSS und Javascript später bei Bedarf hinzufügen
− Motivierte Mitarbeiter durch schnelle Erfolgserlebnisse. APEX macht Spaß!
Warum? ::Ablösung von Oracle Forms und Reports?
26.06.2012 Oracle Reports to JasperReports Page 4
► Alternativen im Open Source Bereich ▪ Eclipse BIRT, JasperReports und Pentaho ▪ Aktuelle Vergleichsstudie (2012, basiert auf JasperReports 4.5.0):
− http://www.innoventsolutions.com/open-source-reporting-review-birt-jasper-pentaho.html
− http://www.innoventsolutions.com/jasper-review.html
▪ JasperReports ist der Favorit für seitenoriente druckfähige Ausgaben
► JasperReports ▪ Begonnen auf Sourceforge in 2001, 2005 kam Release 1.0 ▪ Kontinuierliche Weiterentwicklung (mind. 6 Releases pro Jahr) ▪ Der am häufigsten eingesetzte Open Source Berichtsgenerator mit über
175.000 produktiven Installationen weltweit ▪ Case Studies: http://www.jaspersoft.com/case-studies ▪ Kommerzieller Support und Training ist verfügbar ▪ Open Source => kein Vendor-lock in
Warum? ::Alternativen?
26.06.2012 Oracle Reports to JasperReports Page 5
► Komponenten ▪ JasperReports Library
− http://jasperforge.org/projects/jasperreports
− Die Laufzeitumgebung
▪ iReport Designer − http://jasperforge.org/projects/ireport
− Editor für den visuellen Entwurf des Berichts
− Das JasperSoft Studio ist eine alternative Implementierung basierend auf Eclipse
▪ JasperReports Server − http://jasperforge.org/projects/jasperserver
− Portal für das Deployment, Benutzer- verwaltung und Rechtemangement
JasperReports ::Die Komponenten
26.06.2012 Oracle Reports to JasperReports Page 6
► Was ist es? ▪ „Einfach nur“ eine Java Bibliothek, die in beliebige Java Applikationen
integriert werden kann, z.B. SWING, RCP, J2EE, auf der Kommandozeile mit ANT oder direkt Java.
▪ Basiert auf anderen Open Source Bibliotheken wie iText, Groovy, Hibernate, JFreeChart, Log4J, POI, etc.
► In der Entwurfsphase ▪ Berichtsdefinition im XML Format (z.B. report.jrxml) ▪ Umwandlung (Kompilation) in ein Binärformat (z.B. report.jasper)
► Zur Laufzeit ▪ Es wird eine Datenquelle initialisiert ▪ Laufzeitparameter werden an JasperReports übergeben und der Bericht
mit Daten befüllt. Daraus entsteht ein JasperPrint Objekt ▪ Dieses kann dann in die verschiedenen Formate exportiert werden (HTML,
PDF, XLS, DOC, RTF, DOCX, ...)
JasperReports ::Architektur
26.06.2012 Oracle Reports to JasperReports Page 7
► Funktionen: ▪ JasperReports bietet alle Funktionen, die ein moderner
Berichtsgenerator haben sollte ▪ Datenquellen: JDBC, XML, OLAP, TEXT, Hadoop …, zus. beliebige
Erweiterbarkeit über benutzerdefinierte Datenquellen ▪ Mehrere Datenquellen pro Bericht ▪ Ausgabeformate: pdf, xls, xlsx, html, xhmtl, csv, text, rtf, odf, docx, pptx, ... ▪ Matrixberichte ▪ Charts (JFreechart) ▪ Berichtstrigger ▪ Unterberichte / Modularisierung / Wiederverwendbarkeit ▪ Bedingte Formatierung (Stile) ▪ Bedingte Darstellung von Feldern ▪ Skriptsprachen, insbesondere für Berechnungen und Bedingungen: Java,
Groovy, Javascript ▪ Fonts, Unicode, NLS ▪ …
JasperReports ::Funktionen
26.06.2012 Oracle Reports to JasperReports Page 8
JasperReports ::Beispiele
26.06.2012 Oracle Reports to JasperReports Page 9
JasperReports ::Beispiele
26.06.2012 Oracle Reports to JasperReports Page 10
JasperReports ::Beispiele
26.06.2012 Oracle Reports to JasperReports Page 11
► Weitere Beispiele: ▪ JasperReports-‐Demo-‐Documents/
JasperReports ::iReport Designer GUI
26.06.2012 Oracle Reports to JasperReports Page 12
► JasperReports ist verfügbar unter der Lesser General Public License version 3 (LGPLv3) ▪ http://www.gnu.org/licenses/lgpl-3.0.html
► JasperReports kann ▪ in Produktionssystemen im Unternehmen verwendet oder auch ▪ in kommerziellen Systemen eingebettet werden (solange die jar-Dateien
nicht geändert werden)
► Alle verwendeten Bibliotheken sind nicht viral (ähnlich zu GPL), also meistens Apache oder LGPL Lizenzen: ▪ http://jasperforge.org/plugins/espforum/view.php?
group_id=102&forumid=103&topicid=7255
► Disclaimer: Dies ist keine gesicherte rechtliche Auskunft, bitte die Lizenzbedingungen für den eigenen Fall prüfen lassen
JasperReports ::Lizensierung
26.06.2012 Oracle Reports to JasperReports Page 13
► JasperReports Library ▪ http://jasperforge.org/website/jasperreportswebsite/trunk/
documentation.html?header=project&target=jasperreports
JasperReports ::Getting Started
26.06.2012 Oracle Reports to JasperReports Page 14
► JasperReports Library ▪ Referenz der Beispiele:
http://jasperforge.org/uploads/publish/jasperreportswebsite/trunk/sample.reference.html
▪ Separater Download des Sourcecodes mit allen Beispielen (jasperreports-4.6.0-project.zip)
► iReport Designer ▪ Forum: http://jasperforge.org/projects/ireport/forum/ ▪ Wiki: http://jasperforge.org/plugins/mwiki/index.php/Ireport ▪ Tutorials & Hilfe:
http://jasperforge.org/uploads/publish/ireportwebsite/IR%20Website/ir_documentation.html
JasperReports ::Getting Started
26.06.2012 Oracle Reports to JasperReports Page 15
► Kostenpflichtiges Material: http://www.Jaspersoft.com ▪ iReport Designer Ultimate Guide (33€) ▪ https://www.jaspersoft.com/store/ireport-ultimate-guide-documentation ▪ Online Training, instructor led classes
JasperReports ::Getting Started
26.06.2012 Oracle Reports to JasperReports Page 16
► iReport Designer – die eingebauten Beispiele nutzen ▪ Zuerst die Sample Database starten (im aktuellen Java Prozess)
▪ Datenquelle auswählen
▪ Die jeweiligen Beispielberichte ausführen ▪ Die Datenbank wird automatisch heruntergefahren, wenn der iReport
Designer geschlossen wird
JasperReports ::Getting Started
26.06.2012 Oracle Reports to JasperReports Page 17
► In den folgenden Folien konzentriere ich mich auf den Übergang von Oracle Reports zu JasperReports sowie einige allgemeine Fragestellungen, mit denen die Anwender Probleme haben.
► Die Beispiele basieren auf dem OEHR Beispiel-Schema: ▪ http://www.oracle.com/technetwork/developer-tools/apex/application-
express/packaged-apps-090453.html
► Die beiden Berichtsgeneratoren unterscheiden sich in der Art, wie der Bericht abgearbeitet wird und auch wie ein Layout definiert wird.
► Oracle Reports: ▪ Multiple Layouts pro Bericht möglich ▪ Elemente können vertikal
und horizontal expandieren ▪ Rahmen und Wiederholungsrahmen ▪ Verwendung von Ankern
JasperReports ::Kann ich alle Fragestellungen lösen?
26.06.2012 Oracle Reports to JasperReports Page 18
► Berichtsbänder ▪ Title: erscheint nur einmalig am Anfang des Berichtes.
▪ pageHeader: erscheint oben auf jeder Seite, üblicherweise um Logos, den Firmennamen oder Datumsinformationen zu platzieren.
▪ columnHeader: listet die Spaltenüberschriften auf für Datenfelder im Detailbereich
▪ Detail: ist der Bereich, in dem alle Zeilen einer Abfrage ausgegeben werden
▪ columnFooter: dient der Zusammenfassung der Werte im Detailbereich, um z.B. Summen, Durschnitte oder andere Aggregate darzustellen
▪ pageFooter: erscheint unten auf jeder Seite
▪ Summary: erscheint am Ende des Berichts
JasperReports ::Report Layout
26.06.2012 Oracle Reports to JasperReports Page 19
Beispiel: 01-‐Understanding-‐Report-‐Bands/understanding-‐report-‐bands.jrxml
► Report Layout mit JasperReports / Tipps: ▪ Berichtsbänder bestimmen das Layout und die Verarbeitung ▪ Einige Bänder expandieren nach Bedarf ▪ Layout Objekte können innerhalb eines Bandes unterschiedlich positioniert
werden (Positionstyp): − Fix relative to top
− Float (wichtig, damit Elemente nach unten verschoben werden können)
− Fix relative to bottom
▪ Wichtige Einschränkung: − Die max. Höhe eines Bandes kann nicht größer sein als die
Seitenhöhe!
− Workaround: Ein weiteres Detail-Band hinzufügen
JasperReports ::Report Layout
26.06.2012 Oracle Reports to JasperReports Page 20
► Report Layout mit JasperReports / Tipps: ▪ Elementeigenschaft „Remove line when blank“ lässt leeren Platz
kollabieren, wenn das Feld über eine Bedingung unterdrückt wird:
▪ Mit Frames Inhalte gruppieren − Mit der Maus kann im Report Inspector
die Zugehörigkeit zum Frame verändert werden
JasperReports ::Report Layout
26.06.2012 Oracle Reports to JasperReports Page 21
► Master-Detail Beziehung ▪ Beispiel: Standort und alle Abteilungen an diesem Standort ▪ 02-‐Master-‐Detail/master-‐detail.jrxml
► Implementierung ganz normal über den Wizard, vordefinierte Templates und Stile sind zu empfehlen
JasperReports ::Use Case #: Master – Detail
26.06.2012 Oracle Reports to JasperReports Page 22
Demo: Master-Detail Beziehung mit
Template und Stilen
► Master- multiple Details ▪ Beispiel: Standort, alle Abteilungen und Lager am Standort ▪ 02-‐Master-‐Detail/master-‐multiple-‐details-‐
subreport.jrxml
► Implementierung mit Unterberichten (Subreports)
► Wie? ▪ Subreport Element auf den Designbereich ziehen ▪ Parameter für den Aufruf übergeben und auf den Master filtern
► Vorteile / Nachteile ▪ Für jede Detail-Abfrage wird eine neue Berichtsdatei benötigt ▪ Gut geeignet, weitere Komplexität aufzubrechen und in den
Subreport zu verlagern ▪ Wiederverwendbarkeit / Modularisierung
JasperReports ::Use Case #: Master – multiple Details
26.06.2012 Oracle Reports to JasperReports Page 23
Demo: Master-multi-Detail Report mit
Unterbericht
► Master- multiple Details ▪ Beispiel: Standort, alle Abteilungen und Lager am Standort ▪ 02-‐Master-‐Detail/master-‐detail-‐table-‐
component.jrxml
► Implementierung mit der Table Component
► Wie? ▪ Table Component auf den Designbereich ziehen ▪ Dataset innerhalb des Berichtes erstellen ▪ Hat fast alle Eigenschaften eines Unterberichts
► Vorteile / Nachteile ▪ Direkt im Bericht integriert ▪ „Nur“ eine Tabelle, kein Titel-/
Summary Band
JasperReports ::Use Case #: Master – multiple Details
26.06.2012 Oracle Reports to JasperReports Page 24
Demo: Master-multi-Detail Report mit Table Component
► Bedingte Anzeige einer Spalte ▪ Beispiel: Details anzeigen oder unterdrücken in Abhängigkeit der Daten
oder eines Parameters ▪ 03-‐Conditional-‐Columns/conditional-‐columns.jrxml
► Implementierung mit der Table Component ▪ http://thinkinginsoftware.blogspot.de/2011/06/ireport-dynamically-hide-
show-columns.html ▪ „Print when“ Ausdruck auf der jeweiligen Spalte definieren
− Z.B. $P{p_show_details}=="YES"
JasperReports ::Use Case #: Bedingte Anzeige einer Spalte
26.06.2012 Oracle Reports to JasperReports Page 25
► Bedingte Formatierung (aka Format Trigger) ▪ Beispiel: der Auftragsstatus wird farblich gekennzeichet,
sowohl Zellen als auch Zeilen ▪ 04-‐Conditional-‐Formatting/conditional-‐
formatting.jrxml
► Implementierung mit Stilen und bedingten Stilen
► Wie? ▪ Stil erstellen ▪ Bedingung zu Stil hinzufügen ▪ Bedingten Stil einem oder mehreren Elementen hinzufügen
► Vorteile / Nachteile ▪ Flexibel und wiederverwendbar ▪ Nicht ganz so intuitiv
JasperReports ::Use Case #: Bedingte Formatierung
26.06.2012 Oracle Reports to JasperReports Page 26
Demo: Bedingte Formatierung
► Berichtstrigger ▪ Beispiel: Zu Beginn des Berichtes DML oder DDL Statements
absetzen ▪ 05-‐Report-‐Trigger/report-‐trigger.jrxml
► Implementierung mit Scriptlets
► Wie? ▪ Java Klasse erstellen (Default Klasse JRDefaultScriptlet) und
benötigte Handler überschreiben, z.B. beforeReportInit() ▪ Klasse kompilieren ▪ Scriplet in Bericht registrieren
► Vorteile / Nachteile ▪ Durch einen JDBC Aufruf kann das Haupt-Select im Bericht
nicht beeinflusst werden, nur nachgelagerte Abfragen in einem Dataset oder Subreport
JasperReports ::Use Case #: Berichtstrigger
26.06.2012 Oracle Reports to JasperReports Page 27
Demo: Report-trigger
► User Exits ▪ Beispiel: C / C++ können zur Laufzeit in Oracle Reports eingebunden
werden ▪ 05-‐Report-‐Trigger/report-‐trigger.jrxml
► Implementierung mit Scriplets ▪ Scriptlets können direkt per Methode aufgerufen werden oder an
verschiedenen Punkten in der Berichterstellung interne Variablen beeinflussen.
▪ Die Scriplets werden in Java geschrieben
JasperReports ::Use Case #: User Exits
26.06.2012 Oracle Reports to JasperReports Page 28
► Modularisierung / Wiederverwendbarkeit ▪ Beispiel: Die Firmenadresse bzw. Liste der Geschäftsführer ist Bestandteil
von 100+ Berichten. Sollte sich daran etwas ändern, müssen alle Berichte aktualisiert werden.
▪ 06-‐Modularization/modularization.jrxml
► Implementierung mit Unterberichten ▪ Mit einem Unterbericht kann die Fußzeile nur einmalig in einem Bericht
erstellt werden und in allen anderen Berichten als Unterbericht integriert werden.
JasperReports ::Use Case #: Modularisierung / Wiederverwendbarkeit
26.06.2012 Oracle Reports to JasperReports Page 29
► Internationalisierung ▪ Beispiel: Der Bericht soll sowohl auf Deutsch als auch
auf Englisch und Französisch ausgeführt werden. Jeweils soll das entsprechende Datums- und Zahlenformat berücksichtigt werden.
▪ 07-‐Internationalization/I18nReport.jrxml
► Implementierung ▪ Java unterstützt Internationalisierung vollständig (i18n
compliant) ▪ Formatmasken benutzen Platzhalter für NLS analog zu
Oracle, z.B. #,##0.00 ▪ Textbausteine können über Properties-Dateien
ausgelagert werden
► Tipp: ▪ Umstellung der Landeseinstellungen in iReport über
Einstellungen > iReport > Compilation and Execution
JasperReports ::Use Case #: Internationalisierung
26.06.2012 Oracle Reports to JasperReports Page 30
Demo: internationalization
► Abfragen basierend auf einem Refcursor ▪ Beispiel: Der Bericht soll auf einem Refcursor ausgeführt werden. ▪ 08-‐RefCursor-‐Query/refcursor.jrxml
► Implementierung mit Standardfunktionalität ▪ Wird direkt in JasperReports unterstützt ▪ Als Abfragesprache „plsql“ auswählen
► Tipps: ▪ http://rajendratambat.blogspot.de/2011/10/calling-oracle-stored-procedure-
in.html ▪ http://michakurt.blogspot.de/2010/02/how-to-integrate-jasperserver-
and.html
JasperReports ::Use Case #: Abfragen basierend auf einem Refcursor
26.06.2012 Oracle Reports to JasperReports Page 31
► Abfragen basierend auf einem Refcursor
► Vorteile / Nachteile ▪ Die Datenfelder müssen manuell von Hand definiert werden ▪ Sehr gut geeignet, um einen VPD Kontext zu setzen, da damit die Abfrage
im Bericht direkt beeinflusst wird!
JasperReports ::Use Case #: Abfragen basierend auf einem Refcursor
26.06.2012 Oracle Reports to JasperReports Page 32
► JasperReportsIntegration – kostenlose Integration mit APEX ▪ http://www.opal-consulting.de/tools ▪ http://www.opal-consulting.de/forums
Integration mit Oracle APEX
26.06.2012 Oracle Reports to JasperReports Page 33
► Architektur ▪ 1: Benutzer klickt auf Link in APEX ▪ 2: PL/SQL API erstellt URL inkl.
Parameterübergabe, um J2EE Anwendung zu starten (über utl_http)
▪ 3: JasperReports erstellt JDBC zurück zu Oracle, führt Bericht aus und liefert Berichtsergebnis (z.B. PDF) zurück
► Eigenschaften ▪ Die Berichtsdateien werden lokal auf dem J2EE Server gespeichert.
− Einfach zu entwickeln komplett aus iReport heraus, keine Roundtrips notwendig
▪ Sicherheit durch Firewall implementiert ▪ Die API liefert einen BLOB zurück
− Direkt dem Benutzer anzeigen, in Tabelle speichern oder als Email Attachment verschicken
Integration mit Oracle APEX ::Architektur
26.06.2012 Oracle Reports to JasperReports Page 34
► Test der J2EE Anwendung ▪ http://<server>:<port>/JasperReportsIntegration/ ▪ 1: Test der JDBC Connection
− http://<server>:<port>/JasperReportsIntegration/test?_dataSource=default
▪ 2: Testbericht gegen die eigene Datenbank ausführen (test.jasper) − http://<server>:<port>/JasperReportsIntegration/report?
_repName=test&_repFormat=pdf&_dataSource=default
▪ 3: Parameter an den Bericht übergeben − http://<server>:<port>/JasperReportsIntegration/report?
_repName=test&_repFormat=pdf&_dataSource=default¶meter1=1¶meter2=2
► Tipp: ▪ Die Besten Fehlermeldungen erhält man bei der Ausgabe im HTML
Format
Integration mit Oracle APEX ::Getting started
26.06.2012 Oracle Reports to JasperReports Page 35
► Die Beispiel-Applikation (im Download enthalten) ▪ src/apex/
f860_JasperIntegrationTest_1.1.0.0.sql ▪ Einfache Tests der installierten Software
▪ Report testing tool
Integration mit Oracle APEX ::Getting started
26.06.2012 Oracle Reports to JasperReports Page 36
► Demo der API Aufrufe: ▪ Show report ▪ Get report as BLOB
► Schritt für Schritt Anleitung zur Integration in die Beispiel-Applikation: ▪ http://www.opal-consulting.de/downloads/free_tools/
JasperReportsIntegration/Opal-Consulting-JasperReportsIntegration.pdf
Integration mit Oracle APEX ::Getting started
26.06.2012 Oracle Reports to JasperReports Page 37
► JasperReports ist eine mächtige Alternative zu Oracle Reports
► Die wichtigsten Design Patterns sind übersetzbar
► Die Integration mit Oracle APEX ist einfach
► Vorsicht mit den Bibliotheken bzgl. der Lizenzen, am besten die Versionen verwenden, die iReport mit ausliefert.
Fazit
26.06.2012 Oracle Reports to JasperReports Page 38
Q&A
Dietmar Aust Opal-Consulting, Köln
www.opal-consulting.de daust.blogspot.com [email protected]
Q&A
26.06.2012 Oracle Reports to JasperReports Page 39
Backup-Folien
Bei Bedarf
Backup – zus. Folien
26.06.2012 Oracle Reports to JasperReports Page 40
► Jeder redet von einem Ersatz für Oracle Forms, was ist jedoch mit Oracle Reports? ▪ Oracle Reports ist immer noch in 12c dabei, es wurde jedoch erst in der
letzen Minute entschieden
► Oracle BI-Publisher? ▪ Pro:
− Power User können direkt mit den Office Produkten Templates erstellen (Excel, Word und auch PDF Templates möglich)
▪ Contra: − Kosten
− Komplexe pixel-perfekte Layouts können nicht vollständig umgesetzt werden
− Komplexere Funktionalitäten nur über direkte Verwendung von XSLT Befehlen
− Spalten in einer Tabelle können nicht konditional ausgeblendet werden
Warum? ::Ablösung von Oracle Forms und Reports?
26.06.2012 Oracle Reports to JasperReports Page 41
► iReport Designer und JasperServer Lizenz:
► GNU Affero General Public License version 3 (AGPLv3), modifizierte Variante der GPLv3
► Alle Lizenzvereinbarungen werden zusammen mit den jeweiligen Bibliotheken ausgeliefert:
► Disclaimer: Dies ist keine gesicherte rechtliche Auskunft, bitte die Lizenzbedingungen für den eigenen Fall prüfen lassen
JasperReports ::Lizensierung
26.06.2012 Oracle Reports to JasperReports Page 42
► How can we implement access control to our reports and the data? ▪ We can implement a simple or complex scheme based on our
requirements. ▪ The J2EE server can only be reached through APEX / the database ▪ The user is authenticated against APEX => we can use :APP_USER
safely
► Access control to the report ▪ Can be implemented as an authorization scheme
► Access control to the underlying data ▪ Check the users‘ privileges before calling the report via the API.
Integration mit Oracle APEX ::Security - Authorization
26.06.2012 Oracle Reports to JasperReports Page 43