270 likes | 636 Views
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
E N D
21. Deutsche Oracle Anwenderkonferenz PDF Erstellung mit APEX - eine kostenlose Alternative Dietmar AustOpal-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 Dietmar Aust
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) Dietmar Aust
PDF–Erstellung mit APEXDie 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… Dietmar Aust
PDF–Erstellung mit APEXStandard-Integration - Berichtsregion Apache / mod_plsql Client 1 APEX • Alternativen • 1. XSL/FO Transformation mit FOP (nur PDF) • 2. Cocoon (PDF + RTF) • Definition: • Auf dem Bericht • Eigene Berichtslayouts mitXSLT spezifizieren • Alternativen • 1. XSL/FO Transformation mit FOP (nur PDF) • 2. Cocoon (PDF + RTF) • Definition: • Auf dem Bericht • Eigene Berichtslayouts mitXSLT spezifizieren 2 J2EE / Tomcat Dietmar Aust
PDF–Erstellung mit APEXStandard-Integration Apache / mod_plsql • Ablauf • 1: Link ruft APEX Funktion auf • 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 1 APEX Client 2 J2EE / Tomcat Dietmar Aust
PDF–Erstellung mit APEXErweiterte 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 Dietmar Aust
PDF–Erstellung mit APEX • Konfiguration: /pls/apex/apex_admin (Instanz-Administration) • Home>Service verwalten>Instance-Einstellungen Dietmar Aust
PDF–Erstellung mit APEXCustom Integration Apache / mod_plsql 1 APEX • Beliebige Reporting Engines • JasperReports • Oracle Reports • … beliebige, die aufgerufen werden über: • URL • Betriebssystem-Aufrufe • … (external procedure calls) • 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)? Client 2 3 J2EE / TomcatBerichtsdefinitionenDaten aus Oracle mit JDBC Dietmar Aust
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 • … Dietmar Aust
JasperReportsBeispiele Dietmar Aust
JasperReportsBeispiele Dietmar Aust
JasperReportsBeispiele Dietmar Aust
JasperReportsBerichtsdesign 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/ Dietmar Aust
JasperReportsBerichtsdesign mit dem iReport Designer Dietmar Aust
JasperReportsBerichtsdesign mit dem Report Designer • Demo Dietmar Aust
Integration I – externe Berichtehttp Tunnel • Berichtsdefinition in J2EE Applikation • Aufruf aus APEX: • Url für OnDemand Prozess • OnDemand Prozess prc_show_url f?p=&APP_ID.:0:&APP_SESSION.:APPLICATION_PROCESS=prc_show_url:::F_TMP_1:&F_TMP_1. 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; Dietmar Aust
Integration I – externe Berichtehttp 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; Dietmar Aust
Integration I – externe BerichteJ2EE / 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(); Dietmar Aust
Integration I – externe Berichte Demo der Integration und der vereinfachten API • Demo Dietmar Aust
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 Dietmar Aust
Integration II – XML FeedUmsetzung • 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 Dietmar Aust
Integration II – XML Feed Demo • Demo Dietmar Aust
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 Dietmar Aust
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 Dietmar Aust
Kontakt • Opal-Consulting Dietmar Aust • Web: http://www.opal-consulting.de • Blog: http://daust.blogspot.com/ • E-Mail: dietmar.aust@opal-consulting.de Dietmar Aust