Agenda ► Warum? ► JasperReports ▪ Kurzvorstellung, Features ▪ Getting Started ▪ Umsetzung relevanter Use Cases in JasperReports ► Integration with APEX ► 3 Dinge! ▪ JasperReports ist eine mächtige Alternative zu Oracle Reports ▪ Die wichtigsten Design Patterns sind übersetzbar ▪ Einfache Integration mit APEX ► Fazit Oracle Reports to JasperReports 26.06.2012 Page 1 Vorstellung Opal Consulting ► 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 Oracle Reports to JasperReports 26.06.2012 Page 2 Vorstellung Opal Consulting ► 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) Oracle Reports to JasperReports 26.06.2012 Page 3 Warum? ::Ablösung von Oracle Forms und Reports? ► 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ß! Oracle Reports to JasperReports 26.06.2012 Page 4 Warum? ::Alternativen? ► 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-birtjasper-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 Oracle Reports to JasperReports 26.06.2012 Page 5 JasperReports ::Die Komponenten ► 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, Benutzerverwaltung und Rechtemangement Oracle Reports to JasperReports 26.06.2012 Page 6 JasperReports ::Architektur ► 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, ...) Oracle Reports to JasperReports 26.06.2012 Page 7 JasperReports ::Funktionen ► 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 ▪ … Oracle Reports to JasperReports 26.06.2012 Page 8 JasperReports ::Beispiele Oracle Reports to JasperReports 26.06.2012 Page 9 JasperReports ::Beispiele Oracle Reports to JasperReports 26.06.2012 Page 10 JasperReports ::Beispiele ► Weitere Beispiele: ▪ JasperReports-­‐Demo-­‐Documents/ Oracle Reports to JasperReports 26.06.2012 Page 11 JasperReports ::iReport Designer GUI Oracle Reports to JasperReports 26.06.2012 Page 12 JasperReports ::Lizensierung ► 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 Oracle Reports to JasperReports 26.06.2012 Page 13 JasperReports ::Getting Started ► JasperReports Library ▪ http://jasperforge.org/website/jasperreportswebsite/trunk/ documentation.html?header=project&target=jasperreports Oracle Reports to JasperReports 26.06.2012 Page 14 JasperReports ::Getting Started ► 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 Oracle Reports to JasperReports 26.06.2012 Page 15 JasperReports ::Getting Started ► 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 Oracle Reports to JasperReports 26.06.2012 Page 16 JasperReports ::Getting Started ► 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 Oracle Reports to JasperReports 26.06.2012 Page 17 JasperReports ::Kann ich alle Fragestellungen lösen? ► 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/applicationexpress/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 Oracle Reports to JasperReports 26.06.2012 Page 18 JasperReports ::Report Layout ► 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 Beispiel: 01-­‐Understanding-­‐Report-­‐Bands/understanding-­‐report-­‐bands.jrxml Oracle Reports to JasperReports 26.06.2012 Page 19 JasperReports ::Report Layout ► 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 Oracle Reports to JasperReports 26.06.2012 Page 20 JasperReports ::Report Layout ► 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 Oracle Reports to JasperReports 26.06.2012 Page 21 JasperReports ::Use Case #: Master – Detail ► 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 Oracle Reports to JasperReports Demo: Master-Detail Beziehung mit Template und Stilen 26.06.2012 Page 22 JasperReports ::Use Case #: Master – multiple Details ► Master- multiple Details ▪ Beispiel: Standort, alle Abteilungen und Lager am Standort ▪ 02-­‐Master-­‐Detail/master-­‐multiple-­‐details-­‐ subreport.jrxml ► Implementierung mit Unterberichten (Subreports) Demo: Master-multiDetail Report mit Unterbericht ► 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 Oracle Reports to JasperReports 26.06.2012 Page 23 JasperReports ::Use Case #: Master – multiple Details ► Master- multiple Details ▪ Beispiel: Standort, alle Abteilungen und Lager am Standort ▪ 02-­‐Master-­‐Detail/master-­‐detail-­‐table-­‐ component.jrxml ► Implementierung mit der Table Component Demo: Master-multiDetail Report mit 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 Oracle Reports to JasperReports 26.06.2012 Page 24 JasperReports ::Use Case #: Bedingte Anzeige einer Spalte ► 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-hideshow-columns.html ▪ „Print when“ Ausdruck auf der jeweiligen Spalte definieren − Z.B. $P{p_show_details}=="YES" Oracle Reports to JasperReports 26.06.2012 Page 25 JasperReports ::Use Case #: Bedingte Formatierung ► Bedingte Formatierung (aka Format Trigger) ▪ Beispiel: der Auftragsstatus wird farblich gekennzeichet, sowohl Zellen als auch Zeilen ▪ 04-­‐Conditional-­‐Formatting/conditional-­‐ formatting.jrxml Demo: Bedingte Formatierung ► 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 Oracle Reports to JasperReports 26.06.2012 Page 26 JasperReports ::Use Case #: Berichtstrigger ► Berichtstrigger ▪ Beispiel: Zu Beginn des Berichtes DML oder DDL Statements absetzen ▪ 05-­‐Report-­‐Trigger/report-­‐trigger.jrxml Demo: Report-trigger ► 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 Oracle Reports to JasperReports 26.06.2012 Page 27 JasperReports ::Use Case #: User Exits ► 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 Oracle Reports to JasperReports 26.06.2012 Page 28 JasperReports ::Use Case #: Modularisierung / Wiederverwendbarkeit ► 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. Oracle Reports to JasperReports 26.06.2012 Page 29 JasperReports ::Use Case #: Internationalisierung ► 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 Demo: internationalization ► 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 Oracle Reports to JasperReports 26.06.2012 Page 30 JasperReports ::Use Case #: Abfragen basierend auf einem Refcursor ► 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-procedurein.html ▪ http://michakurt.blogspot.de/2010/02/how-to-integrate-jasperserverand.html Oracle Reports to JasperReports 26.06.2012 Page 31 JasperReports ::Use Case #: Abfragen basierend auf einem Refcursor ► 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! Oracle Reports to JasperReports 26.06.2012 Page 32 Integration mit Oracle APEX ► JasperReportsIntegration – kostenlose Integration mit APEX ▪ http://www.opal-consulting.de/tools ▪ http://www.opal-consulting.de/forums Oracle Reports to JasperReports 26.06.2012 Page 33 Integration mit Oracle APEX ::Architektur ► 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 Oracle Reports to JasperReports 26.06.2012 Page 34 Integration mit Oracle APEX ::Getting started ► 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&paramet er1=1&parameter2=2 ► Tipp: ▪ Die Besten Fehlermeldungen erhält man bei der Ausgabe im HTML Format Oracle Reports to JasperReports 26.06.2012 Page 35 Integration mit Oracle APEX ::Getting started ► Die Beispiel-Applikation (im Download enthalten) ▪ src/apex/ f860_JasperIntegrationTest_1.1.0.0.sql ▪ Einfache Tests der installierten Software ▪ Report testing tool ► Demo der API Aufrufe: ▪ Show report ▪ Get report as BLOB Oracle Reports to JasperReports 26.06.2012 Page 36 Integration mit Oracle APEX ::Getting started ► Schritt für Schritt Anleitung zur Integration in die Beispiel-Applikation: ▪ http://www.opal-consulting.de/downloads/free_tools/ JasperReportsIntegration/Opal-Consulting-JasperReportsIntegration.pdf Oracle Reports to JasperReports 26.06.2012 Page 37 Fazit ► 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. Oracle Reports to JasperReports 26.06.2012 Page 38 Q&A Q&A Dietmar Aust Opal-Consulting, Köln www.opal-consulting.de daust.blogspot.com [email protected] Oracle Reports to JasperReports 26.06.2012 Page 39 Backup – zus. Folien Backup-Folien Bei Bedarf Oracle Reports to JasperReports 26.06.2012 Page 40 Warum? ::Ablösung von Oracle Forms und Reports? ► 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 Oracle Reports to JasperReports 26.06.2012 Page 41 JasperReports ::Lizensierung ► 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 Oracle Reports to JasperReports 26.06.2012 Page 42 Integration mit Oracle APEX ::Security - Authorization ► 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. Oracle Reports to JasperReports 26.06.2012 Page 43