Translate

Dienstag, 1. Mai 2018

APEX 18.1 und Jasper Reports 6.5.1

Business Case:
"Schön, Business adequat, Template basiert drucken" (pdf, rtf..) aus APEX heraus..
Listen, Rechnungen, Briefe, Newsletter (??)  u.ä.

Jasper Reports wird als OpenSource da schon ordentlich beworben. Also mal ran...
Opal Consulting (Dietmar Aust) - hat da bereits 2012 etwas drüber geschrieben und eine sehr hilfreiche Test-Application zur Verfügung gestellt (hier).

Es braucht schon etwas Geduld, um die Integration von APEX (18.1) und Jasper Reports zum fliegen zu bringen.
Man stösst auf allerlei altes "Geraffel" (e.g. iReports und die "Inkompatibilität" mit JDK 8, usw.)...

Bis ich dann die folgende Konfiguration zum Laufen (oder fliegen) bekam:

1. Download Jasper Reports Studio (hat scheinbar TIBCO, der große "Integrierer" jetzt gekauft...) von dieser Site:
https://community.jaspersoft.com/project/jaspersoft-studio/releases

Das ganze ist Eclipse basiert... und ließ sich erstaunlicherweise smart installieren und starten (im Gegensatz zu iReport 5.6 (dem Vorgänger), wo erst ein altes (1.7 u45) JDK/JRE nötig war.
So müllt man sich dann voll mit den verschiedenen Java Versionen... - aber Ok, der iReport 5.6 (Netbeans basiert) wird auch nicht weiter supported von der Community - und Netbeans hat Schuld an der "alten" Java Version..(einer muss ja Schuld haben).

2. Für "Connection" zur DB gibt es zwar einen Oracle JDBC Driver, dessen "OJDBC6.jar"aber nicht enthalten ist (wahrscheinlich lizenzrechtliche Gründe).
Also: download des Treibers von:
http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html (11.2.)
oder für 12.1 usw.:
http://www.oracle.com/technetwork/database/application-development/jdbc/downloads/index.html

3. Installation des "externen JAR" ... in Jasper Reports Studio:
.. in "Projects" --> Properties:

--> ersten Eintrag rechts "add JARs..." - ich habe das .jar mit in ein Verzeichnis von JasperRports gelegt




4. Data Adapter anlegen:



... und es funzte sogleich - kaum macht man es richtig... cool.

4. eclipse und die Project Jar files: - interessant zu sehen....



5. Über den Project Explorer legt man ein neues Projekt an:


Ein 6-Min. Video zur Einführung der Komponenten und zur Erstellung eines Reports von Jaspersoft gibt es auf Youtube (inkl. Data Connection, Design Report, usw.) 

Kurzform: Myreport --> New --> Jasper Report --> Wizard startet... - Report Template (oder blank) auswählen --> "Report_File" (Name vergeben) vom Typ .jrxml... --> Next --> Data-Source wählen und mit "select * from Table" alle Spalten der Tabelle verfügbar machen
--> 
Über den Data Field Wizard die Spalten auswählen....--> Next "Group By" Wizard (einsetzen oder)  "Next" --> Finish ("Congratulations"-Meldung). --> Ergebnis:


wenn man dann auf "Preview" klickt, erscheint:



6. Nun das Ganze für APEX .... (18.1)

Dazu muss ich den Report kompilieren (rechte Maustaste) auf dem DEMO_Customers.jrxml... und es wird ein Demo_customers.jasper generiert.
Beide Dateien auf den Jasper Report Server kopieren... - zusätzlich die "coffee.jpg" und "coffee_stain.png", da diese im Header des Templates genutzt werden.
Wie? Rechte Maustaste: Copy Files_to.... --> lokal kopieren und dann per FTP auf den JR Server hochladen.
Da ich mit Maxapex.com arbeite, konnte ich keine JR Server Verbindung herstellen (da geht es nur per FTP) - aber es scheint mir, dass man nach der Erstellung einer Connection zum JR Server (Erstellung wie eine Connection zu einer Data-Source) auch direkt dorthin hochladen kann mit "export" (z.B. bei lokaler Installation).

7. APEX 18.1
Dietmar Aust's Test-Application 
"JasperReportsIntegration Test (v1.3.0.2)" herunterladen, unzippen und als Application importieren.


entsprechend das Setup anpassen, bis alle Haken rechts grün sind.

Dann zur "Testpage" wechseln und die eigenen Parameter eintragen:


Zu Step 3. und 4. oben: der Jasper Reports Server lag bei mir (bei Maxapex.com) auf dem Server und ist deshalb ROT.


Der erste Button "Show report directly" brachte bei mir Fehler mit einem doppelten // for report...
Über den 2.Button "Show report (through APEX proxy)" den Report als pdf oder rtf oder xls/csv aufrufen:



Update 22.6.2018:

Zur Parameterübergabe siehe bitte den "alten" BLOG von Dietmar Aust.

Ich habe lange "rumprobiert".... - hier die Lösung:

Den von Dietmar erwähnten Prozess (siehe unten) auf der Seite, wo man drucken möchte hinzufügen, auf die eigenen Werte anpassen und dann per Button auslösen, dann erscheint der PDF- Report auf der Folgeseite.

Die Steps:
1. Selektliste der (bei mir) Kunden mit Return Value ID anlegen P1_KUNDE_ID
2. Interactive/Classic Report darunter anlegen mit
select * from SERVICES where KUNDE_ID = :P1_KUNDE_ID
damit der Benutzer sieht, was er ausgewählt hat (z.B. Services oder Kontakte des Kunden)
.. diese Auswhl möcht ich nun im CI des Kunden etwas nett ausdrucken...
3. Button anlegen: "Drucken"
4. Process anlegen mit u.e. pl/sql. - condition: when Button pressed: Drucken
(PS: die anderen JS und pl/sql Funktionen auf der Seite 5 USAGE von Dietmar Aust kann man ignorieren - ist aber gut zum Setup und Testen.

Hier der von mir angepasste pl/sql Prozess (von Dietmar Aust):



declare

l_additional_parameters varchar2(32767);

begin

-- set the url for the j2ee application

-- better retrieve that from a configuration table

xlib_jasperreports.set_report_url(:G_REPORT_URL);

-- construct addional parameter list

l_additional_parameters := 'parameter1=' ||apex_util.url_encode(:p1_KUNDE_ID);
-- l_additional_parameters := l_additional_parameters || '&parameter1=' || apex_util.url_encode(:p1_filter_object_type);

-- call the report and pass parameters

xlib_jasperreports.show_report (p_rep_name => 'DYNAMO_A171909/test5',

-- p_rep_format => xlib_jasperreports.c_rep_format_pdf,

p_rep_format => 'pdf',

p_data_source => :p1_data_source,

p_additional_params => l_additional_parameters);


-- stop rendering of the current APEX page

apex_application.g_unrecoverable_error := true;



end;


das Package xlib_jaspereports bringt die Installation der JRI Lösung von Dietmar Aust mit!

Re: xlib_jasperreports.set_report_url(:G_REPORT_URL);
 

die Jasper reports server URL habe ich hier als Globale Variable bei der Application angelegt: mit: http://servername:port
/JasperReportsIntegration/report









Re: xlib_jasperreports.show_report (p_rep_name => 'DYNAMO_A171909/test5',

Hier habe ich die Erfahrung gemacht, dass ich noch den Usernamen dazunehmen musste vor dem Namen des Reports (test5).

re: p_data_source => :p1_data_source,
Ich habe hier auf der Seite ein Feld, wo ich den Datasourcewert als Source/Default eingetragen habe - man könnte die Datasource aber auch als 'meineDatasource' hier eintragen (oder als Globale Variable).

Jasper Reports Studio:
 
Für die Parameter muss man das SQL natürlich anpassen:

1. Im Design Modus des JasperReports unten links im Outline Pane auf "Parameter"  mit echter Maustaste: Create Parameter - einen Parameter anlegen: "parameter1" - die Properties dazu findet man unten rechts - Typ muss sein: java.class.String



2. Danach erneut im Outline Pane mit rechter Maustaste auf den Namen des Reports klicken und "Dataset and Query" aufrufen.



3. Dataset und Query Dialog

Zunächst oben die Datasource wählen - dann hat man Zugriff auf die Tabellen und kann rechts daneben im TEXT-Modues gleich normales SQL schreiben:

SELECT *
FROM user_objects
WHERE OBJECT_TYPE  = $P{parameter1}

Es gibt unten im Dialog auch einen "Run-Modus" , der bei mir MIT einem Parameter keine Daten anzeigte. 


Zurück im Haupt-Design-Editor kann man mit "Preview" den Report Testen. Für den Parameter kommt dann ein extra-Pane hoch, wo man die Query-Werte eingeben kann, die später über die URL an den Jasper Report Server gegeben werden.

Tipp: um zu testen, ob die Parameter-Übergabe aus APEX heraus geklappt hat, habe ich im Header einfach den "parameter1" mit reingenommen (von unten links einfach in den Report reinziehen). 

Viel Erfolg!

PS: ein SEHR umfassendes und informatives PDF hat Markus Hohloch zusammengestellt.
Inkl. der Parameter-Übergabe.
Ein großes Danke dafür Markus !!!
Es gibt auch eine APEX Demo (Apex-experts) dafür, die aber derzeitig (1.5.2018) nicht läuft.




Keine Kommentare:

Kommentar veröffentlichen