guía de práctica 7

Embed Size (px)

Citation preview

  • 8/6/2019 gua de prctica 7

    1/19

    Anlisis y Diseo de Sistemas Orientado a ObjetosGua de Prctica N7

    Catedrtico: Ing. Samuel Alfonso MarguisInstructora: Stephanie Caroline Guadrn

    Creacin de Reporte utilizando JasperReports e iReport

    Puntos a tratar:

    En qu consisten JasperReports e iReport

    Cmo crear un reporte usando iReport

    Iniciando con un nuevo reporte

    Secciones que conforman un reporte

    Diseo del reporte

    Conexin a una base de datos

    Crear una consulta

    Agregar TextField

    Compilacin y Ejecucin del reporte

    Envo de parmetros

    Cmo generar el reporte desde nuestra aplicacin Java

    JSP

    reporteAgencia.jsp

    Clases

    clsReporte.java

    Reutilizando: clsDBManager.java

    Tarea

  • 8/6/2019 gua de prctica 7

    2/19

    Anlisis y Diseo de Sistemas Orientado a ObjetosGua de Prctica N7

    Catedrtico: Ing. Samuel Alfonso MarguisInstructora: Stephanie Caroline Guadrn

    En qu consisten JasperReports e iReport

    JasperReports

    JasperReports es una herramienta de cdigo libre en Java para generar reportes. Puede entregarricas presentaciones o diseos en la pantalla, para la impresora o para archivos en formato PDF,HTML, RTF, XLS, CSV y XML.

    Est completamente escrita en Java y se puede utilizar en una gran variedad de aplicaciones deJava, incluyendo aplicaciones Web, para generar contenido dinmico.

    JasperReports trabaja en forma similar a un compilador y a un intrprete. El usuario disea el

    reporte codificndolo en XML de acuerdo a las etiquetas y atributos definidos en un archivollamado jasperreports.dtd (parte de JasperReports). Usando XML el usuario define completamenteel reporte, describiendo donde colocar texto, imgenes, lneas, rectngulos, cmo adquirir losdatos, como realizar ciertos clculos para mostrar totales, etc. Este archivo fuente XML debe sercompilado para obtener un reporte real. La versin compilada del fuente es nombrada "archivo jasper" (este termina con .jasper).

    Un Archivo jasper es el compilado de un cdigo fuente. Cuando tenemos un archivo jasper,necesitamos otra cosa para producir un reporte: necesitamos datos. Esto no siempre es cierto. Enalgunos casos querramos generar un reporte que no mostrara datos dinmicos, solo textoesttico por ejemplo, pero esto puede simplificarse a un reporte que tiene solamente un registrovaco. Para proporcionar estos registros al jasper engine necesitamos presentarlos usando unainterfaz especial especfica llamada JRDataSource. Una fuente de datos + un Archivo jasper = unarchivo print. Un archivo print puede exportarse en muchos formatos como PDF, HTML, RTF,XML, XLS, CVS, etc. La exportacin se puede realizar utilizando clases especiales para implementarexportadores especficos.

    iReport

    iReport es un diseador visual de cdigo libre para JasperReports escrito en Java. Es un programaque ayuda a los usuarios y desarrolladores que usan la librera JasperReports para disear reportesvisualmente. A travs de una interfaz rica y simple de usar, iReport provee las funciones msimportantes para crear reportes en poco tiempo.

    iReport provee a los usuarios de JasperReports una interfaz visual para construir reportes, generararchivos jasper y print de prueba.

  • 8/6/2019 gua de prctica 7

    3/19

    Anlisis y Diseo de Sistemas Orientado a ObjetosGua de Prctica N7

    Catedrtico: Ing. Samuel Alfonso MarguisInstructora: Stephanie Caroline Guadrn

    Cmo crear un reporte usando iReport

    Antes de iniciar con la creacin de su reporte, haga una nueva carpeta llamada Reportes dentro dela estructura de su proyecto (dentro de la carpeta Web).

    Iniciando con un nuevo reporte

    Seleccione New Document del men File o bien oprima el botn New Document de la barra deherramientas. Aparecer una pantalla de propiedades del nuevo reporte que queremos crear:

    En esta pantalla podemos configurar las propiedades del reporte y darle un nombre. Cuandohayamos terminado de configurarlo, oprimir el botn OK para crearlo.

    Seleccionar la opcin Save As del men File. Seleccionar el nombre y el directorio en que seguardar el reporte. El reporte se guardar con la extensin .jrxml. Por defecto los archivos desalida de la compilacin se crearn en el directorio de instalacin de iReport si no especific uno.

  • 8/6/2019 gua de prctica 7

    4/19

    Anlisis y Diseo de Sistemas Orientado a ObjetosGua de Prctica N7

    Catedrtico: Ing. Samuel Alfonso MarguisInstructora: Stephanie Caroline Guadrn

    Secciones que conforman un reporte

    title. El ttulo de nuestro reporte debe escribirse en esta seccin. Solo se mostrar en laprimera pgina del reporte.

    pageHeader. Aparece en la parte superior de cada pgina. Puede contener informacinadicional del reporte, descripciones, etc.

    columnHeader. En esta seccin se muestran los nombres de los campos que se van apresentar.

    detail. En esta seccin se despliegan los valores correspondientes a los nombres de loscampos definidos en la seccin anterior. Estos datos pueden obtenerse medianteconsultas SQL a una base de datos por ejemplo.

    columnFooter. Puede presentar informacin de totales para algunos de los campos de laseccin detail. Por ejemplo Total de Empleados: 220

    pageFooter. Aparece en la parte inferior de cada pgina. Este parte puede presentar, lafecha, nmero de pgina del reporte.

    summary. Esta seccin puede presentar totales de campos de la seccin detail. Si se deseaincluir algn grfico en el reporte, debe hacerse en esta seccin.

  • 8/6/2019 gua de prctica 7

    5/19

    Anlisis y Diseo de Sistemas Orientado a ObjetosGua de Prctica N7

    Catedrtico: Ing. Samuel Alfonso MarguisInstructora: Stephanie Caroline Guadrn

    En el diseo de su reporte pueden omitirse algunas de las secciones o bandas mencionadas. Paraomitir las secciones del reporte que no se usaran, debe oprimir el botn Bands de la barra deherramientas, o bien haciendo clic con el botn secundario del ratn sobre el diseo del reporte y

    seleccionando la opcin Band Properties del men contextual. En la pantalla de propiedades de lasbandas, debe seleccionar las bandas no deseadas y colocar su propiedad band height igual a cerocomo se muestra en la siguiente figura.

    Diseo del reporte

    Mediante la barra de herramientas pueden agregarse elementos al reporte:

    Por ejemplo, para agregar un ttulo al reporte, seleccionar de la barra de herramientas el objetoStatic text tool y dibujar una caja sobre la banda title. Haciendo doble clic sobre la caja dibujada sepodr modificar su contenido. Luego, puede configurar el tamao, ubicacin de la caja de texto,tipo de letra para el texto, entre otros.

  • 8/6/2019 gua de prctica 7

    6/19

    Anlisis y Diseo de Sistemas Orientado a ObjetosGua de Prctica N7

    Catedrtico: Ing. Samuel Alfonso MarguisInstructora: Stephanie Caroline Guadrn

    Ahora puede proseguirse insertando de la misma manera los nombres de los campos quequeremos que se muestren, ya sea dentro de columnHeader, si queremos que se imprima unalista, o dentro de otra parte del cuerpo del reporte.

    Para que los campos del reporte sean llenados por los datos contenidos en alguna tabla de unabase de datos, se debe:

    1. Crear una conexin a la base de datos.

    2. Realizar una consulta.

    3. Agregar los TextField que contendrn los datos resultantes.

    Conexin a una Base de Datos

    Los campos de un reporte puede necesitar ser llenado por los datos contenidos en alguna o

    algunas tablas dentro de una base de datos. IReport permite crear esa conexin para comprobarque los datos son llamados y cargados correctamente en el reporte. Para lograr esto, se debenseguir los siguientes pasos:

    1. Ir a Men -> Data -> Connections/DataSources.2. En la ventana, seleccionar New para agregar una conexin.3. Seleccionar Database JDBC Connection. Hacer clic en Siguiente.

  • 8/6/2019 gua de prctica 7

    7/19

    Anlisis y Diseo de Sistemas Orientado a ObjetosGua de Prctica N7

    Catedrtico: Ing. Samuel Alfonso MarguisInstructora: Stephanie Caroline Guadrn

    4. Colocar un nombre a la conexin, de preferencia que represente el tipo de conexin arealizar. Seleccionar el driver y rellenar los campos.

    5. Hacer clic en Test para comprobar que la conexin fue exitosa. Si da error, revisar lainformacin introducida en los campos. De lo contrario, dar clic en Save.

    Crear una consulta

    Cuando ya tenemos la conexin, procederemos a crear la consulta que nos traer los datos que

    necesitamos. Para ello, seguiremos los siguientes pasos:

    1. Ir a Men -> Data -> Report Query

    2. Digitar la consulta SQL. Si se encuentra seleccionado el check box Automatically RetrieveFields, nos mostrar automticamente los campos que se obtienen de la consulta, el tipo yuna descripcin de estos si es que cuentan con ella. Si la consulta es incorrecta mostrarun mensaje de error. La pantalla debe lucir como sigue:

  • 8/6/2019 gua de prctica 7

    8/19

    Anlisis y Diseo de Sistemas Orientado a ObjetosGua de Prctica N7

    Catedrtico: Ing. Samuel Alfonso MarguisInstructora: Stephanie Caroline Guadrn

    3. Oprimir el botn OK para guardar la consulta.

    Agregar TextField

    Ahora solo resta colocar en la seccin detail, los campos que se mostrarn en el reporte. Para estose usar el objeto Text Field, las cajas se pintarn de manera similar a las cajas de texto estticorealizadas en la banda columHeader.En la ventana de propiedades ponga especial atencin en seleccionar el tipo correcto del campoen el combo Textfield ExpressionClass. (La ventana Propiedades se mostrar automticamente ala derecha de la pantalla. Si esto no ocurre, ir a Men -> View -> Docking Panes -> ElementProperties. Tener cuidado de que el textfield est seleccionado).

  • 8/6/2019 gua de prctica 7

    9/19

    Anlisis y Diseo de Sistemas Orientado a ObjetosGua de Prctica N7

    Catedrtico: Ing. Samuel Alfonso MarguisInstructora: Stephanie Caroline Guadrn

    Si el tipo de campo es diferente al del campo de la base de datos, generar un error. En la seccinTextfield expression de la misma ventana, cambie la expresin $F{Field} por el nombre correctodel campo. Por ejemplo: $F{idAgencia} . Configure as cada uno de los campos restantes.

    Puede auxiliarse del cuadro Values. Para ello, vaya a Men -> Ver, y seleccione el item Fields.Esto desplegar la pantalla Values con los campos del reporte, los cuales se generaron alestablecer la consulta SQL. All podr observar el tipo de dato de cada uno de los campos.

  • 8/6/2019 gua de prctica 7

    10/19

    Anlisis y Diseo de Sistemas Orientado a ObjetosGua de Prctica N7

    Catedrtico: Ing. Samuel Alfonso MarguisInstructora: Stephanie Caroline Guadrn

    Puede agregarse detalles adicionales, como una lnea al inicio de la seccin Detail para separar losregistros. Para ello, seleccionar el objeto Line tool de la barra de herramientas. Debe reducir eltamao de la banda Detail al alto de las cajas de los campos para evitar demasiado espacio entrelos registros.

    El reporte final debera lucir de la siguiente manera:

  • 8/6/2019 gua de prctica 7

    11/19

    Anlisis y Diseo de Sistemas Orientado a ObjetosGua de Prctica N7

    Catedrtico: Ing. Samuel Alfonso MarguisInstructora: Stephanie Caroline Guadrn

    Compilacin y Ejecucin del Reporte

    Las siguientes figuras muestran los botones de la barra de herramientas necesarios para compilar,y ejecutar el reporte con o sin conexin.

    Compile el reporte, el resultado de la compilacin aparecer en la parte inferior de la pantalla. Loserrores ms frecuentes de compilacin se relacionan con los tipos de los campos que pretendenmostrarse. Si la compilacin result sin errores, est listo para ver su reporte. Es recomendable

    probarlo primero sin usar una conexin a una base de datos. Finalmente, ejecute el reporteocupando la conexin a la base de datos que se configur. El resultado dependiendo de sus datosen las tablas debe ser parecido al siguiente:

  • 8/6/2019 gua de prctica 7

    12/19

    Anlisis y Diseo de Sistemas Orientado a ObjetosGua de Prctica N7

    Catedrtico: Ing. Samuel Alfonso MarguisInstructora: Stephanie Caroline Guadrn

    NOTA: El archivo compilado se guarda por defecto en una carpeta propia de IReport. Para que elcompilado (.jasper) se almacene en la carpeta de su proyecto, ir a Men -> Options -> Settings,seleccionar la pestaa Compiler, y en Default compilation directory, hacer clic en Browse yseleccionar la carpeta donde almacen el reporte.

  • 8/6/2019 gua de prctica 7

    13/19

    Anlisis y Diseo de Sistemas Orientado a ObjetosGua de Prctica N7

    Catedrtico: Ing. Samuel Alfonso MarguisInstructora: Stephanie Caroline Guadrn

    Envo de Parmetros

    En muchas ocasiones se necesitar enviar parmetros desde una aplicacin. Por ejemplo,podemos querer que nuestro reporte muestre nicamente los registros de empleados quecoincidan con una residencia en el departamento de Sonsonate.Para poder hacer uso de parmetros, debe hacer clic en el botn Parameters de la barra de

    herramientas o bien, desde el men View, seleccione Parameters. En la pantalla values, asegresede estar ubicado en la pestaa Parameters y oprima el botn Nuevo. Agregue el nuevo parmetrodel reporte, como se muestra en la siguiente figura.

  • 8/6/2019 gua de prctica 7

    14/19

    Anlisis y Diseo de Sistemas Orientado a ObjetosGua de Prctica N7

    Catedrtico: Ing. Samuel Alfonso MarguisInstructora: Stephanie Caroline Guadrn

    NOTA: El tipo (Class Type) que se le colocar al parmetro debe coincidir con lo que enviemosdesde la aplicacin, no necesariamente con su tipo en la base de datos.

    En el Query, escribir la sentencia SQL especificando la condicin con el parmetro agregado, comose muestra a continuacin:

  • 8/6/2019 gua de prctica 7

    15/19

  • 8/6/2019 gua de prctica 7

    16/19

    Anlisis y Diseo de Sistemas Orientado a ObjetosGua de Prctica N7

    Catedrtico: Ing. Samuel Alfonso MarguisInstructora: Stephanie Caroline Guadrn

    Crear las siguientes JSP y clase Java. No olvidar incluir una referencia en el men.

    reporteAgencia.jsp

    Reporte de Lista de Materiales


    ::Ir a Men

    Principal::

    Reporte de Lista de Materiales

  • 8/6/2019 gua de prctica 7

    17/19

    Anlisis y Diseo de Sistemas Orientado a ObjetosGua de Prctica N7

    Catedrtico: Ing. Samuel Alfonso MarguisInstructora: Stephanie Caroline Guadrn

    clsDBManager cn = new clsDBManager();clsReporte mirepor = new clsReporte();switch (op){

    case 1: //Mostrando Registros

    out.println("CodigoNombreGenerar Lista");

    ResultSet resul;resul = mirepor.ConsultaRepor(cn);resul.beforeFirst();boolean seguir = resul.next();if (resul != null){

    while (seguir){

    out.println(""+resul.getString(1)+""+resul.getString(2)+"Generar");

    seguir = resul.next();}

    }out.println("");break;

    case 2: //Lista de todas las agenciasmirepor.ReporteAgencia(cn,"");out.println("Regresar");break;

    case 3: //Detalle de una agencia en particularmIdAgencia = request.getParameter("codigo");mirepor.ReporteAgencia(cn,mIdAgencia);out.println("Regresar");break;

    }%>

  • 8/6/2019 gua de prctica 7

    18/19

    Anlisis y Diseo de Sistemas Orientado a ObjetosGua de Prctica N7

    Catedrtico: Ing. Samuel Alfonso MarguisInstructora: Stephanie Caroline Guadrn

    clsReporte.java

    package pkgSistema;

    import java.sql.*;import javax.sql.*;import java.util.*;import java.io.*;

    import net.sf.jasperreports.engine.*;import net.sf.jasperreports.engine.export.*;import net.sf.jasperreports.engine.util.*;

    import net.sf.jasperreports.view.*;

    public class clsReporte {

    public ResultSet ConsultaRepor(clsDBManager cn){try{

    cn.Conectar();String sql;sql="Select * from agencia";

    PreparedStatement sentencia = cn.conn.prepareStatement(sql);ResultSet rs = sentencia.executeQuery(sql);cn.Desconectar();return rs;

    }catch (SQLException e){

  • 8/6/2019 gua de prctica 7

    19/19

    Anlisis y Diseo de Sistemas Orientado a ObjetosGua de Prctica N7

    Catedrtico: Ing. Samuel Alfonso MarguisInstructora: Stephanie Caroline Guadrn

    return null;}

    }

    public void ReporteAgencia(clsDBManager conexionBD, String param1) {

    try{

    conexionBD.Conectar();if (param1=="") //Si no enviamos parmetros{

    Map parameters = new HashMap(); //Siempre lo declaramos pues el mtodo JasperPrintlo requiere aunque vaya vaco

    String fileName="C:\\AplicacionesJava\\CasoDeUso\\web\\Reportes\\RepGenAge.jasper";

    JasperPrint print = JasperFillManager.fillReport(fileName, parameters, conexionBD.conn);JasperViewer.viewReport(print,false);

    }else //Enviando un parmetro{

    Map parameters = new HashMap();parameters.put("PIdAgencia", param1);String fileName="C:\\Aplicaciones

    Java\\CasoDeUso\\web\\Reportes\\RepDetAge.jasper";JasperPrint print = JasperFillManager.fillReport(fileName, parameters, conexionBD.conn);JasperViewer.viewReport(print,false);

    }}catch (Exception e) {System.out.println("Mensaje de Error:"+e.getMessage());

    }finally {

    conexionBD.Desconectar();}

    }

    } // main()