Capac JasperReports

download Capac JasperReports

of 55

Transcript of Capac JasperReports

  • 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