21. Deutsche Oracle Anwenderkonferenz PDF Erstellung mit APEX - eine kostenlose Alternative Dietmar Aust Opal-Consulting, Köln 1. Dezember 2008 Agenda Vorstellung Opal-Consulting PDF-Erstellung mit APEX Berichterstellung mit JasperReports Integration als externer Bericht Integration über XML Feed Fazit PDF Erstellung mit APEX Dietmar Aust Seite 1 Vorstellung Opal-Consulting Dipl.-Inform. Dietmar Aust, Freelance Consultant 1997-2000: Consultant bei der Oracle Deutschland GmbH / Düsseldorf Schwerpunkte: Oracle Portal, Oracle Reports, Oracle Forms, PL/SQL, PLSQL Web Toolkit (OWA) Seit 09/2000: Freiberuflich Schwerpunkte: Oracle Portal, Oracle Reports, Oracle Application Express, Oracle Express Edition Seit Nov. 2005 ausschließlich APEX Entwicklung Aktivitäten http://daust.blogspot.com/ http://forums.oracle.com/forums/forum.jspa?forumID=137 (APEX) http://forums.oracle.com/forums/forum.jspa?forumID=251 (XE) PDF Erstellung mit APEX Dietmar Aust Seite 2 PDF–Erstellung mit APEX Die Problemstellung Wozu PDF Berichte? Druckfähig / pixelperfektes Layout Standard – Berichtswesen Formulare, Rechnungen, Angebote Möglichkeiten der PDF – Erstellung mit APEX Unterstützung seit 3.0 Standard Support − Apache FOP (nur PDF) − Cocoon (PDF und RTF) Erweiterter Support − Erfordert den BI-Publisher von Oracle ! Custom Solutions − Beliebige Reporting Engine anbinden (URL-interface) − Z.B. Oracle Reports, Crystal Reports, JasperReports, BIRT, etc… PDF Erstellung mit APEX Dietmar Aust Seite 3 PDF–Erstellung mit APEX Standard-Integration - Berichtsregion Client Apache / mod_plsql 1 Alternativen APEX 1. XSL/FO Transformation mit FOP (nur PDF) 2. Cocoon (PDF + RTF) 2 Definition: Auf dem Bericht J2EE / Tomcat Eigene Berichtslayouts mit XSLT spezifizieren PDF Erstellung mit APEX Dietmar Aust Seite 4 PDF–Erstellung mit APEX Standard-Integration Apache / mod_plsql Ablauf 1 APEX 1: Link ruft APEX Funktion auf Client 2: APEX ermittelt XSL des Layouts und das XML des Berichts 3: APEX macht Post an J2EE Server, übermittelt die Berichtsdefinition zusammen mit den Daten PDF Erstellung mit APEX Dietmar Aust Seite 5 2 J2EE / Tomcat PDF–Erstellung mit APEX Erweiterte Integration mit dem BI-Publisher Optionen Berichtsabfragen definieren (Alle Items der Applikation, multiple Abfragen integrieren) Eigene Berichtslayouts mit MS Word gestalten Ausgabe in RTF und Excel Was bedeutet das? Lizenz für den BI-Publisher Sehr mächtige Integration Langfristig evtl. Option, insbesondere wenn die Fachabteilungen viele Berichte in Word / Excel haben Einbindung von Power Usern Installation http://www.oracle.com/technology/products/database/application_ express/html/configure_printing.html PDF Erstellung mit APEX Dietmar Aust Seite 6 PDF–Erstellung mit APEX Konfiguration: /pls/apex/apex_admin (Instanz-Administration) Home>Service verwalten>Instance-Einstellungen PDF Erstellung mit APEX Dietmar Aust Seite 7 PDF–Erstellung mit APEX Custom Integration Apache / mod_plsql Beliebige Reporting Engines JasperReports Client Oracle Reports … beliebige, die aufgerufen werden über: 1 APEX 2 3 − URL − Betriebssystem-Aufrufe − … (external procedure calls) J2EE / Tomcat Berichtsdefinitionen Daten aus Oracle mit JDBC http-Tunnel für beliebige Dateien Wie? Tunnel mit utl_http, Berücksichtigung des MimeTypes Wozu? => Security (nur wenige Ports) und Autorisierung (wer darf was)? PDF Erstellung mit APEX Dietmar Aust Seite 8 JasperReports Übersicht JasperReports sehr beliebte Reporting Engine Java Bibliothek, um Reporting in Applikationen zu integrieren Standard im JBOSS Viele Projekte und große Kunden setzen es ein Berichtsdefinitionen in XML Funktionalitäten Datenquellen : JDBC, XML, OLAP, TEXT, … Ausgabeformate: PDF, XLS, HTML, CSV, TEXT, RTF, ODF Matrixberichte Multiple Datenquellen pro Bericht Berichtstrigger Unterberichte Bedingte Formatierung Fonts, Unicode, NLS … PDF Erstellung mit APEX Dietmar Aust Seite 9 JasperReports Beispiele PDF Erstellung mit APEX Dietmar Aust Seite 10 JasperReports Beispiele PDF Erstellung mit APEX Dietmar Aust Seite 11 JasperReports Beispiele PDF Erstellung mit APEX Dietmar Aust Seite 12 JasperReports Berichtsdesign mit dem iReport Designer iReport Designer Graphischer Editor, um XML – Berichtsdefinitionen für JasperReports zu erstellen Aktuell zwei Versionen, klassisch und Netbeans Download des iReport Designers http://ireport.sourceforge.net/ PDF Erstellung mit APEX Dietmar Aust Seite 13 JasperReports Berichtsdesign mit dem iReport Designer PDF Erstellung mit APEX Dietmar Aust Seite 14 JasperReports Berichtsdesign mit dem Report Designer Demo PDF Erstellung mit APEX Dietmar Aust Seite 15 Integration I – externe Berichte http Tunnel Berichtsdefinition in J2EE Applikation Aufruf aus APEX: Url für OnDemand Prozess f?p=&APP_ID.:0:&APP_SESSION.:APPLICATION_PROCESS=prc_show_url:::F_TMP_1: &F_TMP_1. OnDemand Prozess prc_show_url declare l_base_url varchar2(2000) := 'http://localhost:8080/jasperIntegration/report?_repName=Departments'; begin xlib_http_pck.display_url_raw(p_url => l_base_url || '&p_deptno=' || v('F_TMP_1')); exception when others then htp.p(sqlerrm); end; PDF Erstellung mit APEX Dietmar Aust Seite 16 Integration I – externe Berichte http Tunnel Implementierung des http Tunnels BEGIN l_http_request := UTL_HTTP.begin_request (p_url); DBMS_LOB.createtemporary (l_blob, FALSE); BEGIN LOOP UTL_HTTP.read_raw (l_http_response, l_raw, l_buffer_size); DBMS_LOB.writeappend (l_blob, UTL_RAW.LENGTH (l_raw), l_raw); END LOOP; EXCEPTION WHEN UTL_HTTP.end_of_body THEN UTL_HTTP.end_response (l_http_response); END; HTP.p ('Content-length: ' || DBMS_LOB.getlength (l_blob)); OWA_UTIL.http_header_close; WPG_DOCLOAD.download_file (l_blob); DBMS_LOB.freetemporary (l_blob); END; PDF Erstellung mit APEX Dietmar Aust Seite 17 Integration I – externe Berichte J2EE / Servlet Implementierung des Servlets ds = (DataSource) initContext.lookup("java:comp/env/jdbc/" + dataSource); conn = ds.getConnection(); jasperPrint = JasperFillManager.fillReport(reportFileName + ".jasper", reportParams, conn); ServletOutputStream out = response.getOutputStream(); JRPdfExporter exporter = new JRPdfExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out); exporter.exportReport(); PDF Erstellung mit APEX Dietmar Aust Seite 18 Integration I – externe Berichte Demo der Integration und der vereinfachten API Demo PDF Erstellung mit APEX Dietmar Aust Seite 19 Integration II – XML Feed Übersicht „echter“ Ersatz des BI-Publishers Kommunikation APEX BI-Publisher: XML – Feed der Daten Berichtsdefinition als RTF-Template BI-Publisher werden die Daten mit dem Template verbunden und im gewünschten Format zurückgeliefert PDF Erstellung mit APEX Dietmar Aust Seite 20 Integration II – XML Feed Umsetzung Berichtsabfrage erstellen XML exportieren Berichtslayout mit JasperReports erstellen Berichtslayout hochladen (.jrxml) Berichtslayout auf der Region festlegen J2EE Applikation: Berichtsdefinition kompilieren (.jrxml => .jasper) Bericht befüllen (XML an JasperReports übergeben) Ergebnis zurückliefern PDF Erstellung mit APEX Dietmar Aust Seite 21 Integration II – XML Feed Demo Demo PDF Erstellung mit APEX Dietmar Aust Seite 22 Fazit Bloß nicht programmieren !!! (z.B. PL/PDF) JasperReports: kostenlos, stabil, performant und flexibel (API) iReport Designer: kostenlos, intuitiv, mächtig und nicht kompliziert Integration in APEX ist einfach und sicher umzusetzen Java Servlet Programmierung notwendig RTF Export nicht optimal Textfelder / Positionsrahmen nicht einfach zu editieren Keine Ränder im Dokument PDF Erstellung mit APEX Dietmar Aust Seite 23 APEX Training - Ankündigung Oracle APEX: Knowhow aus der Praxis! 23.03 – 25.03.2009 in Bensheim http://www.opal-consulting.de/training Dozenten: − Patrick Wolf (APEX Entwickler des Jahres 2007; Oracle ACE Director) − Denes Kubicek (APEX Entwickler des Jahres 2008; Oracle ACE) − Dietmar Aust Praxisrelevant! Lessons learned von vielen APEX Projekten Hands-On Sessions PDF Erstellung mit APEX Dietmar Aust Seite 24 Kontakt Opal-Consulting Dietmar Aust Web: http://www.opal-consulting.de Blog: http://daust.blogspot.com/ E-Mail: [email protected] PDF Erstellung mit APEX Dietmar Aust Seite 25