Vous êtes sur la page 1sur 6

Crystal Reports

ANEXO CRYSTAL REPORTS


Crystal Reports permite crear, administrar, distribuir y modificar el contenido de informes
corporativos as como su generacin dinmica desde un entorno J2EE mediante el
componente Java Reporting Component (JRC).
Siendo posiblemente el ms potente y ms utilizado diseador de informes, no se pretende dar
alcance en este documento a una descripcin de sus funcionalidades, si bien, si destacar que
en su ltima versin (Crystal Reports XI), trae un avance tecnolgico significativo, con la
posibilidad de crear informes de manera mas fcil, y con mantenimiento simplificado, adems
de una completa integracin con la plataforma BusinessObjects XI.
Las ventajas que incorpora son las siguientes, (vase crxi_WhatsNew_es.pdf):

Report Publishing Wizard: Permite la publicacin fcil de informes y otros contenidos


en la web. Esta caracterstica suministra una gua paso a paso para configurar y subir
contenido - incluyendo Crystal Reports, Crystal Analysis, Microsoft Office, PDF, y
archivos de textoa la web.

Zero-client User Interface: Provee a los usuarios finales acceso instantneo y seguro
a informes corporativos a travs de la web con una sola URL.

Report Scheduler: Ajuste de informes para generarse a horas especficas o basados


en eventos especficos. Tambin se puede programar informes para que se generen en
formatos especficos 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 bsquedas condicionales dentro de ellos. Los visores de ActiveX,
DHTML, y Java estn incluidos.

Opciones de Seguridad: Asegura que las personas indicadas tengan acceso a la


informacin 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 solucin sencilla, una operativa de
trabajo para evitar tener que modificar los informes cuando estos sean entregados y puestos en
produccin. Los orgenes de datos de los informes que se generen, debern recuperarse del
fichero de configuracin de la aplicacin, incorporndose estos al informe de manera dinmica.
Seguidamente se hace referencia a direcciones donde poder obtener una versin del producto,
manuales y ejemplos que ayuden a su utilizacin y como trabajar con el API java.
Pgina 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 diseador de informes
http://www.businessobjects.com/products/dev_zone/reporting/default.asp?ref=devzone_main
1.1

Instalacin y despliegue.

Crystal Reports

Para poder utilizar dicho componente habr que incluir en nuestra aplicacin los ficheros jar
con las libreras necesarias. Estos ficheros los podemos localizar tras la instalacin 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 libreras de la pgina de Crystal
Reports. Podemos encontrar dichas actualizaciones en el rea de soporte de la pgina web de
bussinesobjets.
w
La ltima actualizacin disponible cuando se realiz este documento puede descargarse desde
la siguiente direccin:
http://ftp1.businessobjects.com/outgoing/ehf/CE/XI/JRCpatch.zip.
Tambin hemos de copiar el directorio crystalreportviewers11 que se encuentra en Business
Objects\3.0 dentro del directorio raz de la aplicacin.
Una vez copiado debemos incluir las siguientes lneas 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).
Tambin 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 instalacin y configuracin de Crystal
Report XI.

Crystal Reports

1.2

Configuracin 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 evolucin de los entornos de desarrollo al de integracin, certificacin o
produccin. Sera poco efectivo y laborioso tener que editar todo el conjunto de plantillas de los
informes para cambiar las fuentes de datos cada vez que cambisemos de entorno.
As pues teniendo en cuenta que la fuente de datos usada a la hora de disear el informe ser
distinta a la fuente de datos que se usar en el entorno de produccin se recomienda el uso de
una conexin JDBC que modificaremos posteriormente en tiempo de ejecucin valindonos de
algn mecanismo como el que se propone seguidamente.
Primero configuraremos el fichero CRconfig.xml tanto en la instalacin de Crystal Reports como
en la copia que hemos hecho en nuestra aplicacin.
Para ello configuraremos los datos de nuestra conexin JDBC y aadiremos el jar del driver
JDBC en el Classpath. En este ejemplo vamos a configurar el acceso a una base de datos
MySQL.

Crystal Reports

Ahora generaremos nuestro informe creando una nueva conexin de tipo JDBC.

El asistente para el diseo del informe tomar los valores que hemos configurado en el fichero
CRconfig.xml.

Crystal Reports

Ahora nuestro informe contiene la informacin necesaria para conectarse a nuestra BD pero
necesitamos conectar con distintos servidores dependiendo del entorno de trabajo (desarrollo,
integracin, certificacin, produccin)
Para ello vamos a crear una clase OrigenDatos con un mtodo esttico que nos permita
cambiar esta conexin en tiempo de ejecucin.
public static void cambiar(DatabaseController databaseController) throws
ReportSDKException {
/*En una aplicacin real estos datos de conexin debern obtenerse del
fichero de configuracin.*/
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);
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 conexin.*/
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 mtodo esttico para cambiar la conexin a base de datos de
nuestro informe.

Crystal Reports

1.3

Visualizacin del informe en nuestra aplicacin

Tras estos pasos de configuracin podemos generar y visualizar informes Crystal Reports
desde nuestra aplicacin J2EE.
Para ello crearemos nuestro informe como se especifica en el punto anterior y copiaremos el
fichero .rpt en nuestra aplicacin J2EE (bajo el directorio WEB-INF/config/data).
Ahora podemos construir las pginas JSP que se encargarn de leer el fichero .rpt y visualizar
el resultado. Este fragmento de cdigo muestra dichas operaciones:
/*Leemos el fichero rpt.*/
ReportClientDocument oReportClientDocument = new ReportClientDocument();
oReportClientDocument.open(reportName, 0);
IReportSource reportSource = oReportClientDocument.getReportSource();
/*Cambiamos los datos de conexin.*/
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;