ADempiere/Compiere JasperReports Integration HowTo

From ADempiere
Revision as of 23:24, 23 June 2007 by Hengsin (Talk)

Jump to: navigation, search
This Wiki is read-only for reference purposes to avoid broken links.

Overview

Integration with ADempiere 3.1.4, is done by Trifon. But if you want to integrate to older ADempiere versions, take a look here.

JasperReports is a powerful open source Java reporting tool that has the ability to deliver rich content onto the screen, to the printer or into PDF, HTML, XLS, CSV and XML files. JasperReports will allow you to generate wonderful reports, including reports with subreports into them.

This article show you as configure ADempiere to use JasperReport into the system.

Preparing ADempiere

The first step that you need is add some field for store the filename of your report, then you will be able to add process for your report and fill the name for each one.

Then come on, start with it!

Start ADempiere

Start ADempiere as with the Java Web Start method (http://adempiere_server:port/adempiere.jnlp) .

Note: You might need a JDK version not a JRE in order to compile the Report.

Login

Login as SuperUser with the System Administrator Role.

JRI Login SuperUser.PNG
JRI Login SystemRole.PNG

Create a new system Element

Open the Element window from Application Dictionary > Element:

JRI Menu Element.PNG
JRI FindRecord Element.PNG

Click the New Element Icon

JRI Element.PNG

Fill the fields and Save.

Database column creation

Go to Table and Column window from Application Dictionary > Table and Column:

JRI FindTable.PNG

Fill the name as Process (quickly access) and press Ok button.

JRI Table&Column.PNG

Select AD_Process and click the Column tab

JRI Table&Column Column.PNG

Add a new Column and change to Data grid toggle. Fill the fields as show the image. 'Save and click Synchronize Column

JRI Synchronize Confirm.PNG

Click OK and note that you have a information: ALTER TABLE…..

JRI Synchronize ALTER.PNG

So it’s OK!

Report & Process window modification

Open the Window, Tab & Field window from Application Dictionary > Window, Tab & Field.

JRI Menu Window.PNG
JRI FindWindow.PNG

Fill the Name for search with Report & Process.

JRI Window.PNG

Click on each tab until the Field tab:

JRI WindowField.PNG

Click the New Record and change to Data grid toggle.

JRI WindowFieldAdded.PNG

Fill and Save.

Ok now you have modified ADempiere. Now we will create a Process to show a sample report.

Tip: You can enter @Classname@=org.compiere.report.ReportStarter in the Display Logic field, this way the JasperReport field will only be shown when the process is a Jasper Report process.

Process Creation

Simple standalone process creation

In the sample we will create a process called Standalone accessible directly from the main menu. You are logged in as System Administrator role, then go to Report & Process:

JRI Menu Report&Process.PNG
JRI FindReport.PNG

Select New Record...

JRI Report&Process Standalone.PNG

Fill the fields and Save.

Note: if you click the Report check box, and choose one Report View, it will popup a ADempiere report screen together with JasperReport Viewer Screen, so just click it to unchoosed.

Parameters

In the parameter tab of the Report & Process window select new.

Field "Name": select a parameter name as you please.

Field "DB Column Name": the name must be identical to the parameter name defined in the Jasper Report (file jrxml). It is not the name of the DB column or view, but the name of the parameter in the Jasper Report. Otherwise, you will get an empty report. If you want to avoid problems, define the column name as Parameter name and select it as "DB Column Name", too.

It is irrelevant wether the paramenter has been defined as promptable in iReports or not.

In the SQL statement of the .jrxml file you have to refer to the parameter in the following way: $P{MY_PARAMETER} or $P!{MY_PARAMETER}. This way, if you have defined a parameter as XXX, you refer to it in the Japer Report SQL statement as $P{XXX} or $P!{XXX}. The last type is for string substitution.

When you run an Application Server Deployment, and you have a Subreport, then the Parameter SUBREPORT_DIR for establishing the location of the subreport must have a value like the one described in the section "Deploy reports on the application server":http://adempiereservename.domain/webApp/standalone.jrxml, or http://adempiereservename.domain:adempierewebport/webApp/standalone.jrxml, if the web port is other than 80.

Menu Creation

Go to Menu Window, from System Admin > System Rules > Menu

JRI Menu Menu.PNG

Open the Menu Window and Create a new...

JRI Add Menu Standalone.PNG

Fill and Save.

Ok, now Logout and Login again to see the new Process Standalone in the ADempiere main Menu...

Testing the New Process

JRI Main Menu Standalone System.PNG

The file go in $ADEMPIERE_HOME/reports be careful with some Java Web Start installations because if the ADEMPIERE_HOME is not set you might get something like c:\Document And Settings\user\Desktop\null as ADEMPIERE_HOME It is not a problem for testing this you just have to start the process without putting the report you hear a sound marking an error.

JRI Process Confirm Start Standalone.PNG

Just close the window and go to the Tools/preference Menu Select the Errors Tab and you can see exactly where ADempiere is looking for your Report.

JRI StandaloneReport Viewer.PNG

Ok, it’s your Report. Congratulations!

Security Access to new menus

In order to get access to your new Standalone report from your your target Client Role, you need to allow access to process. Then, Login as your client Admin Role:

JRI Login GardenAdm.PNG

Go to Role window:

JRI Menu Role.PNG

and open the window...

JRI Role ProcessAccess.PNG

Add a role accessing your process in the Process Access Tab and Save.

Exit from ADempiere and Login again.

JRI MainMenu Standalone GW.PNG

Ok, it’s done!.

Report deployement Strategy

It is now easy to deploy reports in $ADEMPIERE_HOME/reports or directly on a web server. Just specify the full URL in the Report & Process/JasperReport field and the report wil be downloaded from the web server. Note that the source jrxml is automatically stored in the local temp directory and replaced if a new version is present on the server. Note also that the compiled version is also kept in the temp directory so the compilation is only done one time.

Deploy reports on the application server

It is probably the best method for deploying reports. You need to create a package containing your report. The best way is to create an EAR deployement package and put it in the jboss/server/adempiere/deploy directory of the application server. Jboss will detect that you add a package and deploy it automatically, if you remove it removes.

You can find on svn sourceforge a webApp.ear package wich include standalone.jrxml report deployed as

http://adempiereservename.domain/webApp/standalone.jrxml, or as
http://adempiereservename.domain:adempierewebport/webApp/standalone.jrxml, if web port is other than 80

Deploy reports as attachment

This feature is added after release 3.2 . You can now deploy the jasper report source (.jrxml) or compile file (.jasper) as attachment to the jasper report process. Use the special syntax attachment:reportFileName ( for e.g, attachment:standalone.jrxml ) to indicate the jasper report file that should be loaded from the process's attachment. If subreport and properties resource file is use, you need to upload those as attachment to the same process as well.

Tips

Stored Procedures

Maybe you need use a Jasper Report with Stored Procedures, but it is unable to call Oracle stored procedures directly......, here is a HowTo.

iReport version

If you use iReport to edit and compile the report, you must have care what version of JasperReports does your iReport use. If you use iReport to generate the .jasper file (the report compiled file) sometimes it cannot be loaded by ReportServer if the versions are different. You need to use the same JasperReport version when you compile the report and on ADempiere when you start the report; otherwise you can see a error message in the Jboss console like as:.

2006-08-25 08:39:05,406 INFO [STDOUT] java.io.InvalidClassException: net.sf.jasperreports.engine.base.JRBaseReport; 
local class incompatible: stream classdesc serialVersionUID = 10200, local class serialVersionUID = 608

Please take a look in the next Tip, because the error could be different if you're using subreports.

Problem with subreports

When you have a report which contain a subreport into, you need to use the last with the compiled files (it’s .jasper file). Sometimes, if you use iReport to compile/edit your reports, maybe you compile the subreport with this tool. When you test the report from iReport, it work fine; but when you run the report from ADempiere, you can’t see nothing.

JRI Process Output.png

...and the report is not displayed.

Please take a look into the Preference > Errors window, and you can see something like:

JRI Error Subreports.png

And from the console as:

14:06:24.109 ReportStarter.addProcessParameters:  [13]
14:06:24.109 ReportStarter.httpDownloadedReport:  report deployed to http://work/webApp/Socios.jrxml  [13]
14:06:24.140 ReportStarter.isRequestedonAS: Got work/192.168.0.55 for http://work/webApp/Socios.jrxml as address 
             #0 [13]
14:06:24.140 ReportStarter.isRequestedonAS: Requested report is on application server host [13]
14:06:24.140 ReportStarter.isMD5HomeInterfaceAvailable: EJB client for MD5 remote hashing is present [13]
14:06:24.343 ReportStarter.ejbGetRemoteMD5: MD5 for http://work/webApp/Socios.jrxml is lumYIJ3VWbVpCtoOaF7Ftg== 
             [13]
14:06:24.343 ReportStarter.httpDownloadedReport: MD5 for local file is lumYIJ3VWbVpCtoOaF7Ftg== [13]
14:06:24.343 ReportStarter.httpDownloadedReport:  no need to download: local report is up-to-date [13]
14:06:24.343 ReportStarter.processReport: reportFile.getAbsolutePath() = C:\DOCUME~1\ALEJAN~1\CONFIG~1\Temp\Socios.
             jrxml [13]
14:06:24.343 ReportStarter.processReport:  no need to compile use C:\DOCUME~1\ALEJAN~1\CONFIG~1\Temp\Socios.jasper 
             [13]
===========> ReportStarter.startProcess: ReportStarter.startProcess: Can not run report -
             Error loading object from URL : http://work/webApp/Socios1.jasper [13]

But the compiled subreport file is there!

  • Note: the source files for JasperReports have .jrxml extension, and the compiled files have .jasper extension.

Ok, we will see some steps you can do to resolve the problem.

In the example we have a report, called Socios.jrxml and a subreport called Socios1.jasper (as compiled file; the source file is Socios1.jrxml). When we run the report from iReport, we can see the report is working and displayed ok:

JRI ReportViewer iReport.png

Note: You can see the report in blue colour, and the subreport in red colour.

The sources files (from iReport) are:

JRI Report Source jrxml.png
JRI Subreport Source jrxml.png

In summary, what we'll do is compile the subreport into ADempiere.


Then, we go by steps:

  • Step 1: Create a new process for the subreport

Login into ADempiere with System Administrator role, then go to Report & Process and add a new Record:

JRI Report&Process Subreport.png

fill the fields, but in the JasperReport field you will fill with the subreport source file name (in our example: Socios1.jrxml).'Save and close the window.

  • Step 2: Add to Menu the new process

Go to the Menu window and add a new record:

JRI Menu Add subreport.png

fill as a normal report and Save.

  • Step 3: Run the new report

Logout and login again, then you will see the new process recently created:

JRI Menu New Process Only.png

Ok, now run the Only for compile subreport process...

JRI Process Subreport Run.png

press Ok to start...

JRI Subreport Out.png

...then you can see the subreport output. Here the data is not important, the issue is when you ran the process, the subreport was compiled!

  • Step 4: Copy the new subreport compiled file

Now you must copy the new compiled file to the location as you need. In the example we will copy

From: C:\Documents and Settings\Alejandro\Configuración local\Temp\

JRI Copy Subreport Compiled.png

It's my Temp User folder.

To  : D:\Adempiere\jboss\server\adempiere\deploy\WebApp.ear\webApp.war\

JRI Paste Subreport Compiled.png

Note: the last is our http://adempiereservename.domain/webApp/ location; you must change for your.

  • Step 5: Test your Report

Ok, now we'll test the report...

JRI Menu Socios.png

then we'll run it..

JRI Report Subreport Ok.png

Ok, work fine now. It's all!

Links