Follow Us on Twitter

Praktijkervaring met Oracle BI Publisher

Gepubliceerd in

Mei 2008 - Het is alweer een tijdje geleden dat we een blik geworpen hebben op BI Publisher, Oracle’s platform voor het ontwikkelen en publiceren van documenten. BI Publisher bestaat al sinds 2003 onder de naam XML Publisher en is oorspronkelijk ontwikkeld als een oplossing voor de rapportages in de E-Business suite. Nu is BI Publisher onderdeel van de Business Intelligence Suite (OBI), maar kan ook standalone gedraaid worden. In het vorige Whitebook over XML Publisher werd de vraag gesteld of het de opvolger zou worden van Oracle Reports. In dit Whitebook proberen we een antwoord hierop te vinden vanuit het perspectief van de ontwikkelaar.

Architectuur

Het hart van BI Publisher is een XSLT processor die data en layout samenvoegt. De data kan uit verschillende bronnen komen waaronder bijvoorbeeld een Oracle database, MySQL, webservices, XML bestanden en RSS feeds. Het basisprincipe van BI Publisher is simpel: formatteer de brondata via templates en genereer de output in elk gewenst formaat.

BI Publisher architectuur

Datasets

De eerste stap in het ontwikkelen van een rapport is het definiëren van de datastructuur waarmee gewerkt gaat worden. Hiervoor maak je in de BI Publisher server een datatemplate aan. In dit XML bestand wordt aangegeven wat de verschillende bronnen zijn voor data van het rapport. Je hoeft je niet te beperken tot een enkele soort, alle combinaties zijn mogelijk. Zo kan de data bijvoorbeeld bestaan uit een database query samen met het resultaat van een webservice. Het XML bestand kan handmatig worden gewijzigd, maar gelukkig kan je dit ook doen in de BI Publisher web console. Wanneer een SQL datasource gebruikt wordt kan via de query builder visueel de zoekvraag samengesteld worden.

 


Definitie van een dataset in de BIP server console

Wanneer de dataset voor het rapport is bepaald kan een XML bestand worden gegenereerd met voorbeeld data. Met dit voorbeeldbestand kan gemakkelijk een template bestand worden ingericht die de samen met de uiteindelijke data het rapport vormt. Oracle BI Publisher heeft hiermee een groot voordeel ten opzichte van Oracle Reports: echte scheiding van data en presentatie.

Templates

BI Publisher kan overweg met verschillende typen templates voor het formatteren van de brondata zoals RTF, Excel, PDF en uiteraard standaard XSL stylesheets. Om PDF templates te maken moet gebruik gemaakt worden van Adobe Acrobat, waarin formuliervelden worden geplaatst bovenop het paginadesign. RTF kan het best gebruikt worden in combinatie met Microsoft Word. Je hebt dan alle denkbare opmaakmogelijkheden tot je beschikking en het opslaan als een RTF document wordt ondersteund. Maar mooier is dat de BI Publisher desktop tool (een plugin voor Microsoft Word) gebruikt kan worden. XML-voorbeelddata kan met deze tool worden ingelezen en gebruikt worden om de elementen op de juiste plaats te zetten in het template. Dit resulteert in formuliervelden in het template die referenties bevatten naar de data elementen. Via wizards kan uit de structuur een iteratief element aangeduid worden waarna de basisopmaak daarvoor geplaatst wordt. Het gebruik van de plugin is dus erg handig om snel de basisstructuur van het rapport neer te zetten. Daarna kan met alle mogelijkheden die de tekstverwerker te bieden heeft het template aangepast en verfraaid worden.

Wanneer we dubbelklikken op het formulierveld verschijnen de eigenschappen en kunnen datatype, formaatmasker en aggregatiefuncties worden aangepast. Interessant is het tabblad “advanced” waar de uiteindelijke code voor het element kan worden bekeken. Deze code kan een simpele referentie zijn in de vorm <?VELDNAAM?>, maar mag ook een XPATH expressie of zelfs een XSLT fragment zijn. Daarnaast biedt Oracle ook een aantal SQL-achtige functies als decode, rpad, to_number en sysdate zodat de Oracle ontwikkelaar snel aan de slag kan. Deze functies maken deel uit van XDOFX, een XSL die beschikbaar is voor gebruik met RTF templates. Uiteraard kan een eigen XSL bestand geïmporteerd worden in het template om bijvoorbeeld in één keer alle elementen waarvan de naam eindigt op _DATUM te voorzien van een masker. Kennis van XSL en XPATH is zeker geen overbodige luxe wanneer gecodeerd moet gaan worden binnen de templates. Een goede raad is dan ook om de datastructuur van tevoren zo volledig mogelijk te maken. Dit bevordert de overzichtelijkheid en vermindert de noodzaak voor ingewikkelde code constructies in het template. Wanneer de database als bron wordt gebruikt kan middels SQL al veel bereikt worden: door bijvoorbeeld inline cursors te gebruiken voor master-detail relaties kunnen repeterende gegevens gemakkelijker geïdentificeerd worden in de XML datastructuur.


Eigenschappen van een formulierveld en het datastructuur window in MS Word

Als dezelfde documentsecties in meerdere templates voorkomen kan gebruik worden gemaakt van subtemplates. Hiervoor kan een apart RTF document gemaakt worden met daarin een herbruikbaar layout-fragment, voorzien van een begin- en eindmarkering. Het is op deze manier mogelijk om bijvoorbeeld een standaard briefhoofd te ontwikkelen die vervolgens in meerdere templates gebruikt kan worden. Jammer is wel dat het subtemplate geïmporteerd moet worden met een volledig padnaam op het filesysteem van de BI Publisher server of een weblokatie: dit kan wel eens problemen opleveren bij deployment naar verschillende omgevingen.

Meertaligheid

Wanneer een rapport in meerdere talen beschikbaar gesteld moet worden zijn er twee mogelijkheden. Ten eerste kan voor elke taal een apart template worden gemaakt. Dit is een goede optie indien de layout voor een specifieke taal anders is. De naam van het RTF template moet dan voldoen aan de volgende specificatie:

templatenaam_language_TERRITORY.rtf

Op deze manier wordt bepaald welk template gebruikt moet worden bij samenstellen van het document. Indien de layout niet wijzigt voor een specifieke taal kunnen de vaste teksten uit een template onttrokken worden. Er wordt dan een XLIFF bestand gegenereerd dat de teksten zelf bevat samen met metadata over de plaatsing ervan binnen het template. XLIFF is een XML standaard die gebruikt wordt voor vertalingen waarbij tekst in de originele taal, samen met de vertaling ervan wordt opgenomen. Dit bestand kan in specifieke tools worden ingeladen of handmatig worden aangepast. Het uiteindelijke XLIFF bestand moet aan dezelfde naamgeving voldoen als een vertaald template, maar dan met xlf als extensie. Bij deze laatste optie moet echter wel rekening gehouden worden dat drastische wijzigingen in het template wel eens nare gevolgen kunnen hebben voor reeds gemaakte vertalingen. Houd ook hier rekening met vaste paden en bestandsnamen van subtemplates wanneer een rapport meertalig is: er wordt geen XLIFF vertaalbestand toegepast op gerefereerde templatebestanden.

 

De BI Publisher server aan het werk

Als de templates zijn ontwikkeld moeten deze via de web console geïmporteerd worden in de BI Publisher server. Daarna kan het uiteindelijke document in verschillende formaten bekeken worden : HTML, PDF, RTF, Excel en natuurlijk de ruwe XML data. Het rapport kan op gezette tijdstippen gegenereerd en afgeleverd worden door gebruik te maken van de scheduler van BI Publisher. Hiervoor is een database vereist, maar ook nu zijn we niet gebonden aan enkel een Oracle database. Voor de uiteindelijke aflevering zijn genoeg opties. Een WebDAV lokatie, email, FTP, gedefinieerde printers en zelfs integratie met CUPS printservers behoren tot de mogelijkheden. Een andere interessante eigenschap van BI Publisher is bursting. Hiermee kan op basis van sleutelwaarden in de data bepaald worden welke kanalen gebruikt moeten worden voor de aflevering. Ook kan hierdoor bepaald worden welk template en welke taal wordt gebruikt voor de samenstelling van het rapport. Het is dus mogelijk om bijvoorbeeld een master rapport op te splitsen en alleen de relevante gegevens per persoon op te sturen via email.


Bursting: splitsen en afleveren van het rapport

Conclusie

Voor de rapportontwikkelaar is BI Publisher een verademing om mee te werken. Het is snel en vanuit Word kan op basis van de voorbeelddata met behulp van de desktop tool heel vlot een rapport worden samengesteld. Erg fijn is dat vanuit Word snel een preview opgestart kan worden zonder steeds de templates te hoeven importeren in de BI Publisher server.


Een preview van het PDF rapport

BI Publisher wint het in ieder geval van Oracle Reports op gebied van integratie. Reports is een gesloten, proprietary tool, waar BI Publisher gebruik maakt van open standaarden en voorzieningen voor alle denkbare databronnen. Voor het toegangscontrole en beveiliging van rapporten kan gebruik gemaakt worden van het securitymodel van BI Publisher of een koppeling met een LDAP server. Indien gewenst kan ook ingehaakt worden of de security models die gedefinieerd zijn in de Oracle E-Business- of Business Intelligence suite. Voor het aansturen van rapporten zijn er al een tijdje java API’s beschikbaar. Vanaf versie 10.1.3.3.1 zijn er ook nog webservices toegevoegd waardoor integratie met bijvoorbeeld Apex of de SOA suite tot de mogelijkheden behoort.

Ondanks dat de gebruikersinterface van de webconsole en de Desktop tool niet altijd even intuïtief is, is het maken van rapportages met BI Publisher in ieder geval een stuk eenvoudiger geworden. En door de toegankelijkheid van Microsoft Word als template tool zou het zelfs mogelijk zijn om eindgebruikers zelf rapporten te laten samenstellen.

Relevante links en referenties

Over de auteur
Maarten van Luijtelaar is Oracle consultant bij Whitehorses en heeft ruim 9 jaar ervaring in de IT. Hij houdt zich voornamelijk bezig met applicatieontwikkeling met Oracle technologie en heeft veel ervaring met PL/SQL, Forms, Application Express en houdt zich daarnaast bezig met nieuwe ontwikkelingen in technologie.

Waardering:
 

Reacties

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.