Download Uso de CrystalReports XI en java
Document related concepts
no text concepts found
Transcript
Uso de CrystalReports XI en java Proyecto: Framework 2.0 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 Hoja de Control Título Manual de utilización de CrystalReports XI en el Framework 2 Documento de Referencia Responsable Unidad de Arquitectura de Aplicaciones Versión 1.0 Revisado/Validado por: Aprobado por: Fecha Versión 28/05/2009 Fecha Revisión/Validación Fecha Aprobación Registro de Cambios Versión 1.0 Causa del Cambio Responsable del Cambio Versión inicial del documento Fecha del Cambio 28/05/2009 Participantes / Elaboración: Colaboradores Manual de configuración del entorno de desarrollo 17/06/2009 Área/Departamento Nº Copias Página 2 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 Índice 1. INTRODUCCIÓN ................................................................................................................................................................ 5 1.1. 1.2. AUDIENCIA OBJETIVO ...................................................................................................................................................... 5 CONOCIMIENTOS PREVIOS ............................................................................................................................................... 5 2. DESCRIPCIÓN .................................................................................................................................................................... 5 3. CREACIÓN DEL INFORME ............................................................................................................................................. 6 3.1. 3.2. 3.3. 4. FUENTE DE DATOS JDBC .......................................................................................................................................... 6 FUENTE DE DATOS XML ........................................................................................................................................... 8 SERVIDOR DE ORACLE PARA CRYSTALREPORTSWS ...................................................................................... 10 SOLUCIÓN LIBRERÍA FW2_LIB_CRXI1_0.JAR ....................................................................................................... 11 4.1. INSTALACION Y CONFIGURACIÓN ...................................................................................................................... 11 4.1.1. Paso 1: Descarga de la librería y sus dependencias ............................................................................................ 11 4.1.2. Paso 2: Base de datos ........................................................................................................................................... 12 4.1.3. Paso 3: Fichero de configuración de CrystalReports........................................................................................... 12 4.1.4. Paso 4: Actualización del fichero de configuración de la aplicación................................................................... 12 4.1.5. Paso 5: Ubicación de los informes ....................................................................................................................... 13 4.1.6. Paso 5: Página de redirección.............................................................................................................................. 13 4.2. USO .............................................................................................................................................................................. 13 4.2.1. CrystalReportAccion............................................................................................................................................. 13 Paso 1: Crear una clase que herede de CrystalReportAction .............................................................................................. 15 Paso 2: Sobrescribir el método............................................................................................................................................. 15 Paso 3: Crear un objeto CrystalReportBean ........................................................................................................................ 15 Paso 4: Obtener el directorio de los reports a partir del fichero de configuración ............................................................. 15 Paso 5: Establecer los parámetros del objeto CrystalReportBean....................................................................................... 15 Paso 6: Devolver el objeto CrystalReportBean .................................................................................................................... 15 Ejemplos concretos ............................................................................................................................................................... 15 EJEMPLOCRPDF ....................................................................................................................................................................... 15 EJEMPLOCRHTML ................................................................................................................................................................... 16 EJEMPLOCRRTF ....................................................................................................................................................................... 17 EJEMPLOCRPARAMETROS ......................................................................................................................................................... 18 4.2.2. CrystalReportXMLAction...................................................................................................................................... 20 Paso 1: Crear una clase que herede de CrystalReportXMLAction ...................................................................................... 20 Paso 2: Sobrescribir el método............................................................................................................................................. 20 Paso 3: Crear un objeto CrystalReportBean ........................................................................................................................ 20 Paso 4: Obtener el directorio de los reports a partir del fichero de configuración ............................................................. 20 Paso 5: Establecer los parámetros del objeto CrystalReportBean....................................................................................... 20 Paso 6: Devolver el objeto CrystalReportBean .................................................................................................................... 20 Ejemplos concretos ............................................................................................................................................................... 22 Ejemplo ReportXML ............................................................................................................................................................. 22 4.2.3. CrystalReportVisor ............................................................................................................................................... 24 4.2.4. CrystalReportGenerador ...................................................................................................................................... 26 4.2.5. Constructores........................................................................................................................................................ 26 Ejemplo escribir fichero en disco ......................................................................................................................................... 27 Ejemplo recuperar array de bytes ........................................................................................................................................ 27 5. ACTUALIZACIÓN LIBRERÍA CRYSTALREPORTS2_0 A FW2_LIB_CRXI1_0.JAR.......................................... 28 6. SOLUCION LIBRERÍA CRYSTALREPORTWS.......................................................................................................... 29 6.1. INSTALACION Y CONFIGURACIÓN ...................................................................................................................... 29 6.1.1. Paso 1: Descarga de la librería............................................................................................................................ 29 6.1.2. Paso 2: Ubicación de los reports.......................................................................................................................... 29 Manual de configuración del entorno de desarrollo 17/06/2009 Página 3 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 Paso 3: Actualización del fichero de configuración de la aplicación................................................................... 29 6.1.3. 6.1.4. Paso 4: Página de redirección.............................................................................................................................. 30 6.2. USO .............................................................................................................................................................................. 30 6.2.1. CrystalReportWSAccion........................................................................................................................................ 30 7. ANEXO 1 CRCONFIG.XML ............................................................................................................................................ 33 8. DEPENDENCIAS DE LA LIBRERIA FW2_LIB_CRXI............................................................................................... 33 Manual de configuración del entorno de desarrollo 17/06/2009 Página 4 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 Contenido 1. INTRODUCCIÓN La solución que se ha de utilizar para la generación de informes o listados es Crystal Reports XI utilizando el Java Reporting Component. El Java Reporting Component (JRC) se proporciona con las distribuciones de Crystal Reports XI Developer y Advanced Developer. El JRC es una solución de reporting en Java que procesa informes para ser visualizados o exportados. Este componente debe ser utilizado en un servidor de aplicaciones Java y puede ser usado para añadir funcionalidad de informes a aplicaciones Java sin la necesidad de desplegar componentes como BusinessObjects Enterprise. Dentro del framework 2 para el desarrollo de aplicaciones java se ha creado wrapper de acceso al jrc de Crystal Reports, este wrapper se encuentra implementado en la librería fw2_lib_crxi1_0. Este documento contiene el manual de utilización de la librería fw2_lib_crxi1_0. 1.1. Audiencia objetivo El lector objetivo de este documento es toda aquella persona que esté desarrollando una aplicación web basada en el framework 2 y necesite generar informes de Crystal Reports XI mediante invocación directa al API o utilizando un webservice. 1.2. Conocimientos Previos Para un completo entendimiento del documento, el lector deberá tener conocimientos previos sobre las siguientes tecnologías: - Lenguaje Java - Java Servlets API, JavaServer Pages (JSP) - Api JRC de Crystal Reports XI. 2. DESCRIPCIÓN Desde java podemos acceder a los reports creados en CrystalReports XI. Tenemos dos opciones: • Invocar directamente el informe desde java. De esta forma podemos obtener informes en los siguientes formatos: o o o PDF RTF HTML En este caso el informe se va a encontrar dentro de la web de java y se hará uso de la librería fw2_lib_crxi1_0.jar junto con sus dependencias. La librería y sus dependencias se pueden encontrar en la web de soja en el fichero fw2_libr_crxi1_0.zip. • Llamar desde java a un Webservice de Delphi que genera el informe. De esta forma podemos obtener informes en los siguientes formatos: Manual de configuración del entorno de desarrollo 17/06/2009 Página 5 de 33 o o o Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 PDF DOC (Word) XLS (Excel) En este caso el informe se va a encontrar dentro de la web del Webservice de Delphi y se hará uso de la librería CrystalReportsWS. En ambos casos es necesario que se incluya el fichero redireccion.jsp en el directorio WEB-INF/jsp de la aplicación. Desde una aplicación solo se debería utilizar una única forma de generar los informes o mediante la llamada al webservice o mediante la invocación directa desde java. No se pasarán datos mediante parámetros directamente al report, los parámetros se usarán para filtrar los datos ha mostrar en el informe. 3. CREACIÓN DEL INFORME Las únicas fuentes de datos permitidas son: • JDBC Oracle • XML 3.1. FUENTE DE DATOS JDBC Cuando se crea en CrystalReports hay que conectarse a la base de datos de Oracle mediante JDBC si se va a invocar el informe directamente desde java. Hay que editar el fichero CRConfig.xml que se encuentra en el directorio C:\Archivos de programa\Archivos comunes\Business Objects\3.0\java. … <DataDriverCommon> <JavaDir>C:\j2sdk1.4.2_17\jre\bin</JavaDir> <Classpath>C:\Archivos de programa\Archivos comunes\Business Objects\3.0\java/lib/crlovmanifest.jar;C:\Archivos de programa\Archivos comunes\Business Objects\3.0\java/lib/CRLOVExternal.jar;C:\Archivos de programa\Archivos comunes\Business Objects\3.0\java/lib/CRDBJavaServerCommon.jar;C:\Archivos de programa\Archivos comunes\Business Objects\3.0\java/lib/CRDBJavaServer.jar;C:\Archivos de programa\Archivos comunes\Business Objects\3.0\java/lib/CRDBJDBCServer.jar;C:\Archivos de programa\Archivos comunes\Business Objects\3.0\java/lib/CRDBXMLServer.jar;C:\Archivos de programa\Archivos comunes\Business Objects\3.0\java/lib/CRDBJavaBeansServer.jar;C:\Archivos de programa\Archivos comunes\Business Objects\3.0\java/lib/external/CRDBXMLExternal.jar;C:\Archivos de programa\Archivos comunes\Business Objects\3.0\java/lib/external/log4j.jar;C:\Archivos de programa\Archivos comunes\Business Objects\3.0\java/lib/cecore.jar;C:\Archivos de programa\Archivos comunes\Business Objects\3.0\java/lib/celib.jar;C:\Archivos de programa\Archivos comunes\Business Objects\3.0\java/lib/ebus405.jar;C:\Archivos de programa\Archivos comunes\Business Objects\3.0\java/lib/corbaidl.jar;C:\Archivos de programa\Archivos comunes\Business Objects\3.0\java/lib/external/freessl201.jar;C:\Archivos de programa\Archivos comunes\Business Objects\3.0\java/lib/external/asn1.jar;C:\Archivos de programa\Archivos comunes\Business Objects\3.0\java/lib/external/certj.jar;C:\Archivos de programa\Archivos comunes\Business Objects\3.0\java/lib/external/jsafe.jar;C:\Archivos de programa\Archivos comunes\Business Objects\3.0\java/lib/external/sslj.jar;C:\Archivos de programa\Archivos comunes\Business Objects\3.0\java\lib\jdbc\ojdbc14.jar;${CLASSPATH}</Classpath> Manual de configuración del entorno de desarrollo 17/06/2009 Página 6 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 <IORFileLocation>D:\Temporal</IORFileLocation> <JavaServerTimeout>1800</JavaServerTimeout> <JVMMaxHeap>64000000</JVMMaxHeap> <JVMMinHeap>32000000</JVMMinHeap> <NumberOfThreads>100</NumberOfThreads> </DataDriverCommon> <JDBC> <CacheRowSetSize>100</CacheRowSetSize> <JDBCURL>jdbc:oracle:thin:@icm21:1521:denivel2</JDBCURL> <JDBCClassName>oracle.jdbc.driver.OracleDriver</JDBCClassName> <JDBCUserName>dba_ejpl</JDBCUserName> <JNDIURL></JNDIURL> <JNDIConnectionFactory></JNDIConnectionFactory> <JNDIInitContext>java:/comp.env.jdbc</JNDIInitContext> <JNDIUserName></JNDIUserName> <GenericJDBCDriver> <Option>No</Option> <DatabaseStructure>catalogs,tables</DatabaseStructure> <StoredProcType>Standard</StoredProcType> <LogonStyle>Oracle</LogonStyle> </GenericJDBCDriver> </JDBC> … En la ruta del CLASSPATH tenemos que comprobar si se corresponde con nuestra ruta, en particular con el fichero ojdbc14.jar que debemos incluir en nuestra instalación. Este fichero contiene los drivers de jdbc para oracle. Por otra parte hay que indicar cual es la ruta del jdk de java que se debe corresponder con el jdk instalado en nuestro pc en la etiqueta <JavaDir>. Una vez configurado este fichero cuando vamos a crear un informe, al elegir la fuente de los datos nos aparece la siguiente ventana: Cuando se vaya a usar la librería fw2_lib_crxi1_0.jar debemos elegir JDBC (JNDI) y al pulsar el signo ‘+’ nos mostrará una ventana con la información de la conexión JDBC. Manual de configuración del entorno de desarrollo 17/06/2009 Página 7 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 En esta ventana podemos modificar el parámetro URL de conexión y actualizarlo con nuestra base de datos. Al pulsar el botón de siguiente nos solicitará que le indiquemos el usuario y la password. Una vez incluidos ya nos aparece la lista de tablas disponibles para realizar el informe. 3.2. FUENTE DE DATOS XML En el caso en el que se utilice un fichero xml como fuente de datos del informe en la ventana asistente de base de datos debemos elegir XML. Manual de configuración del entorno de desarrollo 17/06/2009 Página 8 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 Al pulsar el signo ‘+’ nos mostrará una ventana en el que hay que especificar el tipo de origen de datos XML y el nombre de archivo XML. Pulsaremos en el botón y seleccionaremos el fichero. Manual de configuración del entorno de desarrollo 17/06/2009 Página 9 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 Al pulsar siguiente nos pedirá especificar el tipo y nombre del archivo esquema. Pulsaremos dicho fichero. para seleccionar Por último pulsaremos Finalizar para que aparezcan lista de tablas disponibles para realizar el informe. 3.3. SERVIDOR DE ORACLE PARA CRYSTALREPORTSWS En el caso en el que se utilice la librería CrystalReportsWS en la ventana asistente de base de datos debemos elegir Servidor de Oracle y al pulsar el signo ‘+’ nos mostrará una ventana con la información de la conexión. Manual de configuración del entorno de desarrollo 17/06/2009 Página 10 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 En esta ventana habrá que indicar el nombre del servicio, el usuario y la password. Una vez incluidos ya nos aparece la lista de tablas disponibles para realizar el informe. 4. SOLUCIÓN LIBRERÍA fw2_lib_crxi1_0.jar 4.1. INSTALACION Y CONFIGURACIÓN 4.1.1. Paso 1: Descarga de la librería y sus dependencias Manual de configuración del entorno de desarrollo 17/06/2009 Página 11 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 La librería y sus dependencias se pueden descargar de la web de soja y se deben incluir en el directorio WEB_INF/lib. Tanto la librería como las dependencias se encuentran comprimidas en el fichero fw2_lib_crxi1_0.zip 4.1.2. Paso 2: Base de datos El dba propietario de las tablas de la base de datos debe ser el mismo en cualquier entorno en el que se vaya a generar el report mediante la librería fw2_lib_crxi1_0 4.1.3. Paso 3: Fichero de configuración de CrystalReports En el directorio classes se ha de incluir el fichero CRConfig.xml. El contenido de este fichero se encuentra en el anexo 1 de este documento. 4.1.4. Paso 4: Actualización del fichero de configuración de la aplicación Si la fuente de datos es la base de datos: Los reports se deben encontrar en un directorio dentro del web de nuestra aplicación por debajo del directorio WEB_INF. Este directorio se especifica en el fichero de configuración de la aplicación en la propiedad reports.directorio = %WEB_HOME%/WEB-INF/reports. Por otra parte para que el Controlador encuentre la clase CrystalReportAccion hay que ponerla en el fichero de configuración de la siguiente forma: CrystalReportAccion = crystalreports.acciones La librería fw2_lib_crxi1_0 se conectará a base de datos para recuperar la información necesaria para generar el report. Para realizar la conexión hay que incluir en el fichero de configuración de la aplicación las siguientes variables: Variables Descripción Valores que toma reports.bd.url URL para realizar la conexión con la base de datos de la aplicación, en el formato que requiera el Driver JDBC que estemos usando. Ejemplo: jdbc:oracle:thin:@icm21:1521:denivel2 reports.bd.usuario Usuario con el que nos conectaremos a la base de datos. <usuario> reports.bd.clave Clave necesaria para acceder a la base de datos con el usuario indicado. La clave debe ir encriptada. <clave> Si la fuente de datos es un fichero xml: Los reports se deben encontrar en un directorio dentro del web de nuestra aplicación por debajo del directorio WEB_INF. Este directorio se especifica en el fichero de configuración de la aplicación en la propiedad reports.directorio = %WEB_HOME%/WEB-INF/reports. El directorio para los ficheros xml y para los ficheros xsd se especifica en el fichero de configuración de la aplicación mediante las siguientes variables Manual de configuración del entorno de desarrollo 17/06/2009 Página 12 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 reports.directorio.xml = %WEB_HOME%/WEB-INF/reports. reports.directorio.xsd = %WEB_HOME%/WEB-INF/reports. Por otra parte para que el Controlador encuentre la clase CrystalReportXMLAccion hay que ponerla en el fichero de configuración de la siguiente forma: CrystalReportXMLAccion = crystalreports.acciones 4.1.5. Paso 5: Ubicación de los informes Los reports se deben encontrar en un directorio dentro del web de nuestra aplicación por debajo del directorio WEB_INF. En el caso en el que la fuente de datos sea un xml, los ficheros xml y los ficheros xsd se deben encontrar en un directorio dentro del web de nuestra aplicación por debajo del directorio WEB_INF. Estos directorios se indicarán en el fichero de configuración de la aplicación. 4.1.6. Paso 5: Página de redirección Se tendrá que incluir el fichero redireccion.jsp en el directorio WEB-INF/jsp de la aplicación. 4.2. USO Esta librería contiene las siguientes clases públicas para tratamiento de reports solamente desde Java: • CrystalReportAccion: A partir de los atributos del request ejecuta el report correspondiente. • CrystalReportXMLAccion: A partir de los atributos del request ejecuta el report correspondiente el cual utiliza un fichero xml como fuente de datos. • CrystalReportVisor: A partir de los atributos del request ejecuta el report correspondiente y el informe se muestra en el visor de Crystal Report. • CrystalReportBean: Bean con información del report. • CrystalReportVisorBean: Bean con información del report cuando se muestra en el visor de Crystal Report. • CrystalReportGenerador: Incluye los métodos necesarios para generar los informes, métodos para exportarlo a los distintos formatos soportados: PDF y RTF y métodos para realizar el cambio de la url de conexión a base de datos. Contiene un método público para recuperar el array de bytes del informe generado y otro para escribir el informe generado en disco. Con la clase CrystalReportAccion se podría ejecutar un informe directamente o bien podríamos heredar de ella y modificarla para lo que no se pudiera realizar directamente. Está indicado el uso de la clase CrystalReportGenerador para aplicaciones consola en las que se tenga que escribir el informe en disco. 4.2.1. CrystalReportAccion Manual de configuración del entorno de desarrollo 17/06/2009 Página 13 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 Se ha creado una clase llamada CrystalReportAccion en el paquete crystalreports.acciones que a partir de unos atributos del request ejecuta el report correspondiente. Los parámetros del request son: • REPORT: Nombre del report. • PARAMETROS: Parámetros del report en forma de campo=valor y si vienen varios, cada uno en una línea. Si lo que se quiere pasar es una fecha se tendrá que poner en el formato campo=date(aaaa,mm,dd). • TIPO_SALIDA: Tipo de ejecución del report que puede ser: 1. PDF 2. RTF 3. HTML A continuación se muestra un ejemplo de llamada a la Accion CrystalReportAccion desde una página jsp: <jsp:useBean id="report" scope="request" class="java.lang.String" /> <SCRIPT> function enviarFormulario(destino){ document.formulario.action = destino; document.formulario.submit(); } </SCRIPT> <p style="text-align: center"><font size="4" color="#800000">Generación de report genérica</font></p><br> <form name="formulario" method="POST" action=""> <table border="4" cellspacing="4" width="100%" id="AutoNumber1" cellpadding="4"> <tr> <td width="100%" bgcolor="#FFCC99"> <b>Nombre del report:</b><blockquote> <p> <input type="text" name="REPORT" value="<%=report%>" size="47" readonly></p> </blockquote> </td> </tr> <tr> <td width="100%" bgcolor="#FFFFCC"><b>Parámetros del informe: </b> <p>Si el informe tiene parámetros se deben introducir de la siguiente forma:</p> <blockquote> <p>nombre=valor <i>Ejemplo: (codigo=6)</i></p> </blockquote> <p>En el caso de tener varios parámetros se pondrá cada uno en una línea</p> <blockquote> <p><textarea rows="5" name="PARAMETROS" cols="53"></textarea></blockquote> </td> </tr> <tr> <td width="100%" bgcolor="#FFCC99"><b>Tipo de salida:</b><blockquote> <p> <select size="1" name="TIPO_SALIDA"> <option selected value="PDF">PDF</option> <option value="RTF">RTF</option> <option value="HTML">HTML</option> </select></blockquote> <p> </td> </tr> <tr> <td width="100%"> <input type="submit" value="Ejecutar" name="generar" onclick=enviarFormulario("CrystalReportAccion.icm")> <input type="reset" value="Restablecer" name="B2"> </td> </tr> </table> </form> Manual de configuración del entorno de desarrollo 17/06/2009 Página 14 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 Aunque se puede invocar así directamente normalmente lo que hay que hacer es lo siguiente: Paso 1: Crear una clase que herede de CrystalReportAction Paso 2: Sobrescribir el método protected CrystalReportBean leerDatosRequest(CrystalReportBean crBean) throws AccionException Paso 3: Crear un objeto CrystalReportBean Paso 4: Obtener el directorio de los reports a partir del fichero de configuración Paso 5: Establecer los parámetros del objeto CrystalReportBean. Paso 6: Devolver el objeto CrystalReportBean A continuación se muestran unos ejemplos concretos en los que se conoce a priori el tipo de salida, el nombre del fichero o los parámetros. Ejemplos concretos A continuación se muestran unos ejemplos concretos en los que se conoce a priori el tipo de salida, el nombre del fichero o los parámetros. EjemploCRPDF En este caso se genera un fichero PDF para el report ListadoEmpleados.rpt package ejpl_crystaljava_web.acciones; import sistemas.framework.excepciones.AccionException; import fw2_lib_crxi.acciones.CrystalReportAccion; import fw2_lib_crxi.beans.CrystalReportBean; /** * <p> * Title: Clase EjemploCRPDF * </p> * <p> * Description: Clase de ejemplo de generación de un informe en formato PDF. * </p> * <p> * Copyright: Copyright (c) 2008 * </p> * <p> * Company: ICM * </p> * * @author Arquitectura de aplicaciones * @version 1.0 */ public class EjemploCRPDF extends CrystalReportAccion { /** * Constructor por defecto de la acción. */ public EjemploCRPDF() { } /** * Este metodo nos permite modificar los valores que CrystalReportAccion * asigna automaticamente al CrystalReportBean. O incluso obviar esos Manual de configuración del entorno de desarrollo 17/06/2009 Página 15 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 * valores y establecer los valores por nuestra cuenta dependiendo de otras * condiciones. * * @param crBean - CrystalReportBean * @return CrystalReportBean * @throws AccionException si ocurre algún error durante la ejecución del * método. * @see crystalreports.acciones.CrystalReportAccion */ protected CrystalReportBean leerDatosRequest(CrystalReportBean crBean) throws AccionException { // Permitimos que establezca los valores iniciales a partir de los // valores del request. if (crBean == null) { crBean = new CrystalReportBean(); } // Modificar crBean si fuera necesario. String directorio = null; try { directorio = sistemas.util.Config.get("reports.directorio"); } catch (Exception ex1) { throw new AccionException("Se debe especificar el parámetro reports.directorio" + " en el fichero de configuración"); } String report = "/" + directorio + "/ListadoEmpleados.rpt"; crBean.setReport(report); crBean.setTipoSalida(CrystalReportBean.SALIDA_PDF); return crBean; } } EjemploCRHTML En este caso se genera una página HTML para el report ListadoEmpleados.rpt package ejpl_crystaljava_web.acciones; import sistemas.framework.excepciones.AccionException; import fw2_lib_crxi.acciones.CrystalReportAccion; import fw2_lib_crxi.beans.CrystalReportBean; /** * <p> * Title: Clase EjemploCRHTML * </p> * <p> * Description: Clase de ejemplo que muestra como se realiza un listado en * formato HTML. * </p> * <p> * Copyright: Copyright (c) 2008 * </p> * <p> * Company: ICM * </p> * * @author Arquitectura de aplicaciones * @version 1.0 */ public class EjemploCRHTML extends CrystalReportAccion { /** * Constructor por defecto de la acción. */ public EjemploCRHTML() { } Manual de configuración del entorno de desarrollo 17/06/2009 Página 16 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 /** * Este metodo nos permite modificar los valores que CrystalReportAccion * asigna automaticamente al CrystalReportBean. O incluso obviar esos * valores y establecer los valores por nuestra cuenta dependiendo de otras * condiciones. * * @param crBean - CrystalReportBean * @return CrystalReportBean * @throws AccionException si ocurre algún error durante la ejecución del * método. * @see crystalreports.acciones.CrystalReportAccion */ protected CrystalReportBean leerDatosRequest(CrystalReportBean crBean) throws AccionException { // Permitimos que establezca los valores iniciales a partir de los // valores del request. if (crBean == null) { crBean = new CrystalReportBean(); } String directorio = null; try { directorio = sistemas.util.Config.get("reports.directorio"); } catch (Exception ex1) { throw new AccionException("Se debe especificar el parámetro reports.directorio" + " en el fichero de configuración"); } String report = "/" + directorio + "/ListadoEmpleados.rpt"; crBean.setReport(report); crBean.setTipoSalida(CrystalReportBean.SALIDA_HTML); return crBean; } } EjemploCRRTF Se genera un documento word (.rtf) para el report ListadoEmpleados.rpt package ejpl_crystaljava_web.acciones; import import import import sistemas.framework.controlador.Controlador; sistemas.framework.excepciones.AccionException; fw2_lib_crxi.acciones.CrystalReportAccion; fw2_lib_crxi.beans.CrystalReportBean; /** * <p> * Title: Clase EjemploCRRTF * </p> * <p> * Description: * </p> * <p> * Copyright: Copyright (c) 2008 * </p> * <p> * Company: ICM * </p> * * @author Arquitectura de aplicaciones * @version 1.0 */ public class EjemploCRRTF extends CrystalReportAccion { /** * Constructor por defecto de la acción. Manual de configuración del entorno de desarrollo 17/06/2009 Página 17 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 */ public EjemploCRRTF() { } /** * Este metodo nos permite modificar los valores que CrystalReportAccion * asigna automaticamente al CrystalReportBean. O incluso obviar esos * valores y establecer los valores por nuestra cuenta dependiendo de otras * condiciones. * * @param crBean - CrystalReportBean * @return CrystalReportBean * @throws AccionException si ocurre algún error durante la ejecución del * método. * @see crystalreports.acciones.CrystalReportAccion */ protected CrystalReportBean leerDatosRequest(CrystalReportBean crBean) throws AccionException { // Se construye un crbean para un informe genérico crBean = new CrystalReportBean(); String directorio = null; try { directorio = sistemas.util.Config.get("reports.directorio"); } catch (Exception ex1) { throw new AccionException("Se debe especificar el parámetro reports.directorio" + " en el fichero de configuración"); } String report = "/" + directorio + "/ListadoEmpleados.rpt"; crBean.setReport(report); crBean.setTipoSalida(CrystalReportBean.SALIDA_RTF); crBean.exportarARTF(request, response, Controlador.getContexto()); return crBean; } } EjemploCRParametros En este caso se genera un fichero PDF para el report LIstadoEmpleadosParametro.rpt, al que se le pasan parámetros. package ejpl_crystaljava_web.acciones; import sistemas.framework.excepciones.AccionException; import fw2_lib_crxi.acciones.CrystalReportAccion; import fw2_lib_crxi.beans.CrystalReportBean; /** * <p> * Title: Clase EjemploCRParametros * </p> * <p> * Description: Ejemplo de como pasar parámetros a un report * </p> * <p> * Copyright: Copyright (c) 2008 * </p> * <p> * Company: ICM * </p> * * @author Arquitectura de aplicaciones * @version 1.0 */ public class EjemploCRParametros extends CrystalReportAccion { Manual de configuración del entorno de desarrollo 17/06/2009 Página 18 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 /** * Constructor por defecto de la acción. */ public EjemploCRParametros() { } /** * Este método nos permite modificar los valores que CrystalReportAccion * asigna automaticamente al CrystalReportBean. O incluso obviar esos * valores y establecer los valores por nuestra cuenta dependiendo de otras * condiciones. * * @param arg0 - CrystalReportBean * @return CrystalReportBean * @throws AccionException si ocurre algún error durante la ejecución del * método. * @see crystalreports.acciones.CrystalReportAccion */ protected CrystalReportBean leerDatosRequest(CrystalReportBean arg0) throws AccionException { CrystalReportBean crBean = new CrystalReportBean(); String directorio = null; try { directorio = sistemas.util.Config.get("reports.directorio"); } catch (Exception ex1) { throw new AccionException("Se debe especificar el parámetro reports.directorio" + " en el fichero de configuración"); } String report = "/" + directorio + "/ListadoEmpleadosParametro.rpt"; crBean.setReport(report); crBean.setTipoSalida(CrystalReportBean.SALIDA_PDF); // En el caso de que sólo exista un parámetro se puede introducir como // un String // crBean.setParametros("codigo=BEGO"); // Si hay varios parámetros hay que crear un objeto Properties // y llamara al método setProperty para cada uno de los parámetros java.util.Properties par = new java.util.Properties(); par.setProperty("codigo", "1"); crBean.setParametros(par); return crBean; } } Manual de configuración del entorno de desarrollo 17/06/2009 Página 19 de 33 4.2.2. Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 CrystalReportXMLAction Se ha creado una clase llamada CrystalReportXMLAccion en el paquete crystalreports.acciones que a partir de unos atributos del request ejecuta el report correspondiente. La fuente de datos de este report es un fichero xml. Los parámetros del request son: • REPORT: Nombre del report. • FICHEROXML: Nombre del fichero xml el cual es la fuente de datos para generar el informe. • FICHEROXSD: Esquema del fichero xml. • PARAMETROS: Parámetros del report en forma de campo=valor y si vienen varios, cada uno en una línea. Si lo que se quiere pasar es una fecha se tendrá que poner en el formato campo=date(aaaa,mm,dd). • TIPO_SALIDA: Tipo de ejecución del report que puede ser: 1. PDF 2. RTF 3. HTML La librería fw2_lib_crxi1_0 se conectará a base de datos para recuperar la información necesaria para generar el report. Para realizar la conexión hay que incluir en el fichero de configuración de la aplicación las variables definidas en la siguiente tabla: Variables Descripción Valores que toma reports.bd.url URL para realizar la conexión con la base de datos de la aplicación, en el formato que requiera el Driver JDBC que estemos usando. Ejemplo: jdbc:oracle:thin:@icm21:1521:denivel2 reports.bd.usuario Usuario con el que nos conectaremos a la base de datos. <usuario> reports.bd.clave Clave necesaria para acceder a la base de datos con el usuario indicado. La clave debe ir encriptada. <clave> Paso 1: Crear una clase que herede de CrystalReportXMLAction Paso 2: Sobrescribir el método protected CrystalReportBean leerDatosRequest(CrystalReportBean crBean) throws AccionException Paso 3: Crear un objeto CrystalReportBean Paso 4: Obtener el directorio de los reports a partir del fichero de configuración Paso 5: Establecer los parámetros del objeto CrystalReportBean. Paso 6: Devolver el objeto CrystalReportBean A continuación se muestra un ejemplo de llamada a la Accion CrystalReportXMLAccion desde una página jsp: <jsp:useBean id="report" scope="request" class="java.lang.String" /> Manual de configuración del entorno de desarrollo 17/06/2009 Página 20 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 <jsp:useBean id="ficheroxml" scope="request" class="java.lang.String" /> <jsp:useBean id="ficheroxsd" scope="request" class="java.lang.String" /> <HTML> <HEAD> <TITLE>Genera Report</TITLE> <SCRIPT> function enviarFormulario(destino){ document.formulario.action = destino; document.formulario.submit(); } </SCRIPT> </HEAD> <BODY> <p style="text-align: center"><font size="4" color="#800000">Generación del informe</font></p> <form name="formulario" method="POST" action=""> <table border="4" cellspacing="4" width="100%" id="AutoNumber1" cellpadding="4"> <tr> <td width="100%" bgcolor="#FFCC99"> <b>Nombre del report:</b><blockquote> <p> <input type="text" name="REPORT" value="<%=report%>" size="47" readonly></p> </blockquote> </td> </tr> <tr> <td width="100%" bgcolor="#FFCC99"> <b>Nombre del fichero xml:</b><blockquote> <p> <input type="text" name="FICHEROXML" value="<%=ficheroxml%>" size="47" readonly></p> </blockquote> </td> </tr> <tr> <td width="100%" bgcolor="#FFCC99"> <b>Nombre del fichero xsd:</b><blockquote> <p> <input type="text" name="FICHEROXSD" value="<%=ficheroxsd%>" size="47" readonly></p> </blockquote> </td> </tr> <tr> <td width="100%" bgcolor="#FFFFCC"><b>Parámetros del informe: </b> <p>Si el informe tiene parámetros se deben introducir de la siguiente forma:</p> <blockquote> <p>nombre=valor <i>Ejemplo: (codigo=6)</i></p> </blockquote> <p>En el caso de tener varios parámetros se pondrá cada uno en una línea</p> <blockquote> <p><textarea rows="5" name="PARAMETROS" cols="53"></textarea></blockquote> </td> </tr> <tr> <td width="100%" bgcolor="#FFCC99"><b>Tipo de salida:</b><blockquote> <p> <select size="1" name="TIPO_SALIDA"> <option selected value="PDF">PDF</option> <option value="RTF">RTF</option> <option value="HTML">HTML</option> </select></blockquote> <p> </td> </tr> <tr> <td width="100%"> <input type="submit" value="Ejecutar" name="generar" onclick=enviarFormulario("CrystalReportXMLAccion.icm")> <input type="reset" value="Restablecer" name="B2"> </td> </tr> </table> </form> Manual de configuración del entorno de desarrollo 17/06/2009 Página 21 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 </BODY></HTML> Ejemplos concretos A continuación se muestran un ejemplo concreto en el que se conoce a priori el tipo de salida, el nombre del fichero rpt, xml, xsd o los parámetros. Ejemplo ReportXML En este caso se genera un fichero PDF para el report Informexml.rpt, la fuente de datos del informe es el archivo ds-ireport.xml y el esquema es ds-ireport.xsd. package ejpl_crystaljava_web.acciones; import fw2_lib_crxi.acciones.CrystalReportXMLAccion; import fw2_lib_crxi.beans.CrystalReportBean; import sistemas.framework.excepciones.AccionException; /** * <p> * Title: Clase EjemploReportXML * </p> * <p> * Description: En este claso la clase ha de extender de CrystalReportXMLAccion * </p> * <p> * Copyright: Copyright (c) 2008 * </p> * <p> * Company: ICM * </p> * * @author Arquitectura de aplicaciones * @version 1.0 */ public class EjemploReportXML extends CrystalReportXMLAccion { public EjemploReportXML () { } /** * Este metodo nos permite modificar los valores que CrystalReportXMLAccion asigna * automaticamente al CrystalReportXMLBean. O incluso obviar esos valores y establecer * los valores por nuestra cuenta dependiendo de otras condiciones. * @see crystalreports.acciones.CrystalReportXMLAccion */ protected CrystalReportBean leerDatosRequest(CrystalReportBean crBean) throws AccionException { //Permitimos que establezca los valores iniciales a partir de los valores del request. if (crBean == null){ crBean =new CrystalReportBean(); } //Modificar crBean si fuera necesario. String directorio = null; try { directorio = sistemas.util.Config.get("reports.directorio"); } catch (Exception ex1) { throw new AccionException( "Se debe especificar el parámetro reports.directorio" + " en el fichero de configuración"); } String report = directorio + "/Informexml.rpt"; try { directorio = sistemas.util.Config.get("reports.directorio.xml"); Manual de configuración del entorno de desarrollo 17/06/2009 Página 22 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 } catch (Exception ex1) { throw new AccionException( "Se debe especificar el parámetro reports.directorio.xml" + " en el fichero de configuración"); } String xml = directorio + "/ds-ireport.xml"; try { directorio = sistemas.util.Config.get("reports.directorio.xsd"); } catch (Exception ex1) { throw new AccionException( "Se debe especificar el parámetro reports.directorio.xsd" + " en el fichero de configuración"); } String xsd = directorio + "/ds-ireport.xsd"; crBean.setReport(report); crBean.setXml(xml); crBean.setXsd(xsd); crBean.setTipoSalida(CrystalReportBean.SALIDA_PDF); // En el caso de que exista un único parámetro se puede introducir como // un String // crBean.setParametros("nombreParametro=valorParametro"); // Si hay varios parámetros hay que crear un objeto Properties // y llamara al método setProperty para cada uno de los parámetros //java.util.Properties par = new java.util.Properties(); //par.setProperty("nombreParametro", "valorParametro"); //crBean.setParametros(par); return crBean; } } Manual de configuración del entorno de desarrollo 17/06/2009 Página 23 de 33 4.2.3. Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 CrystalReportVisor Se ha creado una clase llamada CrystalReportVisor en el paquete crystalreports.acciones para mostrar un informe en el visor de Crystal Report. Se creará una clase que debe heredar de CrystalReportVisor. Además se tiene que implementar el método llamado leerDatos en el que se creará un objeto CrystalReportVisorBean que retornará el método con la información del report. Mediante el método setReport del CrystalReportVisorBean se pasará el path del fichero .rpt y mediante el método setParametros un objeto Properties que contenga los parámetros que necesita el report. También se pueden configurar los elementos a mostrar de la barra de herramientas del visor de Crystal Reports. Por defecto se mostrará de la siguiente forma: Se han implementado los siguientes métodos en CrystalReportVisorBean para configurar los elementos que se quiere ocultar o mostrar en la barra de herramientas del visor: • setBotonImprimir: Si se le pasa false se ocultará el botón imprimir • setBotonExportar: Si se le pasa false se ocultará el botón exportar • setBotonRefrescar: Si se le pasa false se ocultará el botón refrescar • setBotonArbolGrupos: : Si se le pasa false se ocultará el botón árbol de grupos • setDesplegarArbolGrupos: Si se le pasa true aparecerá pulsado el botón de árbol de grupos izquierda del informe se mostrará dicho árbol. • setBotonBuscar: Si se le pasa false se ocultará el botón buscar • setBtnNavegarPaginas: Si se le pasa true se muestran los botones para navegar entre las páginas del informe • y a la . setBotonIrPagina: Si se pasa el valor true y setBtnNavegarPaginas también true se mostrará el botón ir a página . Si se le pasa el valor false se mostrará de la siguiente forma . • setBtnNavegarPaginasInferior: Si su valor es true se mostrará una barra en el pie del informe con los botones para navegar entre las páginas del informe. • setListaZoom: Si se pasa el valor true mostrará la lista con los valores para hacer zoom • setListaVisor: Si se pasa el valor true se mostrará la lista del visor • setLogo: se pasa el valor true mostrará el logo de Business Objects El visor de Crystal Report se mostrará en un tag iframe. Para ello en la propiedad src se pondrá el nombre de la clase que herede de CrystalReportVisor, por ejemplo, src="EjemploCRVisor.icm". Manual de configuración del entorno de desarrollo 17/06/2009 Página 24 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 También hay que incluir el fichero crystal-tags-reportviewer.tld en el directorio WEB-INF/tlds de la aplicación y el directorio crystalreportviewers al mismo nivel que el directorio WEB-INF. En el fichero web.xml hay que añadir las referencias a crystalreportviewers a continuación del tag display-name: … <display-name>ejpl_crystaljava_web</display-name> <context-param> <param-name>crystal_image_uri</param-name> <param-value>../../crystalreportviewers</param-value> </context-param> <context-param> <param-name>crystal_image_use_relative</param-name> <param-value>ejpl_crystaljava_web</param-value> </context-param> …. Los reports se deben encontrar en un directorio dentro del web de nuestra aplicación por debajo del directorio WEB_INF. Este directorio se especifica en el fichero de configuración de la aplicación en la propiedad reports.directorio = %WEB_HOME%/WEB-INF/reports. Por otra parte para que el Controlador encuentre la clase CrystalReportVisor hay que ponerla en el fichero de configuración de la siguiente forma: CrystalReportVisor = crystalreports.acciones En el directorio classes se ha de incluir el fichero CRConfig.xml. En el Anexo1 se incluye el contenido de este fichero. La librería fw2_lib_crxi1_0 se conectará a base de datos para recuperar la información necesaria para generar el report. Para realizar la conexión hay que incluir en el fichero de configuración de la aplicación las variables incluidas en el Anexo2. A continuación se muestran un ejemplo concreto: package ejpl_crystaljava_web.acciones; import sistemas.framework.excepciones.AccionException; import fw2_lib_crxi.acciones.CrystalReportVisor; import fw2_lib_crxi.beans.CrystalReportVisorBean; /** * <p> * Title: Clase EjemploCRVisor * </p> * <p> * Description: Clase de ejemplo de generación de un visor de Crystal Reports. * </p> * <p> * Copyright: Copyright (c) 2009 * </p> * <p> * Company: ICM * </p> * * @author Arquitectura de aplicaciones * @version 1.0 */ public class EjemploCRVisor extends CrystalReportVisor { Manual de configuración del entorno de desarrollo 17/06/2009 Página 25 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 /** * Constructor por defecto de la acción. */ public EjemploCRVisor() { } /** * En este método hay que pasar el path del report y los parámetros que * necesita el informe al CrystalReportVisorBean. * * También se podrá configurar los elementos que aparecerán en la barra de * herramientas del visor. * * @param crBean crBean * @return CrystalReportVisorBean * @throws AccionException si ocurre algún error durante la ejecución del * método. */ public CrystalReportVisorBean leerDatos() throws AccionException { CrystalReportVisorBean crvBean = new CrystalReportVisorBean(); String directorio = null; try { directorio = sistemas.util.Config.get("reports.directorio"); } catch (Exception ex1) { throw new AccionException("Se debe especificar el parámetro reports.directorio" + " en el fichero de configuración"); } String report = "/" + directorio + "/ListadoEmpleados.rpt"; crvBean.setReport(report); // // // // // Para pasar los parámetros hay que crear un objeto Properties y llamar al método setProperty para cada uno de los parámetros java.util.Properties par = new java.util.Properties(); par.setProperty("codigo", "1"); crvBean.setParametros(par); // Se configura el visor crvBean.setBotonArbolGrupos(false); crvBean.setBotonExportar(false); return crvBean; } } A continuación se muestra el código de la página jsp: <IFRAME src="EjemploCRVisor.icm" name="visorcr" width="770px" height="1150px" ></IFRAME> 4.2.4. CrystalReportGenerador Se ha creado una clase llamada CrystalReportsGenerador en el paquete crystalreports.generador que contiene un método para recuperar el array de bytes del informe generado, generarArrayInforme(), y otro método que escribe en disco dicho informe dejándolo en el directorio temporal del servidor, generarInforme(). Estos métodos no recuperan datos del request por lo que la información necesaria se pasa a través de los constructores de la clase. 4.2.5. Constructores Manual de configuración del entorno de desarrollo 17/06/2009 Página 26 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 Cuando el report no tenga como fuente de datos un fichero xml se utilizará el constructor CrystalReportGenerador(String report, String tipoSalida, Properties parametros, String informeGenerado) donde: • • • • report – Ruta del report. tiposalida - Tipo de fichero del informe generado. Sus valores pueden ser: PDF, RTF. parametros – Properties con los parámetros que hay que pasar al report. informeGenerado – Nombre del informe generado incluyendo la extensión del tipo de fichero En el caso en el que el report tenga como fuente de datos un fichero xml se utilizará el siguiente constructor CrystalReportGenerador(String report, String xml, String xsd, String tipoSalida,java.util.Properties parametros, String informeGenerado) donde: • report – Ruta del report. • xml – Ruta del fichero xml que es la fuente de datos del report. • xsd – Ruta del fichero xsd. • tiposalida - Tipo de fichero del informe generado. Sus valores pueden ser: PDF, RTF. • parametros – Properties con los parámetros que hay que pasar al report. • informeGenerado – Nombre del informe generado incluyendo la extensión del tipo de fichero. Ejemplo escribir fichero en disco En este caso se genera un fichero PDF que se dejará en el directorio temporal del servidor. … String directorio = null; try { directorio = sistemas.util.Config.get("reports.directorio"); } catch (Exception ex1) { throw new CrystalReportException ("Se debe especificar el parámetro reports.directorio" + " en el fichero de configuración"); } String report = directorio + "/ListadoEmpleados.rpt"; try { CrystalReportGenerador crGenerarEnDisco = new CrystalReportGenerador(report, "PDF", null, "informeGenerado.pdf"); crGenerarEnDisco.generarInforme(); } catch (CrystalReportException cre) { Trazas.imprimeErrorExtendido(cre); throw new CrystalReportException (cre); } … Ejemplo recuperar array de bytes … String directorio = null; try { directorio = sistemas.util.Config.get("reports.directorio"); } catch (Exception ex1) { throw new CrystalReportException ("Se debe especificar el parámetro reports.directorio" + " en el fichero de configuración"); } String report = directorio + "/ListadoEmpleados.rpt"; try { Manual de configuración del entorno de desarrollo 17/06/2009 Página 27 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 CrystalReportGenerador crGenerarEnDisco = new CrystalReportGenerador(report, "PDF", null, "informeGenerado.pdf"); byte[] contenido = crGenerarEnDisco.generarArrayInforme(); … } catch (CrystalReportException cre) { Trazas.imprimeErrorExtendido(cre); throw new CrystalReportException (cre); } … 5. Actualización librería CrystalReports2_0 a fw2_lib_crxi1_0.jar Cuando en una aplicación se vaya a actualizar la librería CrystalReports2_0 a la versión fw2_lib_crxi1_0 se tendrá que realizar los siguientes pasos: • Incluir la librería fw2_lib_crxi1_0.jar en el directorio WEB-INF/lib • Incluir las dependencias de la librería anterior que se pueden encontrar en soja_int en el fichero fw2_lib_crxi1_0.zip: o o o o o o o o o o o o o o o o o o o axis-.jar axis-ant.jar jaxrpc.jar saaj.jar commons-collections-3.1.jar commons-configuration-1.2.jar commons-discovery-0.2.jar commons-lang-2.1.jar commons-logging-1.0.4.jar Concurrent.jar CRDBJavaServerCommon.jar CRDBXMLExternal.jar icu4j.jar log4j-1.2.8.jar pullparser.jar wsdl4j-1.5.1.jar xbean.jar xercesImpl.jar xml-apis.jar • Eliminar el fichero 'CrystalReportEngine-config.xml' del directorio WEB-INF\classes e incluir el fichero 'CRConfig.xml'. El contenido de este fichero se encuentra en el Anexo1. • Para generar informes mediante la librería fw2_lib_crxi1_0 el dba propietario de las tablas de la base de datos debe ser el mismo en cualquier entorno en el que se vaya a ejecutar la aplicación. Este dba se indicará en el fichero de configuración mediante la variable de configuración reports.bd.usuario. • Incluir en el fichero de configuración las siguientes variables, hay que tener en cuenta que el valor de la variable reports.directorio cambia con respecto a la versión enterior: ###################### # Reports # ###################### reports.directorio = %WEB_HOME%/WEB-INF/reports reports.bd.url = <url> reports.bd.usuario = <usuario> Manual de configuración del entorno de desarrollo 17/06/2009 Página 28 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 reports.bd.clave = <clave encriptada> En el caso en el que la fuente de datos del report sea un fichero xml se han de incluir además: reports.directorio.xml = %WEB_HOME%/WEB-INF/reports reports.directorio.xsd = %WEB_HOME%/WEB-INF/reports 6. SOLUCION LIBRERÍA CrystalReportWS Esta librería contiene las siguientes clases públicas para tratamiento de reports accediendo al WebService de Delphi: • CrystalReportWSAccion: A partir de los atributos del request accede al webservice para solicitar el report, lo copia en la maquina donde se esta ejecutando la aplicación java y lo visualiza. • CrystalReportWSBean: Bean con información del report necesaria para el webservice. Con la clase acción anterior se podría ejecutar un informe directamente o bien podríamos heredar de ella y modificarla para lo que no se pudiera realizar directamente. Cuando se realice la entrega de la aplicación los reports se tendrán que incluir en un directorio como un módulo más, este directorio se debe llamar <Proyecto>_CRWS. 6.1. INSTALACION Y CONFIGURACIÓN 6.1.1. Paso 1: Descarga de la librería Descargar la librería CrystalReportsWS.jar e incluir en la aplicación. 6.1.2. Paso 2: Ubicación de los reports Los reports se han de dejar en un directorio del webservices de Crystal Reports el cual tendrá por nombre el código de la aplicación. Este directorio se especifica en el fichero de configuración de la aplicación en la propiedad: crystalreportsws.rutaReportsServidorRemoto = d:/icm/web/webservices/crpt/EJPL 6.1.3. Paso 3: Actualización del fichero de configuración de la aplicación Para que el Controlador encuentre la clase CrystalReportWSAccion hay que ponerla en el fichero de configuración de la siguiente forma: CrystalReportWSAccion = crystalreports.acciones Si en la aplicación se está haciendo uso del datasource de Oracle para acceder a la base de datos hay que incluir en el fichero de configuración los parámetros bd.usuario y bd.clave con sus valores correspondientes dado que serán requeridos por la librería CrystalReportsWS cuando ésta vaya a generar los informes. Otras variables de configuración que hay que especificar son: Nombre variable Descripción Valor de ejemplo crystalreportsws.webservice Ruta hasta el WebService http://nticmdes09.icm.es/webservices/cgi-bin/wscreport.exe/soap/IWSCR Nombre variable crystalreportsws.nombreServidorRemoto Manual de configuración del entorno de desarrollo 17/06/2009 Página 29 de 33 Descripción Valor de ejemplo Nombre variable Descripción Valor de ejemplo Nombre variable Descripción Valor de ejemplo Nombre variable Descripción Valor de ejemplo Nombre variable Descripción Valor de ejemplo Nombre variable Descripción Valor de ejemplo Nombre variable Descripción Valor de ejemplo Nombre variable Descripción Valor de ejemplo 6.1.4. Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 Nombre del servidor en el que se encuentra el WebService, es necesario para poder recuperar el informe una vez generado nticmdes09 crystalreportsws.puertoServidorRemoto Puerto abierto en el servidor remoto con la aplicación de ficheros remotos 8004 crystalreportsws.rutaReportsServidorRemoto Ruta en la que se encuentra los ficheros de CrystalReport dentro del servidor del WebService.El nombre del directorio coincide con el código de la aplicación. d:/icm/web/webservices/crpt/EJPL crystalreportsws.rutaFicherosTemporalesServidorRemoto Ruta en la que el WebService generara los resultados de los informes que ejecutemos d:/icm/web/webservices/salida crystalreportsws.rutaFicherosTemporales Ruta física donde se guardarán los resultados de los informes en la máquina en la que se esta ejecutando la aplicación Java /usr/PRODUCTO/oracle/j2ee904/j2ee/temp crystalreportsws.webFicherosTemporales Ruta web que se devolvera al cliente para mostrar los datos del informe, como con cualquier otro fichero que se deba descargar en los sistemas de desarrollo y producción se debera usar la aplicación PDFServlet. ../../../download crystalreportsws.instanciaBD Instancia de base de datos de la que el WebService obtendrá los datos para generar el informe, el usario y la password con las que se conectará serán las mismas que con las que se conecta la aplicación icm21_denivel2 crystalreportsws.timeout Permite cambiar el timeout del cliente del webservice de Crystal Reports 300000 Paso 4: Página de redirección Se tendrá que incluir el fichero redireccion.jsp en el directorio WEB-INF/jsp de la aplicación. 6.2. USO 6.2.1. CrystalReportWSAccion Se ha creado una clase llamada CrystalReportWSAccion en el paquete crystalreports.acciones que a partir de unos atributos del request ejecuta el report correspondiente. Los parámetros del request son: • REPORT: Nombre del report Manual de configuración del entorno de desarrollo 17/06/2009 Página 30 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 • PARAMETROS: Valores de los parametros del report separados por puntos y coma, estos valores se estableceran de forma secuencial según le llegan al webservice. En el caso en el que el informe contenga un subinforme con parámetros el webservice requerirá el valor de todos los parámetros del informe incluidos los del subinforme aunque estos se encuentren vinculados a parámetros del informe principal. • TIPO_SALIDA: Tipo de ejecución del report que puede ser: o PDF o WORD o EXCEL • SALIDA: Fichero de salida, debe tener la extensión que concuerde con el tipo de salida. A continuación se muestra un ejemplo de llamada a la Accion InvocaWebService que extiende de CrystalReportWSAccion desde una página htm: <html><head><title>Página principal</title></head> <body> <script> function Ver(){ cadena = document.forms[0].VER.value; document.location = cadena; } </script> <form action="InvocaWebService.icm" method="POST"> <table style="padding: 5px; border-collapse: collapse;" id="AutoNumber1" bordercolorlight="#C0C0C0" border="0" bordercolor="#008080" cellpadding="0" cellspacing="0" width="90%"> <tbody><tr> <td align="center" width="20%"><font face="Arial" size="2"> <span lang="es"> Tipo de exportación</span></font></td> <td width="80%"><font face="Arial" size="1"> <span lang="es"><select size="1" name="TIPO_SALIDA"><option selected="selected" value="PDF">Acrobat PDF</option><option value="WORD">Microsoft Word</option><option value="EXCEL">Excel (.XLS)</option></select></span></font></td> </tr> <tr> <td align="center" width="20%"><font face="Arial" size="2"> <span lang="es">Report</span> </font> </td> <td width="80%"><font face="Arial" size="1"> <input name="REPORT" size="65" value="1.rpt" type="text"><br> </font><span lang="es"><font face="Arial" size="2"> 1.rpt = report normal rtf<br> 2.rpt = report con parámetro (indicar un número de 1 a 4)</font></span></td> </tr> <tr> <td align="center" width="20%"><span lang="es"> <font face="Arial" size="2">Parámetros Report</font></span></td> <td width="80%"><font face="Arial" size="1"> <input name="PARAMETROS" size="65" value="4;3;2;1" type="text"></font></td> </tr> <tr> <td align="center" width="20%"><font face="Arial" size="2"> <span lang="es"> Documento salida</span></font></td> <td width="80%"><font face="Arial"> <input name="SALIDA" size="65" value="1.pdf" type="text"></font></td> </tr> <tr> <td colspan="2" align="center" width="100%"> <font face="Arial"> <input value=" Exportar " name="EXPORTAR" type="submit"></font></td> </tr> </tbody> </table> Manual de configuración del entorno de desarrollo 17/06/2009 Página 31 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 </form> </body> </html> package report.acciones; import sistemas.framework.excepciones.AccionException; import crystalreports.acciones.CrystalReportWSAccion; import crystalreports.beans.CrystalReportWSBean; public class InvocaWebService extends CrystalReportWSAccion { /** * Este metodo nos permite modificar los valores que CrystalReportWSAccion asigna * automaticamente al CrystalReportWSBean. O incluso obviar esos valores y establecer * los valores por nuestra cuenta dependiendo de otras condiciones. * @see crystalreports.acciones.CrystalReportWSAccion */ protected CrystalReportWSBean leerDatosRequest(CrystalReportWSBean crBean) throws AccionException { //Permitimos que establezca los valores iniciales a partir de los valores del request. crBean = super.leerDatosRequest(crBean); //Modificar crBean si fuera necesario. return crBean; } } Manual de configuración del entorno de desarrollo 17/06/2009 Página 32 de 33 Manual de utilización de fw2_lib_crxi Fecha: Proyecto: Framework 2.0 28-05-2009 7. ANEXO 1 CRConfig.xml <?xml version="1.0" encoding="utf-8"?> <CrystalReportEngine-configuration> <timeout>5</timeout> <ExternalFunctionLibraryClassNames> <classname> </classname> <classname> </classname> </ExternalFunctionLibraryClassNames> <keycode>C550K-6UG2H28-0004TF9-UP6Y</keycode> </CrystalReportEngine-configuration> 8. DEPENDENCIAS DE LA LIBRERIA fw2_lib_crxi La librería fw2_lib_crxi.jar se puede descargar de soja_int, las dependencias se encuentran en un zip con el nombre dependencias_fw2_lib_crxi.zip. Las librerías que se deben incluir en el directorio son: • • • • • • • • • • • • • • • • • • • • fw2_lib_crxi.jar axis-1.1.jar axis-ant-1.1.jar axis-jaxrpc-1.1.jar axis-saaj-1.1.jar commons-collections-3.1.jar commons-configuration-1.2.jar commons-discovery-0.2.jar commons-lang-2.1.jar commons-logging-1.0.4.jar Concurrent.jar CRDBJavaServerCommon.jar CRDBXMLExternal.jar icu4j.jar log4j-1.2.8.jar pullparser.jar wsdl4j-1.4.jar xbean.jar xercesImpl.jar xml-apis.jar Manual de configuración del entorno de desarrollo 17/06/2009 Página 33 de 33