Informes amb Jasper Reports

De Wikijoan
Dreceres ràpides: navegació, cerca

Creació d'informes amb Jasper Reports

Contingut

Documentació

Creating reports using Jasper Reports (Theory):

http://wiki.openbravo.com/wiki/Developers_Manual#Creating_reports_using_Jasper_Reports

Creating reports using Jasper Reports (Practice):

http://wiki.openbravo.com/wiki/Developers_Manual/Creating_reports_using_Jasper_Reports

Amb Openbravo hi ha dues maneres de fer informes: XmlEngine i Jasper Reports. Jasper Reports és una eina externa que està integrada amb Openbravo.

JasperReports uses an intermediate format and permits the ability to export the report to several different formats, html, pdf, excel, csv,... It also has a very advanced development tool (iReport) that makes the design of new reports very easy. The management of the computer resources is better resulting in a faster generation of results for large reports.

Hi ha dues maneres d'afegir un informe de Jasper Reports a l'aplicació:

Les plantilles es fan amb iReport, que és l'eina de desenvolupament de Jasper Reports. La plantilla és un fitxer tipus jrxml.

Hi ha una sèrie de paràmetres predefinits que podem utilitzar:

Crear una plantilla utilitzant iReport:

http://wiki.openbravo.com/wiki/Developers_Manual/Creating_reports_using_Jasper_Reports/Creating_the_Template_using_iReport

iReport és una eina visual de Jasper Reports per fer i dissenyar informes de manera portent, intuitiva i fàcil. Escrita en Java. Aquesta eina permet als usuaris editar informes complexes de forma visual amb gràfics, imatges i subinformes. iReport està integrat amb les llibreries de Java open source líders per fer gràfics.

Les dades que s'han d'imprimir es poden extreure de diferents maneres incloent múltiples connexions JDBC, TableModels, JavaBeans, XML, MDX, EJBQL, Hibernate, etc.

Instal.lar iReport i configurar la connectivitat amb la bd openbravo

NOTE:

Per a Openbravo 2.40 baixem la versió 2.0.3. de SourceForge:

http://sourceforge.net/project/showfiles.php?group_id=64348&package_id=64215. Són 37 MB

Es descomprimeix i s'instal.la . Obrim iReports (sudo ./iReport.sh)

Obrim amb sudo prequè tot i que l'aplicació funciona sense sudo, a l'hora de grabar els fitxers resultants tinc problemes de permisos. Segurament això és l'arrel de problemes de permisos quan ho faig funcionar des d'Openbravo.

Hem de definir el classpath per a la connectivitat amb la bd Postgres

Options > Classpath i clickem sobre Add jar. Anem al directori lib de l'Openbravo (/opt/OpenbravoERP/AppsOpenbravo/lib) i seleccionem ojdbc14.jar. Guardem el classpath

En el meu cas, vaig a http://jdbc.postgresql.org/ > Download > JDBC4 Postgresql Driver, Version 8.3-604 > postgresql-8.3-604.jdbc4.jar

copio aquest fitxer a /opt/OpenbravoERP/AppsOpenbravo/lib:

$ sudo cp postgresql-8.3-604.jdbc4.jar /opt/OpenbravoERP/AppsOpenbravo/lib

Ara, a Options > Classpath puc escollir jdbc3-postgresql.jar

Anem a Data > Connections/Data Source. Fem Nem, Database JDBC Connection. A Name fiquem Openbravo i a JDBC driver fiquem el de Postgres (org.postgresql.Driver). Omplim els valors de ServerAddress (localhost) i Database (openbravo), username (tad) i pwd (tad). La pestanya JDBC url queda: jdbc:postgresql://localhost:5432/openbravo.

Fem un test i és OK.

Crear una plantilla

Ara que ja tenim la connectivitat amb la bd openbravo funcionant, creem la plantilla.

File > Report Wizzard

connexió: openbravo

i afegim la consulta SQL

Si volem fer un informe dels productes fem:

SELECT M_Product_ID, Name, Description
  FROM M_Product
 ORDER BY Name

i si volem fer un informe dels països disponibles fem:

select c_country_id,name,countrycode,regionname from c_country;

Fem el Report, guardem l'informe com a paisos.jrxml a

/opt/OpenbravoERP/AppsOpenbravo/src/org/openbravo/erpCommon/ad_reports

No em deixa fer-ho per un problema de permisos. He d'executar l'aplicació com a sudo.

Per fer un test de l'informe, he de fer Build (Construir) > Ejecutar informe (usando conexión activa)

Ara es pot jugar amb les múltiples opcions que hi ha.

Afegir l'informe a Openbravo

Hi ha dues maneres d'afegir un nou informe a l'aplicació:

Ens loguem a l'Openbravo com a System Administrator i anem a Application Dictionary > Report and Process

Cliquem sobre Nou Registre

Fill the new Report data. e.g.

    * Search Key: RPT_PAISOD
    * Name: Llista de països
    * Mark the Jasper Report checkbox (A textbox will appear with JR Template Name)
    * JR Template Name: @basedesign@/org/openbravo/erpCommon/ad_reports/paisos.jrxml

on @basedesign@ will be replaced in runtime with:

your_tomcat_context/src-loc/design

If you are using the base language, or if you are using a different language, will append the folder language at the end, e.g. In Spanish will be:

your_tomcat_context/src-loc/es_ES

molt de compte perquè jo he grabat l'informe paisos.jrxml a

/opt/OpenbravoERP/AppsOpenbravo/src/org/openbravo/erpCommon/ad_reports

i veig que l'hauria d'haver grabat a

/opt/alfresco/tomcat/webapps/openbravo/src-loc/es_ES/org/openbravo/erpCommon/ad_reports

$ sudo cp /opt/OpenbravoERP/AppsOpenbravo/src/org/openbravo/erpCommon/ad_reports/paisos.jrxml  /opt/alfresco/tomcat/webapps/openbravo/src-loc/es_ES/org/openbravo/erpCommon/ad_reports

o bé

$ sudo cp /opt/OpenbravoERP/AppsOpenbravo/src/org/openbravo/erpCommon/ad_reports/paisos.jrxml  /opt/alfresco/tomcat/webapps/openbravo/src-loc/design/org/openbravo/erpCommon/ad_reports

(queda confirmat que fer aquest cp és molt important). si estic utilitzant la llengua base, ho he de copiar a /src-loc/design/..., i si estic utilitzant una traducció, a /src-loc/es_ES/..

Afegim ara l'informe al menú:

General Setup > Application > Menu > Nou registre

    * Name: Informe llista Països
    * Action: Process
    * Process: Informe dels països (m'apareix a la llista desplegable)

Guardo

Per veure els canvis he de compilar l'aplicació. El procés de compilació copiarà la plantilla .jrxml al context del tomcat, i generarà un nou actionButton. e.g.

$ cd /opt/OpenbravoERP/AppsOpenbravo
$ sudo ant compile.development -Dtab=XX

si tinc problemes fent la compilació perquè no troba la ruta, puc ficar la ruta completa del ant. També puc fer sudo bash o bé fer export JAVA_HOME=el que sigui. Aquí he tingut problemes perquè com que del Tomcat se n'encarrega el Alfresco, la configuració del JAVA_HOME i del ANT_HOME no és tant perfecta com quan tinc el Tomcat+Openbravo.

No n'hi ha prou amb compilar, també s'ha de desplegar el nou war (fer war i deploy, llegir el manual de compilació)

I un cop feta la compilació podem comprovar si funciona:

Ens loguem com a Openbravo amb rol Admin

En el menú de l'esquerra hem de veure el nou item de Informe Llista Països.

Cliquem sobre el procés, -> em diu que no tinc permisos per fer-ho.

Solució: el problema que tenia és que tinc el Openbravo instal.lat sobre el Alfresco-Tomcat, i tinc una mica de problemes amb les variables d'entorn. No n'hi ha prou amb compilar, sinó que s'ha de fer el war i el deploy, i el problema és que el deploy me'l fa en un lloc diferent del que espero, no me'l fa a /tomcat/webapps.

Ho soluciono de forma manual:

war:

build.war:
   [delete] Deleting: /opt/OpenbravoERP/AppsOpenbravo/lib/openbravo.war
      [war] Building war: /opt/OpenbravoERP/AppsOpenbravo/lib/openbravo.war

BUILD SUCCESSFUL
Total time: 2 minutes 1 second
root@joan-laptop:/opt/OpenbravoERP/AppsOpenbravo# /opt/apache-ant-1.7.1/bin/ant deploy
Buildfile: build.xml

init:

deploy:
     [copy] Copying 1 file to /opt/OpenbravoERP/AppsOpenbravo/${env.CATALINA_HOME}/webapps

BUILD SUCCESSFUL


root@joan-laptop:/opt/OpenbravoERP/AppsOpenbravo# export CATALINA_HOME=hola
root@joan-laptop:/opt/OpenbravoERP/AppsOpenbravo# echo $CATALINA_HOME 
hola
root@joan-laptop:/opt/OpenbravoERP/AppsOpenbravo# /opt/apache-ant-1.7.1/bin/ant deploy
Buildfile: build.xml

init:

deploy:
     [copy] Copying 1 file to /opt/OpenbravoERP/AppsOpenbravo/hola/webapps

BUILD SUCCESSFUL
Total time: 1 second

sudo cp openbravo.war /opt/alfresco/tomcat/webapps/


joan@joan-laptop:/opt/alfresco/tomcat/bin$ sudo bash
root@joan-laptop:/opt/alfresco/tomcat/bin# export JAVA_HOME=/usr/lib/jvm/java-6-sun
root@joan-laptop:/opt/alfresco/tomcat/bin# export JRE_HOME=/usr/lib/jvm/java-6-sun/jre/bin
./startup.sh

Però aquest és un problema que he tingut en la meva instal.lació concreta.

És important llegir http://wiki.openbravo.com/wiki/Developers_Manual#Compiling_the_application per entendre bé el procés de compilació, i mirar d'arreglar la meva instal.lació Alfresco+Tomcat+Openbravo.

El tema és que quan ja està solucionat, ja puc fer click sobre l'informe. Fem OK, i haurà d'aparèixer el nou informe. Si no apareix, normalment em donarà un missatge dient quin és l'origen del problema.

Per exemple, un problema que em donava era:

org.xml.sax.SAXParseException: Element Type "noData" must be declared

això segurament era un fallo meu que he modificat la plantilla paisos.jrxml però després no he copiat bé el fitxer, i hi havia una discordància. En aquest cas ho he solucionat manualment: trec aquesta part al final del fitxer paisos.jrxml <noData> <band height="40" isSplitAllowed="true" > </band> </noData>

i ja funciona.

Treballant amb el iReports

Anem ara a millorar el nostre fitxer paisos.jrxml. El problema és que regionname normalment és null, i queda molt malament que surti null en l'informe.

http://rajibinfo.wordpress.com/category/tech/java/ireport/

La solució és:

($F{regionname}==null ? "" : $F{regionname})

Informe paisos.png

[1]

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
IES Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines