Das PDF-Reporting Tool PL/PDF

Werbung
PDF-Reporting mit PL/SQL
Daniel Dymala
DOAG Regionaltreffen Hamburg/Nord
16. September 2014
Einleitung
Worum geht es
•
Einblick ins Reporting Management des Private Bankings
•
Das PDF-Reporting Tool PL/PDF
•
Spezielle Anforderungen und deren Umsetzung mit Hilfe von
PL/SQL und PL/PDF
Worum geht es NICHT
•
Evaluierung von PDF-Tools in Verwendung mit der Oracle
Datenbank
•
Einführung in PL/PDF
(“Hello World”-Beispiele auf plpdf.com vorhanden)
2
16.09.2014
PDF-Reporting mit PL/SQL
Einblick ins Reporting Management des Private Bankings
Allgemein
3
•
Reporting Modul ist komplett integriert ins Portfolio Management
Systems
•
Wird von Kundenberatern, von externen Vermögensverwaltern
aber auch von Kunden für einmalige Reportanfragen verwendet
•
Stellt alle relevanten Kundenreportings (sogenannte
Vermögensausweise) durch Reportpläne bereit
•
Einfache und schnelle Anwendung durch vordefinierte
Standardreportings
•
Aufgrund hoher Kundenanforderungen sehr flexibel ausgerichtet
durch Verwendung beliebig individueller Reportings
16.09.2014
PDF-Reporting mit PL/SQL
4
16.09.2014
PDF-Reporting mit PL/SQL – Beispiel Vermögensausweis
5
16.09.2014
PDF-Reporting mit PL/SQL – Beispiel Vermögensausweis
6
16.09.2014
PDF-Reporting mit PL/SQL – Beispiel Vermögensausweis
7
16.09.2014
PDF-Reporting mit PL/SQL – Beispiel Vermögensausweis
8
16.09.2014
PDF-Reporting mit PL/SQL
9
16.09.2014
PDF-Reporting mit PL/SQL – Beispiel Vermögensausweis
Einblick ins Reporting Management des Private Bankings
Konfiguration, Ausführung und Bereitstellung von Reportings
10
16.09.2014
PDF-Reporting mit PL/SQL
Einblick ins Reporting Management des Private Bankings
Beispiel für einen Reportplan
11
16.09.2014
PDF-Reporting mit PL/SQL
Einblick ins Reporting Management des Private Bankings
Reportliste (mit Reportauftrag aus Reportplan)
12
16.09.2014
PDF-Reporting mit PL/SQL
Einblick ins Reporting Management des Private Bankings
Reporting Engine
•
Verteilung von Reportaufträgen und Zuweisung genau eines Reportsets (=1
PDF) zu einem Prozess der Reporting Engine.
•
Die Reportsets werden zerlegt und die darin enthaltenden Reportbausteine
(=1-N Seiten Daten und Layout innerhalb des gesamten PDFs vom
Reportset) einzeln abgerufen.
•
Priorisierung von Reportaufträgen und Steuerung der Auslastung
(interne/externe Reports, Reportpläne (Batch))
•
Kontinuierliche Sammlung von Performance-Daten zur späteren Analyse
13
16.09.2014
PDF-Reporting mit PL/SQL
Einblick ins Reporting Management des Private Bankings
Reporting Statistik und Benchmark
•
Die ermittelten Performance-Daten zu jedem einzelnen Report innerhalb
eines Reportauftrags werden aggregiert und vor der Löschung der
Reportaufträge persistiert.
•
Regelmäßige Auswertung der Statistikdaten und Früherkennung von
Veränderungen (Laufzeit) bezogen auf
 Datenaufbereiten (SQL)
 Erstellung PDF (verwendete Version der DB Methoden)
 Zeitspanne der enthaltenen Charts (Response-Request Time)
•
Implementierung eines sinnvollen (automatischen) Benchmarks zur
regelmäßigen Überprüfung von Spitzenauslastungen (z.B. das Reporting
vieler Kunden zu einem ULTIMO)
•
Bereitstellung von Referenz-Reportsets
14
16.09.2014
PDF-Reporting mit PL/SQL
Das PDF-Reporting Tool PL/PDF
PL/PDF (http://www.plpdf.com)
Erstellung von PDF Dokumenten inkl. Verwendung von
Software
Development
Kit (SDK)
TrueType Schriften.
Unterstützung von PDF/A (ISO), digitaler Signatur,
Barcodes und Grafiken (PNG bzw. JPG).
Erzeugung von einfachen Charts.
Änderung von PDF Metadaten.
Extrahierung von einzelnen PDF-Seiten.
Toolkit
Zusammenfügen von PDFs (Merge).
Digitale Signatur und Wasserzeichen.
Komprimierung von PDFs.
Ermittlung der Anzahl von Seiten von PDFs.
15
16.09.2014
PDF-Reporting mit PL/SQL
Das PDF-Reporting Tool PL/PDF
Vorteile
•
Wird in der Oracle Datenbank installiert (kein weiterer Server)
•
Direkt via PL/SQL ansprechbar
•
•
Einbindung von externen Grafiken möglich
Überdurchschnittlich guter Support, teilweise sogar Umsetzung von
Kundenwünschen bereits im nächsten Release
•
Gutes Preis-/Leistungsverhältnis
Aber es gibt ggfs. auch Nachteile …
•
Keine Skalierung von Haus aus und wenn, dann nur durch
weiteren Datenbankserver möglich
•
Ohne PL/SQL geht nichts (kein WYSIWYG-Editor)
•
Kann nur einfache Grafiken/Charts erstellen
16
16.09.2014
PDF-Reporting mit PL/SQL
Das PDF-Reporting Tool PL/PDF
Und so einfach geht es los …
CREATE OR REPLACE FUNCTION GET_PDF(IN_TEXT IN VARCHAR2)
RETURN BLOB IS
l_pdf BLOB;
BEGIN
REPORT.PLPDF.Init;
REPORT.PLPDF.NewPage;
REPORT.PLPDF.SetPrintFont(
p_family => 'Arial',
p_style => NULL,
p_size => 12);
REPORT.PLPDF.PrintText(p_x => 10,p_y => 10, p_txt => IN_TEXT);
REPORT.PLPDF.SendDoc(p_blob => l_pdf);
RETURN l_pdf;
END;
/
SELECT GET_PDF('Herzlich Willkommen bei Berenberg') PDF FROM DUAL;
17
16.09.2014
PDF-Reporting mit PL/SQL
Zusammenführen einzelner PDFs (Merge)
Variante 1 (optimal für 2 oder wenige PDFs)
DECLARE
l_pdf_1 BLOB;
l_pdf_2 BLOB;
l_pdf_merge BLOB;
BEGIN
l_pdf_1 := < pdf zuweisen >;
l_pdf_2 := < pdf zuweisen >;
l_pdf_merge := PLPDF_TOOLKIT.Merge(
P_INPUTFILE1 => l_pdf_1,
P_INPUTFILE2 => l_pdf_2);
< l_pdf_merge z.B. INSERT INTO oder Return oder … >
END;
/
18
16.09.2014
PDF-Reporting mit PL/SQL
Zusammenführen einzelner PDFs (Merge)
Variante 2 (geeignet für viele PDFs)
DECLARE
l_pdf_merge BLOB;
-- eindeutige transaktionsnr. fuer den merge-auftrag
l_id NUMBER := SYS_CONTEXT('USERENV','SID');
BEGIN
INSERT INTO PLPDF_TK_MERGE_INPUTS (TR_ID, ORDER_NUM,INPUTFILE)
SELECT l_id, ROWNUM, PDF FROM MYREPORTS;
l_pdf_merge := PLPDF_TOOLKIT.MergeX(
P_TR_ID
=> l_id, -P_FONT
=> NULL,
P_FONTSIZE => NULL);
-- bereitgestellte daten wieder entfernen
DELETE FROM PLPDF_TK_MERGE_INPUTS WHERE TR_ID = l_id;
< l_pdf_merge z.B. INSERT INTO oder Return oder … >
END;
/
19
16.09.2014
PDF-Reporting mit PL/SQL
Inhaltsverzeichnis mit variablen Seitenzahlen
Numerierung starten und Inhaltsverzeichnis befüllen
-- z.B. erst nach dem Deckblatt die Numerierung bei 1 beginnen lassen
REPORT.PLPDF.SetPageNoStart;
-- die aktuelle Seitenzahl merkt sich PL/PDF gleich mit
REPORT.PLPDF.AddTOCItem(P_TXT => ‘<Reportüberschrift>‘);
Inhaltsverzeichnis auslesen und an den Anfang schieben
t_tocs PLPDF_TYPE.T_TOC;
t_tocs := PLPDF.GetTOCItems;
PLPDF.PrintCell(
P_W => 120,
P_H => 10,
P_TXT => RPAD(t_tocs(r_tocs).TEXT, 200,'.'),
P_LINK => t_tocs(r_tocs).LINK_ID);
PLPDF.InsertMovePage(
P_NEW_POS => 1, -- an den anfang, sofern ohne Deckblatt
P_ORIG_POS => PLPDF.CurrentPagenumber);
20
16.09.2014
PDF-Reporting mit PL/SQL
Parallelisierung der Reporting Engine
Scheduler Jobs für die Reporting Engine
•
Temporärer Hintergrundprozess für jede einzelne Reportanfrage
bzw. für N Reportaufträgen aus Reportplänen.
•
Beendet sich, wenn keine weiteren Reportaufträge mehr
vorhanden sind.
•
Permanent laufender Hintergrundprozess als Sicherheit im Falle
eines DB Reboots. Interval dabei nicht zu gering wählen, damit
keine ständige CPU-Last entsteht.
21
16.09.2014
PDF-Reporting mit PL/SQL
IHRE ANSPRECHPARTNER
Andriy Terletskyy
Daniel Dymala
Abteilungsdirektor DB-Entwicklung Wertpapier
IT/Organisation
+49 40 350 60-219
[email protected]
Oracle Consultant (extern)
IT/Organisation
+49 40 350 60-8057
[email protected]
Joh. Berenberg, Gossler & Co. KG
Neuer Jungfernstieg 20
20354 Hamburg
22
16.09.2014
PDF-Reporting mit PL/SQL
Herunterladen