Documento 459409

Anuncio
Anexo Crystal Reports
ANEXO CRYSTAL REPORTS
Crystal Reports permite crear, administrar, distribuir y modificar el contenido de informes
corporativos así como su generación dinámica desde un entorno J2EE mediante el
componente Java Reporting Component (JRC).
Siendo posiblemente el más potente y más utilizado diseñador de informes, no se pretende dar
alcance en este documento a una descripción de sus funcionalidades, si bien, si destacar que
en su última versión (Crystal Reports XI), trae un avance tecnológico significativo, con la
posibilidad de crear informes de manera mas fácil, y con mantenimiento simplificado, además
de una completa integración con la plataforma BusinessObjects XI.
Las ventajas que incorpora son las siguientes, (véase crxi_WhatsNew_es.pdf):

Report Publishing Wizard: Permite la publicación fácil de informes y otros contenidos
en la web. Esta característica suministra una guía paso a paso para configurar y subir
contenido - incluyendo Crystal Reports, Crystal Analysis, Microsoft Office, PDF, y
archivos de texto—a la web.

Zero-client User Interface: Provee a los usuarios finales acceso instantáneo y seguro
a informes corporativos a través de la web con una sola URL.

Report Scheduler: Ajuste de informes para generarse a horas específicas o basados
en eventos específicos. También se puede programar informes para que se generen en
formatos específicos como XLS, PDF, y RTF.

Interactive report viewers: Aprovechamiento del la interactividad avanzada de los
informes en la web: imprimir, exportar y profundizar en cuadros y otros objetos de los
informes, y realizar búsquedas condicionales dentro de ellos. Los visores de ActiveX,
DHTML, y Java están incluidos.

Opciones de Seguridad: Asegura que las personas indicadas tengan acceso a la
información correcta y en el tiempo correcto. Crystal Reports Server XI incluye
opciones de seguridad robustas para usuarios, grupos y objetos.
Lo que si se pretende es definir en este documento es una solución sencilla, una operativa de
trabajo para evitar tener que modificar los informes cuando estos sean entregados y puestos en
producción. Los orígenes de datos de los informes que se generen, deberán recuperarse del
fichero de configuración de la aplicación, incorporándose estos al informe de manera dinámica.
Seguidamente se hace referencia a direcciones donde poder obtener una versión del producto,
manuales y ejemplos que ayuden a su utilización y como trabajar con el API java.
Página del producto
http://www.businessobjects.com/
Manuales y ejemplos de uso en entorno java
http://www.businessobjects.com/products/dev_zone/java/default.asp?ref=devzone_main
Manuales del diseñador de informes
http://www.businessobjects.com/products/dev_zone/reporting/default.asp?ref=devzone_main
Subdirección General de Desarrollo, Tecnología e Infraestructuras.
Página: 1
Anexo Crystal Reports
1.1
Instalación y despliegue.
Para poder utilizar dicho componente habrá que incluir en nuestra aplicación los ficheros jar
con las librerías necesarias. Estos ficheros los podemos localizar tras la instalación en las
siguientes rutas:
Business Objects\3.0\java\lib
Business Objects\3.0\java\lib\external.
Es conveniente descargar las últimas actualizaciones de estas librerías de la página de Crystal
Reports. Podemos encontrar dichas actualizaciones en el área de soporte de la página web de
bussinesobjets.
w
La última actualización disponible cuando se realizó este documento puede descargarse desde
la siguiente dirección:
http://ftp1.businessobjects.com/outgoing/ehf/CE/XI/JRCpatch.zip.
También hemos de copiar el directorio crystalreportviewers11 que se encuentra en Business
Objects\3.0 dentro del directorio raíz de la aplicación.
Una vez copiado debemos incluir las siguientes líneas en nuestro fichero web.xml:
<context-param>
<param-name>crystal_image_uri</param-name>
<param-value>crystalreportviewers11</param-value>
</context-param>
Por último hemos de copiar el fichero Business Objects\3.0\java\CRconfig.xml dentro de
nuestro directorio de fuentes java (en nuestro caso bajo /build/src/java).
También copiaremos el tld (que se encuentra en Crystal Decisions\3.0\java\lib\taglib) a nuestro
directorio de tlds (/WEB-INF/config/tld/) y configuraremos nuestro fichero web.xml si vamos a
hacer uso de las taglibs.
<taglib>
<taglib-uri>/crystal-tags-reportviewer.tld</taglib-uri>
<taglib-location>/WEB-INF/config/tld/crystal-tagsreportviewer.tld
</taglib-location>
</taglib>
Adjunto a este documento de incluye un fichero crxi_Install_es.pdf en castellano con todas las
recomendaciones para poder proceder a la correcta instalación y configuración de Crystal
Report XI.
Subdirección General de Desarrollo, Tecnología e Infraestructuras.
Página: 2
Anexo Crystal Reports
1.2
Configuración de las fuentes de datos.
Crystal Reports permite generar informes a partir de distintas fuentes de datos. Es habitual en
la secuencia de desarrollo del software que la fuente de datos que alimenta nuestro informe
cambie debido a la evolución de los entornos de desarrollo al de integración, certificación o
producción. Sería poco efectivo y laborioso tener que editar todo el conjunto de plantillas de los
informes para cambiar las fuentes de datos cada vez que cambiásemos de entorno.
Así pues teniendo en cuenta que la fuente de datos usada a la hora de diseñar el informe será
distinta a la fuente de datos que se usará en el entorno de producción se recomienda el uso de
una conexión JDBC que modificaremos posteriormente en tiempo de ejecución valiéndonos de
algún mecanismo como el que se propone seguidamente.
Primero configuraremos el fichero CRconfig.xml tanto en la instalación de Crystal Reports como
en la copia que hemos hecho en nuestra aplicación.
Para ello configuraremos los datos de nuestra conexión JDBC y añadiremos el jar del driver
JDBC en el Classpath. En este ejemplo vamos a configurar el acceso a una base de datos
MySQL.
Subdirección General de Desarrollo, Tecnología e Infraestructuras.
Página: 3
Anexo Crystal Reports
Ahora generaremos nuestro informe creando una nueva conexión de tipo JDBC.
El asistente para el diseño del informe tomará los valores que hemos configurado en el fichero
CRconfig.xml.
Subdirección General de Desarrollo, Tecnología e Infraestructuras.
Página: 4
Anexo Crystal Reports
Ahora nuestro informe contiene la información necesaria para conectarse a nuestra BD pero
necesitamos conectar con distintos servidores dependiendo del entorno de trabajo (desarrollo,
integración, certificación, producción…)
Para ello vamos a crear una clase OrigenDatos con un método estático que nos permita
cambiar esta conexión en tiempo de ejecución.
public static void cambiar(DatabaseController databaseController) throws
ReportSDKException {
/*En una aplicación real estos datos de conexión deberán obtenerse del
fichero de configuración.*/
String TABLE_NAME_QUALIFIER = "testdb.";
String DBUSERNAME = "root";
String DBPASSWORD = "";
String JDBCDRIVER = "org.gjt.mm.mysql.Driver";
String DATABASE_NAME = "testdb";
String SERVERNAME = "localhost/" + DATABASE_NAME;
String URLJDBC = "jdbc:mysql://"+ SERVERNAME;
String URI = “!"+JDBCDRIVER+"!"+URLJDBC+"!ServerType=29!QuoteChar=`";
String CONNECTION_STRING = "Use JDBC=b(true);ConnectionURL=s("+URLJDBC+");"+
"Database Class Name=s("+JDBCDRIVER+");" +
"JNDI Datasource Name=s();Server=s("+SERVERNAME+");"+
"User ID=s("+DBUSERNAME+");Password="+DBPASSWORD+";"+
"JDBC Connection String=s("+URI+");"+
"Generic JDBC Driver Behavior=s(No)";
String DATABASE_DLL = "crdb_jdbc.dll";
/*Creamos un objeto de propiedades para el informe.*/
PropertyBag propertyBag = new PropertyBag();
propertyBag.put("Trusted_Connection", "false");
propertyBag.put("Server Name", SERVERNAME);
propertyBag.put("Connection String", CONNECTION_STRING);
Subdirección General de Desarrollo, Tecnología e Infraestructuras.
Página: 5
Anexo Crystal Reports
propertyBag.put("Database Name", DATABASE_NAME);
propertyBag.put("Server Type", "JDBC (JNDI)");
propertyBag.put("URI", URI);
propertyBag.put("Use JDBC", "true");
propertyBag.put("Database DLL", DATABASE_DLL);
/*Recorremos las tablas usadas en nuestro informe y les cambiamos los
datos de conexión.*/
Tables tables = databaseController.getDatabase().getTables();
for (int i = 0; i < tables.size(); i++) {
ITable table = tables.getTable(i);
table.setName(table.getName());
table.setAlias(table.getAlias());
table.setQualifiedName(TABLE_NAME_QUALIFIER + table.getName());
IConnectionInfo connectionInfo = table.getConnectionInfo();
connectionInfo.setAttributes(propertyBag);
connectionInfo.setUserName(DBUSERNAME);
connectionInfo.setPassword(DBPASSWORD);
connectionInfo.setKind(ConnectionInfoKind.SQL);
table.setConnectionInfo(connectionInfo);
databaseController.setTableLocation(table, tables.getTable(i));
}
}
Ahora podremos usar este método estático para cambiar la conexión a base de datos de
nuestro informe.
Subdirección General de Desarrollo, Tecnología e Infraestructuras.
Página: 6
Anexo Crystal Reports
1.3
Visualización del informe en nuestra aplicación
Tras estos pasos de configuración podemos generar y visualizar informes Crystal Reports
desde nuestra aplicación J2EE.
Para ello crearemos nuestro informe como se especifica en el punto anterior y copiaremos el
fichero .rpt en nuestra aplicación J2EE (bajo el directorio WEB-INF/config/data).
Ahora podemos construir las páginas JSP que se encargarán de leer el fichero .rpt y visualizar
el resultado. Este fragmento de código muestra dichas operaciones:
/*Leemos el fichero rpt.*/
ReportClientDocument oReportClientDocument = new ReportClientDocument();
oReportClientDocument.open(reportName, 0);
IReportSource reportSource = oReportClientDocument.getReportSource();
/*Cambiamos los datos de conexión.*/
OrigenDatos.cambiar(oReportClientDocument.getDatabaseController());
/*Inicializamos el visualizador de informes.*/
CrystalReportViewer oCrystalReportViewer = new CrystalReportViewer();
oCrystalReportViewer.setReportSource(reportSource);
oCrystalReportViewer.setOwnPage(true);
oCrystalReportViewer.setOwnForm(true);
oCrystalReportViewer.setHasPrintButton(false);
oCrystalReportViewer.setHasExportButton(false);
oCrystalReportViewer.refresh();
/*Mostramos el informe.*/
oCrystalReportViewer.processHttpRequest(request, response,
getServletConfig().getServletContext(), out);
oCrystalReportViewer.dispose();
oCrystalReportViewer=null;
Acción de Struts (ej: VerInforme.do?nombreInforme=Informe.rpt)
Cargar en Memoria
Informe.rpt
JSP
Cambiar origen de
datos del informe
Instanciamos el visor
de crystal reports
Crystal Report
VIewer
Datos Informe
Subdirección General de Desarrollo, Tecnología e Infraestructuras.
Base de
Datos
Página: 7
Documentos relacionados
Descargar