Creación de Reportes con JasperRepots y iReports : Parámetros y Variables

En el tutorial anterior vimos como hacer uso de los Fields para indicar la posición dentro de nuestro reporte en la que deben quedar los valores que obtenemos de nuestra aplicación Java.
Ahora hablaré de los otros dos tipos de expresiones que proporciona JasperReports: Parameters y Variables. Y la forma en la que podemos usarlos para hacer más dinámicos nuestros reportes.
Para ello seguiremos usando el ejemplo del segundo tutorial , así que si no lo han leído les recomiendo que lo hagan en esta página.
Abrimos iReport y el reporte del tutorial anterior («reporte2.jrxml»). En este momento nuestro reporte debe verse como en la siguiente imagen:

En donde solo tenemos textos estáticos y «fields» para mostrar un reporte básico de los datos de ciertos participantes. Si lo recuerdan, la salida del reporte al generarlo desde nuestra aplicación Java, era la siguiente:

Ahora pasaremos a agregar «Parameters» a este reporte. Como dije en el tutorial anterior: los parámetros son valores que usualmente se pasan al reporte desde el programa que crea el «JasperPrint» del reporte (nuestra aplicación Java) haciendo uso de un «java.util.Map».
En este caso pasaremos dos parámetros: el título del reporte, y el nombre del autor del mismo.
Al igual que con los Fields, para poder hacer uso de un parámetro primero hay que declararlo en el «Report Inspector» (situado en el panel izquierdo del iReport), por lo que nos dirigimos a esta ventana y hacemos clic derecho sobre el nodo «Parameters». Al hacer esto se abrirá un menú contextual. Seleccionamos la opción «Add Parameter» (la única habilitada).

Con esto se agregará un nuevo parámetro llamado «parameter1» de tipo «java.lang.String». Cambiamos en nombre del parámetro en la ventana de propiedades a «titulo» (recuerden que este nombre es el que deberemos usar desde nuestra aplicación Java para establecer el valor del parámetro).

Agregamos otro parámetro llamado «autor» de la misma forma que agregamos el de «titulo».

Ahora eliminamos el elemento que teníamos como título del reporte (el que contiene el texto estático «Reporte de Participantes») y lo reemplazamos por el parámetro «titulo» arrastrándolo desde la ventana del «Report Inspector» a la banda «Title».

Ajustamos este elemento para que tenga el mismo formato que el título que teníamos anteriormente.
Ahora agregamos el segundo parámetro («autor») en la banda «Page Header», la cual se repite en la parte superior de cada una de las páginas (en la primer página aparece después del título), arrastrándolo a esta banda.

Si dejamos esta expresión tal y como está («$P{autor}») solo se mostrará en nombre del autor en la parte superior de cada una de las páginas (por ejemplo si el autor del reporte es «Juan», solo veremos la palabra «Juan» en la parte superior de los reportes). Esto podría no ser claro para quienes revisen este reporte, por lo que queremos indicar de forma explícita que a lo que se refiere el valor de este parámetro es el nombre del autor. Para hacer esto nos dirigimos a la ventana de propiedades de este parámetro (para lo cual debemos tenerlo seleccionado) y buscamos la categoría «Text field properties». Ahi se encuentra una propiedad llamada «Text Field Expression» cuyo valor es «$P{autor}».

Lo que haremos es editar esta expresión para anteponer la palabra «Autor: «. Para hacer esto presionamos el botón «…», con lo que se abrirá una ventana que nos permitirá editar la expresión. En esta ventana modificamos la expresión «$P{autor}» para que quede «Autor: » + $P{autor}. Con esto lo que logramos es que a la cadena estática «Autor: » se le concatene el valor de la expresión dinámica «$P{autor}». Por lo que ahora el lo que aparecerá en la parte superior de cada página del reporte será la cadena «Autor: Juan».

Ahora presionamos el botón «Compile Report» para que se genere el reporte compilado «reporte2.jasper».
Veamos una vista previa del reporte, para esto hacemos clic en la pestaña «Preview». Nos pedirá los valores de los dos parámetros. Si colocamos para el parámetro «titulo» el valor «Reporte» y para el parámetro «autor» el valor «Alex» el preview que veremos será el siguiente:

Instalación de iReport

  1. Descargar el generador de informes iReport de JasperForge.org
  2. Versión de Windows:
    • Se descarga un archivo similar a: iReport-3.7.0-windows-installer.exe
    • Al ejecutar el archivo de instalación aparece en el menú Inicio > Todos los programas > Jaspersoft > iReport 3.7.0 > iReport 3.7.0
    • Al abrirlo debe aparecer la ventana de presentación de iReport:iReport01

Preparar las Bibliotecas necesarias

Son necesarias las siguientes bibliotecas que se pueden encontrar en la carpeta donde se ha instalado iReport dentro de «ireport/modules/ext«.

  • jasperreports-3.7.0.jar
  • commons-digester-1.7.jar
  • commons-logging-1.1.jar
  • commons-collections-3.2.1.jar
  • commons-beanutils-1.8.0.jar
  • groovy-all-1.5.5.jar
  • iText-2.1.0.jar

Todas esas bibliotecas se deben agregar al proyecto creado en Netbeans utilizando «Agregar archivo JAR/Carpeta…» desde el menú contextual de la carpeta «Bibliotecas».

reports02

Visualización del report desde una ventana modal

Si la llamada a la vista del report (JasperViewer.viewReport) se hace desde una ventana modal, se produce un problema: La ventana del report se queda por detrás de la ventana modal. Para solucionar esto, se puede utilizar el siguiente código que crea un JDialog con el visor del report. Este código debe sustituir a la línea del JasperViewer.viewReport.

1.JDialog viewer = new JDialog(new JFrame(),"Vista previa del reporte", true);
2.viewer.setSize(800,600);
3.viewer.setLocationRelativeTo(null);
4.JRViewer jrv = new JRViewer(reportRelleno);
5.viewer.getContentPane().add(jrv);
6.viewer.setVisible(true);

Cargar el report compilado previamente

Si en lugar de compilar el report desde el código, cada vez que se ejecute, se desea cargar el report previamente compilado se puede utilizar el siguiente código:

1.InputStream in = getClass().getClassLoader().getResourceAsStream("reports/miInforme.jasper");
2.JasperReport report = (JasperReport) JRLoader.loadObject(in);

En el ejemplo anterior, se encuentra el informe en el paquete reports de los paquetes de fuentes del proyecto.

PARA MAYOR INFORMACIÓN VISITEN : http://javiergarbedo.es/index.php/9-bases-de-datos/6-creacion-de-informes-reports