capac jasperreports
TRANSCRIPT
-
8/22/2019 Capac JasperReports
1/55
UNIVERSIDAD DE EL SALVADOR
ADACAD
JasperReports
Elaborado por:
Rudy Chicas
Jefe de ADACAD
Ciudad Universitaria, diciembre de 2010
-
8/22/2019 Capac JasperReports
2/55
Indice de contenido
INTRODUCCION..........................................................................................................................i
INSTALACION DE PLUGIN iReport PARA NetBeans................................................................1
ORIGENES DE DATOS..............................................................................................................1
Conexiones JDBC...................................................................................................................3
JavaBeans..............................................................................................................................8
ESTRUCTURA DE REPORTES...............................................................................................15
ELEMENTOS INTERNOS DE UN REPORTE..........................................................................16
Styles....................................................................................................................................17
Parameters...........................................................................................................................17
Fields.....................................................................................................................................19
Variables...............................................................................................................................19
Scriplets................................................................................................................................20
Bandas..................................................................................................................................21
DISEO DE REPORTES..........................................................................................................21
Elementos de reportes..........................................................................................................21
Construyendo el reporte.......................................................................................................23
Manejo de Grupo..................................................................................................................35IMPLEMENTACION DE REPORTES EN APLICACION JSF...................................................45
Configuracin de los servlets................................................................................................45
Clases para el soporte de reportes......................................................................................47
Clase de implementacin de Reporte..................................................................................50
Integrando con la vista..........................................................................................................51
BIBLIOGRAFIA.........................................................................................................................53
-
8/22/2019 Capac JasperReports
3/55
INTRODUCCION
iReport es la interfaz de usuario ms frecuentemente utilizada para el uso de las librerasJasperReports. JasperReports es una herramienta para la creacin de informes en Java, que permitela adicin de contenido enriquecido a los informes.
iReport permite crear los archivos fuentes de los reportes, y compilarlos para crear un archivo deextensin .jasper. Estos archivos son los que se utilizan para la implementacin de los reportes en lasaplicaciones Java.
i
-
8/22/2019 Capac JasperReports
4/55
INSTALACION DE PLUGIN iReport PARA NetBeans
El plugin de iReport para NetBeans puede ser descargado en la siguiente direccin:
http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=4425
Para realizar la instalacin hay que seguir la forma tpica para instalar un plugin en NetBeans.
ORIGENES DE DATOS
Tanto el IDE tradicional de iReport como el plugin de iReport para NetBeans permiten la configuracinde varios orgenes de datos.
Los orgenes de datos que pueden ser usados con reportes JasperReports son:
Conexiones JDBC
JavaBeans
XML
CSV
Hibernate connection
Spring-loaded Hibernate connection
Proveedor de origen de datos JasperReports
Orgenes de datos personalizados
Conexin LDAP Mondrian
Conexin XML/A
EJBQL Connection
Origen de datos vaco
En este documento nos centraremos en el estudio de las conexiones JDBC y los orgenes de datosJavaBeans.
Los orgenes de datos sirven para tener acceso a un conjunto de datos en tiempo de diseo de losreportes, y no significa que al ser configurado para el diseo del reporte, estar disponible en tiempode ejecucin.
Para definir un origen de datos es necesario hacer clic sobre el botn de configuracin. La siguientefigura muestra el botn de configuracin de orgenes de datos en una instalacin en NetBeans.
1
http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=4425http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=4425 -
8/22/2019 Capac JasperReports
5/55
2
-
8/22/2019 Capac JasperReports
6/55
Conexiones JDBC
Los orgenes de datos del tipo JDBC son conexiones directas a la base de datos que estarndisponibles en tiempo de diseo.
Para definir una conexin JDBC se debe acceder al editor de orgenes de datos de iReport, yseleccionar la opcin Database JDBC connection.
Al hacer clic en el botn Nextaparecer la interfaz de configuracin de la conexin.
3
-
8/22/2019 Capac JasperReports
7/55
En este interfaz habr que especificar el nombre de la conexin, el driver JDBC a utilizar, el URL de laconexin, el nombre de usuario de la base con la que nos queremos conectar y el password.
4
-
8/22/2019 Capac JasperReports
8/55
Para probar la conexin, podemos usar el botn Test. Se nos pedir que confirmemos la clave delusuario, y si no hay errores, el sistema nos enviar un mensaje de xito de la conexin.Posteriormente podemos guardar los datos de la conexin.
5
-
8/22/2019 Capac JasperReports
9/55
Para especificar qu datos se usarn en el reporte, es necesario especificar una consulta para elreporte (Report Query). La consulta del reporte puede ser de cualquiera de los tipos de orgenes dedatos soportados.
Para las conexiones JDBC la consulta del reporte es una consulta SQL a la base de datos, como semuestra en la siguiente figura.
6
-
8/22/2019 Capac JasperReports
10/55
Al escribir la consulta, iReport retorna los campos especificados en la sentencia SQL y sus tipos dedatos. Es tambin posible hacer una revisin de los datos en la base de datos haciendo clic en elbotn Refresh Preview Data.
7
-
8/22/2019 Capac JasperReports
11/55
JavaBeans
Los orgenes de datos del tipo JavaBeans set Datasource son orgenes de datos basados en clasesJava que retornarn una coleccin (Collection) o arreglo (Array) de objetos de una clase Java quecontiene los datos que necesitamos mostrar en el reporte.
Aunque no es indispensable, si deseamos contar con un conjunto de datos que nos sirva para realizarpruebas del reporte en tiempo de diseo, deberemos especificar una clase que genere dichos datos.Esta clase no ser parte de nuestra aplicacin, por lo que debemos escribirla en un paquete separadodel resto.
Como ejemplo, se muestra la clase CarrerasDataSourceDesing, que se encuentra en el paquete
reportdesing.
8
-
8/22/2019 Capac JasperReports
12/55
Lista de cdigo 3.2.1: Clase CarrerasDataSourceDesing, origen de datos para el diseo del reporte.
/** To change this template, choose Tools | Templates* and open the template in the editor.*/
package reportdesing;
import control.CarrerasBean;import java.util.ArrayList;import java.util.Collection;
/**** @author rchicas*/public class CarrerasDataSourceDesing { public static Collection getCarreras(){
ArrayList carreras = new ArrayList();
for(int i=0;i
-
8/22/2019 Capac JasperReports
13/55
Para acceder a la clase y su mtodo, iReport requiere de la configuracin de Classpath, en el que sedebe especificar la ruta donde se encuentra las clases a las que se est haciendo referencia. Siutilizamos el plugin de NetBeans, para configurar el Classpath es necesario ir al men Opciones(Options), seleccionariReporty la pestaa Classpath.
10
-
8/22/2019 Capac JasperReports
14/55
Si iReport puede acceder a la clase y su mtodo, al presionar el botn Testmostrar un mensaje dexito.
Para utilizar este tipo de orgenes de datos, se debe especificar la clase de los objetos que nosdevolver el mtodo especificado, en este caso getCarreras. En otras palabras, el mtodogetCarreras devuelve una coleccin de objetos del tipo CarrerasBean, por lo que la clase que seespecifique en la consulta del reporte debe ser del tipo CarrerasBean.
11
-
8/22/2019 Capac JasperReports
15/55
En la interfaz en la que se especifica la consulta del reporte, se debe seleccionar los atributos de laclase que formarn parte de nuestro reporte. Esto se hace seleccionando los atributos de la clase yhaciendo clic en el botn Add selected field. Estos sern los campos que estarn disponibles en elreporte como campos (fields).
12
-
8/22/2019 Capac JasperReports
16/55
Si deseamos ver los datos de prueba hacemos clic en el botn Refresh Preview Data, lo queejecutar el mtodo getCarreras y devolver la coleccin de objetos.
13
-
8/22/2019 Capac JasperReports
17/55
Puede observarse que los datos que devuelve la vista previa son los datos que se generan en elmtodo getCarreras, no los que se encuentran en la base de datos, puesto que no se est usandouna conexin a la base.
La configuracin de la clase que generar la coleccin de datos es opcional, ya que su nico objetivoes poner a nuestra disposicin un conjunto de datos para la vista preliminar del reporte.
14
En caso de optar por no crear dicha clase, las pruebas delreporte debern hacerse cuando ste haya sido integrado a laaplicacin.
-
8/22/2019 Capac JasperReports
18/55
ESTRUCTURA DE REPORTES
Un reporte basado en JasperReports consta de los siguiente elementos:
Title: Titulo del reporte. La informacin contenida en esta banda ser mostrada una sola vezen la primera pgina del reporte.
Page Header: Encabezado de pgina. La informacin contenido en esta banda ser mostradaen cada pgina del reporte.
Column Header: Encabezado de columna. El uso ms frecuente de esta banda es paradesplegar los encabezados de las tablas de datos en los reportes tipo cuadrculas.
Detail: Detalle del reporte. En esta banda incluyen los campos que constituyen el detalle delreporte. En un reporte tipo cuadrcula se colocan los campos de la tabla.
Column Footer: Pie de columna. Se utiliza generalmente para totalizar el detalle de cadacampo (columna). Tanto el encabezado de columna, como el pi de columna solo sernmostrados cuando inicia el set de datos y cuando termina.
Si se requiere que el encabezado de las columnas aparezca en todas las pginas, se deberncolocar los encabezados en el elemento Page Header.
Page Footer: Ser mostrado en todas las pginas del reporte.
Sumary: Resumen. Se muestra nicamente en la ltima pgina del reporte. Generalmente esusado para consolidar datos mostrados en las otras partes del reporte.
15
-
8/22/2019 Capac JasperReports
19/55
ELEMENTOS INTERNOS DE UN REPORTE
La estructura de objetos para un reporte Jarper puede verse en la barra de objetos del reportemostrado en la siguiente figura.
16
-
8/22/2019 Capac JasperReports
20/55
Utilizaremos la estructura de objetos del rbol de objetos, para explicar las caractersticas bsicas decada elemento.
Styles
El nodo Styles permite agregar estilos personalizados o referencias a estilos por defecto al reporte.Un estilo es una coleccin de propiedades predefinidas que se refieren al aspecto de los elementos(como color de fondo, bordes, y fuentes).
Es posible definir un estilo por defecto para el reporte, para que todas las propiedades no definidas deun elemento se refieran e ese estilo.
Parameters
Los parmetros definidos por defecto son utilizados para recibir informacin de la clase que invoca yejecuta el reporte. Pueden ser utilizados para guiar un comportamiento especfico durante el tiempode ejecucin y para proveer datos adicionales para el contexto de impresin como imgenes, ttulos,etc.
17
-
8/22/2019 Capac JasperReports
21/55
La referencia a los parmetros se realizar a travs de la expresin:
$P{nombre_parametro}
El parmetro especial REPORT_PARAMETERS_MAP es de tipo Map compuesto por el par devalores . La expresin empleada para invocar un valor de ese parmetro
tendr la forma:
$P{REPORT_PARAMETERS_MAP}.get(Nombre_Parametro)
18
-
8/22/2019 Capac JasperReports
22/55
Fields
Los campos se refieren a los campos del conjunto de datos que devuelve un origen de datos. Estosson identificados por un nombre, un tipo y una descripcin opcional.
La forma de hacer referencia a un campo es a travs de la expresin:
$F{nombre_campo}
Variables
Las variables son objetos que se usan para almacenar resultados de clculos como subtotales,sumas, entre otros. Las variables deben tener un tipo de dato asignado, tal como los parmetros y loscampos.
Las variables cuentan con algunos atributos que las diferencian de los parmetros y los campos:
19
-
8/22/2019 Capac JasperReports
23/55
Calculation: Es el mtodo de clculo que se aplicar a la variable. Los tipos de clculos que sepueden seleccionar son:
Nothing. No se realiza ningn clculo.
Count. Cuenta el nmero de veces que la expresin resulta en valores diferentes a nulo.
Distict count. Cuenta el nmero expresiones resultantes diferentes entre s. El orden entrelas expresiones no es tomado en cuenta.
Sum. Para cada iretacin, suma al valora actual el valor de la expresin actual.
Average. Calcula el promedio aritmtico de todas las expresiones recibidas.
Lowest. Retorna la expresin de menor valor de las recibidas.
Highest. Retorna la expresin de mayor valor de las recibidas.
Standard derivation. Calcula la desviacin estndar de las expresiones recibidas.
Variance. Calcula la varianza de las expresiones recibidas.
System. Esta opcin no realiza ningn clculo, ni se evala ninguna expresin. Elreporteador mantiene en memoria el ltimo valor asignado a la variable.
First. Devuelve la primera expresin evaluada.
Las variables tambin cuentan con un tipo de reinicio (reset type), que especifica el momentoen que una variable ser reiniciada. Los tipos de reinicio son:
None. El valor inicial de la variable es ignorado siempre.
Report. La variable ser inicializada solo cuando se inicia la creacin del reporte.
Page. La variable es inicializada cada vez que se despliega una pgina.
Column. La variable es inicializada cada vez que se despliega una columna.
Group. La variable es inicializada cada vez que se despliega un grupo nuevo.
Scriplets
Para implementar un scriptlet es necesario extender la clasent.sf.jasperreports.engine.JRAbstractScriptlet. Esta clase expone un conjunto de mtodos paramanejar los eventos que ocurren durante la generacin de un reporte, y provee la estructura de datospara acceder a todas las variables, campos y parmetros del reporte.
En otras palabras, un scriptlet permite manipular un reporte desde una clase Java, de tal manera quees posible modificar el comportamiento especificado durante su diseo.
20
-
8/22/2019 Capac JasperReports
24/55
Bandas
Como se explic en el apartado Estructura de reportes la estructura de un reportes est compuestapor 8 bandas principales y el backgroud (9 bandas en total). Pueden agregarse dos bandas ms:group header y group footer.
DISEO DE REPORTES
El diseo de los reportes se realiza a travs de la paleta de elementos de reportes. Los elementosson insertados en la banda en la que deseamos que aparezca, arrastrando el elemento de la paleta ala banda correspondiente.
Elementos de reportes
Line
Rectangle
Elipse
Static Text
Text Field
Image
Subreport
Cosstab
Chart
Frame
Los elementos del reporte estn disponibles en la paleta de controles de iReport en NetBeans (barrade herramientas en la interfaz clsica de iReport).
21
-
8/22/2019 Capac JasperReports
25/55
Para agregar un elemento al reporte, se debe seleccionar uno de los controles y arrastrarlo a labanda en la que desea que aparezca.
22
-
8/22/2019 Capac JasperReports
26/55
Una vez que el elemento se encuentra en la banda, puede ser editado a travs de la ventanapropiedades.
Construyendo el reporte
Para explicar el proceso de construccin de reportes se realizar como ejemplo, un reporte que
muestre las carreras almacenadas en la tabla carreras de la base de datos.
Dado que en las aplicaciones instituciones se usar JavaBean datasource como orgenes de datos,desarrollaremos este ejemplo usando ese tipo de origen de datos.
Lo primero ser configurar el origen de datos como se explic en el apartado Orgenes dedatos/JavaBeans. Cuando ya tenemos la consulta del reporte configurada, podemos proceder aldiseo del reporte.
La clase CarrerasBean que ser el JavaBean a utilizar como origen de datos se muestra en la lista decdigo 6.2.1.
Lo primero que haremos es insertar un texto esttico con el ttulo del reporte. Para ello hay quearrastrar a la banda Title un elemento Static Textde la paleta de controles. Los elementos de textoesttico pueden ser editados al hacer doble clic sobre l.
23
-
8/22/2019 Capac JasperReports
27/55
Lista de cdigo 6.2.1: Bean administrado CarrerasBean
package control;
import dao.impl.CarreraDaoImpl;import javax.faces.context.FacesContext;import javax.servlet.ServletContext;import org.springframework.web.context.support.WebApplicationContextUtils;
/*** @author rchicas*/public class CarrerasBean {
private int idCarrera;private String codigo;private String nombre;private String planEstudios;private int totalUV;private int maxInscribir;/**
* Accin para almacenamiento*/public void guardarAction() {
ServletContext servletContext = (ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext();
CarreraDaoImpl carreraDao = (CarreraDaoImpl)WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext).getBean("carreraDao");
Integer id = carreraDao.guardar(this);}
public void actualizarAction() {ServletContext servletContext = (ServletContext)
FacesContext.getCurrentInstance().getExternalContext().getContext();
CarreraDaoImpl carreraDao = (CarreraDaoImpl)WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext).getBean("carreraDao");
carreraDao.actualizar(this);}
public void borrarAction() {ServletContext servletContext = (ServletContext)
FacesContext.getCurrentInstance().getExternalContext().getContext();CarreraDaoImpl carreraDao = (CarreraDaoImpl)
WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext).getBean("carreraDao");
carreraDao.borrar(idCarrera);
}
.../*Mtodos get y set */...}
24
-
8/22/2019 Capac JasperReports
28/55
Una vez que se ha habilitado la posibilidad de edicin del texto por defecto, escribimos
Universidad de El SalvadorSistema de Administracin Acadmica
Otra posibilidad para editar el texto de un elemento de texto esttico es ir a las propiedades delelemento y hacer clic en el botn de modificacin de la propiedad Text.
Ahora podemos aplicar formato al texto. En este caso, haremos que el texto sea mostrado ennegritas. Para ello, en la ventana de propiedades del elemento, buscar la opcin Boldy hacer clic enel checkbox que corresponde.
25
-
8/22/2019 Capac JasperReports
29/55
Ahora agregaremos el ttulo del reporte, que obtendremos de un parmetro enviado al reporte desdela aplicacin que lo invocar.
Para ello, incorporamos a la banda Title un elemento del tipo Text Field, que inicialmente aparecer
vaco.
Una vez que se ha agregado a la banda, hacemos clic derecho en l y seleccionamos la opcin Editexpression.
26
-
8/22/2019 Capac JasperReports
30/55
En la ventana de edicin de expresiones, escribimos la expresin:
$P{REPORT_PARAMETERS_MAP}.get(ReportTitle)
Esta expresin evala el mapa de parmetros REPORT_PARAMETERS_MAP y obtiene el parmetroReportTitle.
Ahora pasaremos a incorporar los campos de los datos que deseamos mostrar. Para ello, podemosseleccionar los campos que se han definido como parte de la consulta del reporte.
En el rbol de objetos del reporte, expandimos el nodo Fields. Esto nos mostrar los camposdisponibles que fueron configurados en la consulta del reporte. Una forma de crear el cuadro de datosque deseamos mostrar es seleccionar los campos y arrastrarlos a la banda Detail. iReport colocaretiquetas en la banda Column Headery los elementos Text Fielden la banda Detail.
27
-
8/22/2019 Capac JasperReports
31/55
Modificamos los Static Textde Column Header, escribindo el texto en maysculas, modificando lapropiedad Bold para que el texto sea mostrado en negritas y la propiedad Horizontal Alignment aCenterpara que el texto sea centrado.
Dado que se trata de una tabla de datos, agregaremos los bordes a la tabla. Para ello, en elencabezado del reporte, agregamos un elemento Rectangle para que sea el marco de losencabezados de columna.
28
-
8/22/2019 Capac JasperReports
32/55
Para que el elemento sea mostrado, hacer clic derecho en el rectngulo y seleccionamos la opcinSend to Back, para que el elemento quede detrs de los cuadros de texto esttico.
Posterior a eso, es necesario agregar las lneas de los campos. Para ello usaremos objetos Line,haciendo una especie de rectngulo abierto por arriba. En otras palabras, habr que agregar unalnea horizontal inferior, y las lneas verticales de separacin entre los campos. La lnea horizontalsuperior no es necesaria.
Una vez hecho esto, incorporaremos al reporte los campos que muestren el nmero de pgina y eltotal de pginas. iReport ya cuenta con una herramienta que ingresa los elementos de texto para loscampos y sus respectivos valores.
Para hacer esto, es necesario arrastrar de la paleta de controles, la herramienta Page X of Ya labanda de Encabezado de pgina.
29
-
8/22/2019 Capac JasperReports
33/55
La herramienta agrega a la banda dos elementos uno con el valor:
"Pg. "+$V{PAGE_NUMBER}+" de"
Y el otro con el valor:" " + $V{PAGE_NUMBER}
En ambos casos, el tipo de dato del elemento es de tipo String, por lo que es permitido realizar laconcatenacin de los valores. El tipo de dato de las variables, campos, parmetros y de los TextFields son definidos en la propiedad Expression class.
Se puede observar que el funcionamiento del control de pginas est basado en una variable denombre PAGE_NUMBER, que es una variable predefinida en todos los reportes creados con iReport.
30
-
8/22/2019 Capac JasperReports
34/55
31
-
8/22/2019 Capac JasperReports
35/55
Por ser una variable intrnseca sus propiedades no estn disponibles en tiempo de diseo. Sinembargo es importante tener claro que se trata de una variable de tipo entera y cuya operacin esCOUNTy cuyo tipo de reinicio es Report.
Estas caractersticas harn que la variable cuente el nmero de veces que es evaluada (invocada) enel reporte, acumulando 1 por cada vez que es evaluada. Esto permite que al utilizar la variable en elreporte, en el primer cuadro de texto (que muestra la pgina actual) se utiliza el tipo de evaluacin
Now, es decir que el valor de la variable se mostrar en ese cuadro de texto cada vez que seanecesario desplegar ese elemento.
En el siguiente cuadro de texto, que muestra el total de pginas, la variable se evala en el contextodel reporte. En otras palabras, cuando ese cuadro de texto sea evaluado, el cuadro de texto mostrarel valor con el que termin esa variable al finalizar la construccin del reporte. Eso significa, el total depginas.
Finalmente, ingresamos al reporte un logotipo de la institucin. Para ello arrastramos un control
Image de la paleta de controles.
Esto nos mostrar un elemento de imagen dentro de la banda a la que la hayamos arrastrado. Paraeste caso, la arrastraremos a la banda Title
32
-
8/22/2019 Capac JasperReports
36/55
Ajustamos la imagen para que se muestre con el tamao y ubicacin que sea necesaria.
33
-
8/22/2019 Capac JasperReports
37/55
Para verificar el diseo del reporte, podemos usar la opcin Preview. Para ello hacemos clic en lapestaa Preview, compilar el reporte y generar una vista preliminar del mismo.
Podemos observar que el ttulo del reporte se muestra con un valor null. Esto es as porque el valor
que se desplegar es un parmetro que no ha sido recibido. Para que el reporte no muestre lapalabra null cuando se encuentran valores nulos, es necesario modificar la propiedad del elemento aBlank when null.
34
-
8/22/2019 Capac JasperReports
38/55
Manejo de grupos
Los grupos es la forma en la que JasperReports permite organizar los datos en bloques de datos deacuerdo a los criterios de agrupamiento. Un grupo es definido a travs de una expresin. Cuandoesta expresin cambia su valor, un nuevo grupo es iniciado.
Para ejemplificar esto, usaremos el ejemplo anterior, agregando el atributo facultad a la clase
CarrerasBean y por ende, agregando al mtodo que genera los datos de muestra para tiempo dediseo, el cdigo necesario para que incluya valores para ese atributo.
La clase CarrerasBean modificada se muestra en la lista de cdigo 6.3.1
Lista de cdigo 6.3.1: Bean administrado CarrerasBean modificado
package control;
import dao.impl.CarreraDaoImpl;import javax.faces.context.FacesContext;import javax.servlet.ServletContext;import org.springframework.web.context.support.WebApplicationContextUtils;
/** To change this template, choose Tools | Templates* and open the template in the editor.*//**** @author rchicas*/public class CarrerasBean {
private int idCarrera;private String codigo;private String nombre;private String planEstudios;private int totalUV;private int maxInscribir;private String facultad;
.../*** @return the facultad*/public String getFacultad() {return facultad;}/*** @param facultad the facultad to set*/public void setFacultad(String facultad) {this.facultad = facultad;}
}
35
-
8/22/2019 Capac JasperReports
39/55
El mtodo getCarreras de la clase CarrerasDataSourceDesing se muestra en la lista de cdigo 6.3.2.
Lista de cdigo 6.3.2: Clase CarrerasDataSourceDesing modificada.
package reportdesing;
import control.CarrerasBean;import java.util.ArrayList;
import java.util.Collection;
/**** @author rchicas*/public class CarrerasDataSourceDesing {
public static Collection getCarreras(){ArrayList carreras = new ArrayList();
for(int i=0;i 0 || i==0)carrera.setFacultad("Facultad"+i);elsecarrera.setFacultad("Facultad"+(i-1));carreras.add(carrera);}
return carreras;}
}
El mtodo genera una carrera para la facultad 0 y dos carreras para el resto de las facultades, parapermitirnos apreciar el manejo de los grupos.
Posterior a ello, habr que agregar el atributo faculta a la consulta del reporte. Una vez hecho esto, esnecesario agregar el grupo al reporte, para ello hay que hacer clic derecho en el nodo principal delrbol de objetos del reporte o sobre una de las bandas. Esto nos mostrar un men contextual en elque deberemos seleccionar la opcinAdd Report Group.
36
-
8/22/2019 Capac JasperReports
40/55
Esto nos mostrar un asistente con el que podremos configurar el grupo. Indicamos que nombre delgrupo y la expresin que lo definir. En nuestro caso, la expresin es el campo facultad.
37
-
8/22/2019 Capac JasperReports
41/55
Cuando finalizamos la configuracin del grupo, iReport nos muestra las bandas que hemos incluidoen el reporte. En este caso las bandas Group Header y Group Footer.
38
-
8/22/2019 Capac JasperReports
42/55
Agregamos un texto de campo a la banda facultad Group Headerpara que cada vez que cada vezque inicie un nuevo grupo, muestre el nombre del nuevo grupo. En este caso, los grupos estnbasados en el nombre de la facultad, por lo que el campo a mostrar es el de facultad.
39
-
8/22/2019 Capac JasperReports
43/55
40
-
8/22/2019 Capac JasperReports
44/55
Copiamos los elementos de lnea para la rejilla de datos y la pegamos en la banda que estamoseditando.
41
-
8/22/2019 Capac JasperReports
45/55
42
-
8/22/2019 Capac JasperReports
46/55
iReport crea una variable contador por cada grupo. Esto permite contar el nmero de registros porcada grupo.
Usaremos esa variable para que en el footer del grupo nos muestre el valor con un texto.
Para ello, agregamos un Text Field a la banda facultad Group Footer, y editamos la expresin.
Ahora copiamos los elementos de lnea de la banda facultad Group Headery la pegamos en la bandaque estamos editando.
Para ajustar el tamao de las bandas, hay que mover el borde inferior de la banda hacia arriba oabajo segn se desee. Para ajustar la banda a su lmite inferior, basta con dar doble clic al bordeinferior y se ajustar a la posicin del elemento ms inferior de la banda.
43
-
8/22/2019 Capac JasperReports
47/55
44
-
8/22/2019 Capac JasperReports
48/55
Las modificaciones realizadas para los grupos han sido hechas nicamente para que estndisponibles en tiempo de diseo, ya que en la base de datos no existe ese campo. Por esta razn, ala hora de realizar la implementacin, no se incluirn las modificaciones relacionadas a esta seccin.
IMPLEMENTACION DE REPORTES EN APLICACION JSF
Configuracin de los servlets
En las aplicaciones JSP, los reportes son resueltos como parte del servlet principal de la aplicacin.JSF nos permite configurar varios servlets en una aplicacin. Las libreras de JasperReports nospermiten configurar estos servlets independientes entre s, de acuerdo a los formatos de documentoque deseemos que soporte nuestra aplicacin.
Lista de cdigo 7.1.1: Servlets correspondientes a los formatos soportados
PdfServletnet.sf.jasperreports.j2ee.servlets.PdfServlet
JExcelApiServletnet.sf.jasperreports.j2ee.servlets.JExcelApiServlet
RtfServletnet.sf.jasperreports.j2ee.servlets.RtfServlet
PdfServlet/servlets/report/PDF
JExcelApiServlet/servlets/report/EXCEL
RtfServlet/servlets/report/RTF
Tambin crearemos dos clases que darn soporte a los reportes. La primera de ellas ReportUtilservir para implementar los mtodos de llenado y exportado de los archivos de JasperReportscompilados (.jasper).
45
-
8/22/2019 Capac JasperReports
49/55
Clases para el soporte de reportes
Lista de cdigo 7.2.1: Clase de soporte a los reportes
package util;
import java.io.File;import java.io.PrintWriter;import java.util.Map;
import javax.servlet.ServletContext;
import net.sf.jasperreports.engine.JRAbstractExporter;import net.sf.jasperreports.engine.JRDataSource;import net.sf.jasperreports.engine.JRException;import net.sf.jasperreports.engine.JRExporterParameter;import net.sf.jasperreports.engine.JasperFillManager;import net.sf.jasperreports.engine.JasperPrint;import net.sf.jasperreports.engine.export.JRHtmlExporter;import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
public class ReportUtil {
public static JasperPrint fillReport(File reportFile, Mapparameters, JRDataSource jrDataSource) throws JRException {
parameters.put("BaseDir", reportFile.getParentFile());
JasperPrint jasperPrint = JasperFillManager.fillReport(reportFile.getPath(),parameters, jrDataSource);
return jasperPrint;}
public static String getJasperFilePath(ServletContext context, String reportDir,String jasperFile) {
return context.getRealPath(reportDir + jasperFile);}
private static void exportReport(JRAbstractExporter exporter, JasperPrintjasperPrint, PrintWriter out) throws JRException {
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
exporter.exportReport();}
public static void exportReportAsHtml(JasperPrint jasperPrint, PrintWriter out)throws JRException {
JRHtmlExporter exporter = new JRHtmlExporter();exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,
Boolean.FALSE);exporter.setParameter(JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,
Boolean.TRUE);exporter.setParameter(JRHtmlExporterParameter.CHARACTER_ENCODING, "ISO-8859-9");
exportReport(exporter, jasperPrint, out);}
}
46
-
8/22/2019 Capac JasperReports
50/55
La claseAbstractBaseReportBean es una clase abstracta que implementa los mtodos bsicos parael manejo de los reportes. La clase que implementen esta clase, tendrn a su disposicin los mtodoselementales para el manejo de los reportes, lgicamente debiendo implementar aquellos que noestn implementados.
Lista de cdigo 7.2.2: Clase abstracta que implementa las funciones bsica del manejo de reportes.
package util;
import java.io.File;import java.io.IOException;import java.util.HashMap;import java.util.Map;
import javax.faces.context.ExternalContext;import javax.faces.context.FacesContext;import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRDataSource;import net.sf.jasperreports.engine.JRException;import net.sf.jasperreports.engine.JasperPrint;import net.sf.jasperreports.j2ee.servlets.BaseHttpServlet;
public abstract class AbstractBaseReportBean {
public enum ExportOption {
PDF, HTML, EXCEL, RTF}private ExportOption exportOption;private String reportDir = "/";
public AbstractBaseReportBean() {super();setExportOption(ExportOption.PDF);
}
protected void prepareReport() throws JRException, IOException {ExternalContext externalContext =
FacesContext.getCurrentInstance().getExternalContext();
ServletContext context = (ServletContext) externalContext.getContext();HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();HttpServletResponse response = (HttpServletResponse)
externalContext.getResponse();
File reportFile = new File(ReportUtil.getJasperFilePath(context,getReportDir(), getNombArch() + ".jasper"));
JasperPrint jasperPrint = ReportUtil.fillReport(reportFile,getReportParameters(), getJRDataSource());
47
-
8/22/2019 Capac JasperReports
51/55
if (getExportOption().equals(ExportOption.HTML)) {ReportUtil.exportReportAsHtml(jasperPrint, response.getWriter());
} else {request.getSession().setAttribute(BaseHttpServlet.DEFAULT_JASPER_PRINT_SESS
ION_ATTRIBUTE, jasperPrint);response.sendRedirect(request.getContextPath() + "/servlets/report/" +
getExportOption());}
FacesContext.getCurrentInstance().responseComplete();}
public ExportOption getExportOption() {return exportOption;
}
public void setExportOption(ExportOption exportOption) {this.exportOption = exportOption;
}
protected Map getReportParameters() {return new HashMap();
}
/*** @return the reportDir*/public String getReportDir() {
return reportDir;}
/*** @param reportDir the reportDir to set*/public void setReportDir(String reportDir) {
this.reportDir = reportDir;
}
protected abstract JRDataSource getJRDataSource(); protected abstract String getNombArch();}
Un ejemplo de la implementacin de la clase abstracta, es la lista de cdigo 7.3.1.
48
-
8/22/2019 Capac JasperReports
52/55
Clase de implementacin de Reporte
Lista de cdigo 7.3.1: Clase de implementacin del reporte para carreras.
package control;
import util.AbstractBaseReportBean;import java.util.HashMap;import java.util.Map;import javax.el.ValueExpression;import javax.faces.context.FacesContext;
import net.sf.jasperreports.engine.JRDataSource;import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class ReporteCarrerasBean extends AbstractBaseReportBean {
private final String NOMBRE_ARCHIVO = "carreras";
@Overrideprotected String getNombArch() {return this.NOMBRE_ARCHIVO;
}
@Overrideprotected Map getReportParameters() {Map reportParameters = new HashMap();
reportParameters.put("ReportTitle", "Listado de carreras registradas en elsistema");
return reportParameters;}
@Overrideprotected JRDataSource getJRDataSource() {ValueExpression ve =
FacesContext.getCurrentInstance().getApplication().getExpressionFactory().createValueExpression(FacesContext.getCurrentInstance().getELContext(), "#{buscarCarreraBean}",BuscarCarreraBean.class);
BuscarCarreraBean buscarCarreraBean = (BuscarCarreraBean)ve.getValue(FacesContext.getCurrentInstance().getELContext());
JRBeanCollectionDataSource dataSource = null;
if(buscarCarreraBean !=null){if(buscarCarreraBean.getListaCarreras() == null)
buscarCarreraBean.buscarTodosAction();
dataSource = newJRBeanCollectionDataSource(buscarCarreraBean.getListaCarreras());
}
return dataSource;}
49
-
8/22/2019 Capac JasperReports
53/55
public String execute() {try {
super.prepareReport();} catch (Exception e) {
e.printStackTrace();
}
return null;}
}
Integrando con la vista
La interfaz que se encargar de invocar al mtodo execute de la clase que implementa el reporteespecfico (ReporteCarrerasBean), desplegar las opciones de los formatos disponibles para elreporte, y la llamada al mtodo a travs de una accin vinculada a un botn, como se muestra en lalista de cdigo 7.4.1.
Lista de cdigo 7.4.1: Cdigo JSF que pone el reporte a disposicin del usuario
50
-
8/22/2019 Capac JasperReports
54/55
51
-
8/22/2019 Capac JasperReports
55/55
BIBLIOGRAFIA
The Definitve Guide to iReport
Guilio Toffoli
Apress
JasperReports and JSF Integration
http://www.jroller.com/hakan/entry/jasperreports_and_jsf_integration
iReport Tutorials & Help
http://jasperforge.org/website/ireportwebsite/IR%20Website/ir_documentation.html?header=project&target=ireport
http://www.jroller.com/hakan/entry/jasperreports_and_jsf_integrationhttp://jasperforge.org/website/ireportwebsite/IR%20Website/ir_documentation.html?header=project&target=ireporthttp://jasperforge.org/website/ireportwebsite/IR%20Website/ir_documentation.html?header=project&target=ireporthttp://www.jroller.com/hakan/entry/jasperreports_and_jsf_integrationhttp://jasperforge.org/website/ireportwebsite/IR%20Website/ir_documentation.html?header=project&target=ireporthttp://jasperforge.org/website/ireportwebsite/IR%20Website/ir_documentation.html?header=project&target=ireport