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>&nbsp;<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>&nbsp;</td>
</tr>
<tr>
<td width="100%">
<input type="submit" value="Ejecutar" name="generar"
onclick=enviarFormulario("CrystalReportAccion.icm")>&nbsp;&nbsp;
<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;</td>
</tr>
<tr>
<td width="100%">
<input type="submit" value="Ejecutar" name="generar"
onclick=enviarFormulario("CrystalReportXMLAccion.icm")>&nbsp;&nbsp;
<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