Follow Us on Twitter

Rapporten vanuit APEX: Reports, Jasper, BI Publisher, PL/PDF of XSL-FO?

Gepubliceerd in

April 2014 – In veel van de projecten die gedaan worden met Oracle Application Express, is er een wens om rapporten te kunnen genereren. Dit gaat dan naast rapporten in een webapplicatie ook om rapporten die in PDF, Word documenten of direct op papier worden getoond. Om aan deze wens te voldoen zijn er diverse verschillende opties beschikbaar.

In dit Whitebook wordt een overzicht gegeven van een aantal mogelijkheden die er zijn en worden voor- en nadelen besproken in verschillende situaties.

Bepalen van wensen en eisen.

Om een goede keuze te kunnen maken, zijn een aantal zaken van belang. Hierbij kan gedacht worden aan budget, infrastructuur en beschikbare kennis. Maar ook zal de reeds beschikbare software een factor kunnen zijn die de keuze bepaalt.

In dit Whitebook komen een aantal zeer verschillende oplossingen aan bod. De ene oplossing is financieel aantrekkelijker, een andere weer gebruiksvriendelijker en een derde makkelijker om in te ontwikkelen. In de conclusie aan het eind wordt dan ook geen waardeoordeel geveld over welke oplossing de beste is. Ze hebben allemaal hun eigen voor- en nadelen die mee kunnen wegen in de beslissing om de optimale architectuur te kiezen.

Oud en vertrouwd: Oracle Reports

In het verleden heeft Oracle zelf al een reporting tool ontwikkeld. Oracle Reports werd vaak ingezet in combinatie met Forms. En eigenlijk is dat een constructie die nu nog steeds goed gebruikt kan worden. Het is vrij eenvoudig om bestaande rapporten die zijn gebouwd in Reports aan te roepen vanuit APEX.

Om dit te doen kan gebruik gemaakt worden van de zogenaamde SRW package. Deze package wordt meegeleverd met Oracle Reports Builder, maar is niet standaard beschikbaar om te gebruiken in PL/SQL op de database. Het aanroepen van Reports zou ook direct kunnen door gebruik te maken van de ingebouwde UTL_HTTP package, maar dat is niet erg gebruikersvriendelijk. De SRW package maakt het aanroepen van Reports een stuk toegankelijker en vrij rechttoe rechtaan.

De package kan geïnstalleerd worden met scripts die op de reports server aanwezig zijn in de directory <Oracle Home>\reports\admin\sql. De scripts hoeven niet door SYS of SYSTEM te worden gedraaid, maar kunnen ook in een ander databaseschema worden gezet.

Na de installatie kan een aanroep van een Report eruit zien als in onderstaande code.

 

declare
  l_srw_plist     srw_paramlist;
  l_job_id        srw.job_ident;
begin
  --
  l_srw_plist := srw_paramlist(srw_parameter('',''));
  --
  srw.add_parameter(l_srw_plist,'GATEWAY','http://:/reports/rwservlet');
  srw.add_parameter(l_srw_plist,'CMDKEY' , p_report_key);
  srw.add_parameter(l_srw_plist,'REPORT' , p_report_name);
  srw.add_parameter(l_srw_plist,'DESTYPE','PRINTER');    
  srw.add_parameter(l_srw_plist,'DESNAME', p_print_server || p_printer_name);
  srw.add_parameter(l_srw_plist,'' , p_parameter1);
  srw.add_parameter(l_srw_plist,'' , p_parameter2);
  --
  l_job_id := srw.run_report(l_srw_plist);
  --
end;

De ontwikkelaar kan een aantal parameters opgeven, waaronder een paar verplichte. De naam van het Report, de gateway en dergelijke zijn bijvoorbeeld vereist.
Verder kunnen ook parameters worden opgegeven die door de code op het Report worden gebruikt.

Deze constructie is erg geschikt in situaties waarin een organisatie bezig is met de transitie van een Forms applicatie naar een APEX applicatie. Op deze manier gaat de jarenlange investering in rapporten niet verloren. Veel organisaties die in het verleden met Forms hebben gewerkt, hebben ook vaak Reports ingezet om afdrukbare rapporten te bouwen. Met weinig tot geen inspanning kunnen deze rapporten vaak opnieuw worden gebruikt dankzij deze oplossing.

De voordelen van deze oplossing zijn duidelijk in het geval van hergebruik van bestaande rapporten. Er hoeft nauwelijks geïnvesteerd te worden in het ontwerpen en bouwen van de rapporten zelf, maar ook het inbouwen in APEX is een betrekkelijk eenvoudig karwei.

In het geval van nieuwbouw is het een minder voor de hand liggende keuze. Bij het gebruik van Reports hoort ook een prijskaartje in de vorm van licenties, maar ook het bouwen van de rapporten vergt een relatief zware inspanning.

XSL-FO

XSL Formatting Objects (XSL-FO) is een taal die gebruikt wordt als opmaak voor XML documenten. Bij deze oplossing wordt de data aangeboden in een XML document. Deze wordt vervolgens verwerkt samen met een XSLT-document (Extensible Stylesheet Language Transformations), waarin de opmaak is vastgelegd tot een XSL-FO document. Deze XSL-FO heeft daarna een processor nodig om te worden omgezet naar een PDF document.
XSL-FO Architectuur
Figuur 1 1 XSL-FO Architectuur

Een voorbeeld van zo’n processor is Apache FOP, maar sinds APEX 4.2.2 en APEX Listener 2.0 is het ook mogelijk om een FOP engine vanuit APEX zelf te gebruiken. Het voordeel van deze laatste techniek is dat het niet nodig is om een externe configuratie uit te voeren, maar dat alles binnen APEX en de APEX Listener geconfigureerd kan worden.

De instellingen kunnen binnen APEX worden vastgelegd in de Admin omgeving onder de Instance Settings.

FO Report printing
Figuur 2 Report Printing Settings

Als de juiste print server is ingesteld, kan de layout worden ingeladen in de applicatie. Hierbij kan gekozen worden voor een layout met Generic Columns, waarbij de XSL code in APEX zelf moet worden gedefinieerd.

Het is ook mogelijk om voor de optie 'Named Columns' te kiezen. Dan moet een RTF file (gemaakt in BI Publisher) of een XSL-FO bestand met de layout worden geüpload.

Dit XSL-FO bestand kan natuurlijk in een standaard text-editor zoals Notepad of vi worden gemaakt, maar het ligt meer voor de hand om daar in een speciale editor voor te gebruiken. Onder andere Altova en Stylus bieden daar producten voor aan, maar een goedkoper alternatief is bijvoorbeeld FO Designer van J4L.

Hierna is het een kwestie van PDF Printing aanzetten op het juiste rapport in de applicatie en de juiste layout te kiezen, en alles is klaar voor gebruik.

PDF Printing op report

Figuur 3 PDF Printing op een APEX Report

Deze oplossing kent een aantal voordelen. Zo is de prijs erg laag te houden. Zowel Apache FOP als de APEX Listener zijn gratis te gebruiken op een webcontainer als Tomcat of Glassfish. Als ook nog een XE database wordt gebruikt en de layout met een texteditor wordt gebouwd, is het geheel zelfs kosteloos te houden.

Verder is het ook goed mogelijk om een standaard layout te maken die voor meerdere rapporten gebruikt kan worden.

Een nadeel is de bewerkelijkheid. Het vergt enige training om een XSL-FO goed te kunnen maken, zelfs al worden daarvoor tools gebruikt. Inhoudelijk moet er flink worden gesleuteld om alle objecten op de juiste plek in het rapport te krijgen.

BI Publisher

BI Publisher is een programma uitgebracht door Oracle zelf, dat tegenwoordig onderdeel is van de Middleware stack. In 2008 heeft collega Maarten van Luijtelaar hier al een uitgebreid Whitebook over geschreven. Dit artikel is te vinden op http://www.whitehorses.nl/whitebooks/2008/praktijkervaring-met-oracle-bi.... Hoewel we inmiddels bijna 6 jaar verder zijn in de tijd en er al diverse nieuwere versies van de software zijn, is dit artikel nog steeds relevant.

In het kort hier nog een samenvatting van de belangrijkste eigenschappen van BI Publisher. Het is net als Apache FOP een processor om data en layout samen te voegen. De data kan uit verschillende bronnen komen en ook de output is divers. BI Publisher werkt ook met templates. In tegenstelling tot XSL-FO is de ontwikkelaar hierin niet beperkt tot XSL stylesheets, maar is het ook mogelijk om bijvoorbeeld de standaard RTF, DOC of PDF te gebruiken. Deze kunnen gemaakt worden in Microsoft Office, Acrobat Reader of Adobe Flash, waardoor de opmaak intuïtief is op te bouwen met enorm veel mogelijkheden.

BI Publisher report
Figuur 4 Voorbeeld van een BI Publisher rapport

Sinds versie 11g is het ook mogelijk om rapporten te ontwerpen in een webbased omgeving, zodat meerdere gebruikers interactief mee kunnen werken aan het rapport.
Met behulp van BI Publisher kan een pixel-perfect rapport worden gecreëerd, maar dat kost dan ook wel wat. Een licentie kost momenteel rond de € 36.000,- per processor of € 363,- per Named User. Dit is dus geen optie voor kleinere bedrijven, maar wel voor grotere klanten die belang hechten aan een perfecte layout en hiervoor bereid zijn te betalen.

PL/PDF

Een beetje een vreemde eend in de bijt tussen alle WYSIWIG (What You See Is What You Get) visuele editors is PL/PDF. Dit commerciële pakket is eigenlijk niets meer dan een set functies en procedures die in de database moeten worden geïnstalleerd. Een ontwikkelaar kan door middel van pure PL/SQL code vervolgens een rapporttemplate opmaken en daar data op plaatsen.

Het voordeel hiervan is dat er geen extra kennis in huis gehaald hoeft te worden. Bovendien biedt het alle flexibiliteit van de Oracle database voor het ophalen van gegevens. Daar hangt dan wel een prijs van $ 600 per licentie aan vast.

PL/PDF kan (zoals de naam al doet vermoeden) alleen PDF documenten genereren. Maar omdat deze PDF’s als een BLOB worden opgeslagen in de database, kan een ontwikkelaar daar verschillende kanten mee op. In APEX kan een PDF worden getoond op het scherm of direct naar een printer worden afgedrukt.

JasperReports

Naast de eerder genoemde alternatieven, is nog een andere tool beschikbaar die aan populariteit wint. JasperReports biedt een complete oplossing voor het ontwerpen, genereren, tonen en beheren van rapporten.

Het is een opensource initiatief en gratis ter beschikking gesteld onder de LGPL-licentie, waardoor de sourcecode van de aanroepende technologie niet vrijgegeven hoeft te worden. Dit maakt het interessant voor bedrijven die de software van hun bedrijfsprocessen liever niet vrij willen geven aan het publiek.

JasperReports Server is een stand-alone Reporting server gebaseerd op Java technologie, welke gebruikt kan worden als repository voor een grote hoeveelheid rapporten.

JasperReports Server Repository

Figuur 5 JasperReports Server Repository

De tool JasperSoft Studio (voorheen iReport Designer) kan gebruikt worden om deze rapporten te ontwerpen. Dit ontwerpen kan geheel in een visuele ontwerpstudio, maar ook door direct in de code te duiken.

JasperSoft Studio designer

Figuur 6 JasperSoft Studio designer

Het aanroepen van rapporten vanuit APEX gaat op een vergelijkbare manier als bij de Reports oplossing met SRW. Vanuit PL/SQL kan gebruik gemaakt worden van de UTL_HTTP package om een bestand op te halen of direct naar een printer te sturen.

Een opstelling met Oracle XE, Application Express, JasperReports en Glassfish zou net als XSL-FO een compleet gratis alternatief kunnen zijn voor gebruikers met een klein budget.

Conclusie

Er zijn vele manieren om rapporten te creëren met APEX. En er zijn vele redenen om een bepaalde variant te verkiezen boven een andere. In de praktijk is het dus belangrijk om uit te zoeken in welke situatie een organisatie zich bevindt, voordat een goed overwogen keuze kan worden gemaakt. Voorop staat dat alle genoemde constructies hun waarde kunnen hebben.

Als de belangrijkste wensen zijn dat de oplossing zo goedkoop mogelijk is, dan zijn de opties met JasperReports en XSL-FO voor de hand liggend. Waarbij de eerste de eventuele wens voor open source ook nog inwilligt.

Is de wens voor hergebruik van de bestaande rapporten het zwaarst wegend, dan is de oplossing met Oracle Reports en SRW zeer geschikt.

Gaat het om simpele rapporten en is performance daarbij erg belangrijk, dan is de keuze voor PL/PDF een logische.

Als de oplossing zo mooi en flexibel mogelijk moet zijn in zowel layout als format dan is BI Publisher de optie die dit biedt.

Feit blijft dat Application Express flexibel genoeg is om gebruikt te worden bij al deze verschillende oplossingen.

Bronnen

Waardering:
 
Tags:

Reacties

Er bestaat ook een oplossing die 1) enerzijds het template principe en de scheiding van data & vormgeving volgt van Bi Publisher en 2) dit gecombineerd met de eenvoud van installatie van een PL/PDF, een pure afhandeling in de database en een billijke prijs.

Deze oplossing heet Doxxy (http://www.doxxy.eu). 

De SQL statements (en parameters en de templates) worden in metadata gestopt -- dit ligt volledig in de lijn van de APEX filosofie --. Daarnaast is er een PL/SQL engine die dynamisch alle SQL statements uitvoert én de tags in je DOCX-template vervangt. Via een PL/SQL API kan je rapport in je APEX applicatie opgeroepen worden.

Dietmar Aust heeft tijdens zijn presentatie ter gelegenheid van APEX World ook naar deze oplossing verwezen.

Nieuwe reactie inzenden

De inhoud van dit veld is privé en zal niet openbaar worden gemaakt.

Meer informatie over formaatmogelijkheden

CAPTCHA
Deze vraag is om te testen of u een persoon bent en om spam te voorkomen
Image CAPTCHA
Enter the characters shown in the image.