Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Agosto 2007
INDICE
1 INTRODUCCION.................................................................................................... 3
2 CREACIÓN DEL INFORME .................................................................................. 4
3 LIBRERÍA CrystalReports2_0................................................................................. 7
4 CrystalReportAccion ................................................................................................ 7
4.1 Ejemplo genérico.............................................................................................. 8
4.2 EJEMPLOS CONCRETOS.............................................................................. 9
4.2.1 EjemploCR_PDF ...................................................................................... 9
4.2.2 EjemploCR_HTML ................................................................................ 10
4.2.3 EjemploCR_RTF .................................................................................... 11
4.2.4 EjemploCR_Parametros ......................................................................... 11
5 LIBRERÍA CrystalReportsWS............................................................................... 12
6 CrystalReportWSAccion ........................................................................................ 12
6.1 Ejemplo genérico............................................................................................ 14
1 INTRODUCCION
Desde java podemos acceder a los reports creados en CrystalReports 10. Tenemos dos
opciones:
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.
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.
Crystal Reports no viene con un driver JDBC para desarrollar reports con JDBC.
Hay que descargar el fichero InstallNewDriversv10.zip descomprimirlo y ejecutar la intalación y
cuando se complete ya se puede hacer un report contra el driver JDBC.
[Common]
PATH = C:\Producto\JavaSoft\j2sdk1.4.2_04\jre\bin
CLASSPATH = "C:\Archivos de programa\Archivos comunes\Crystal
Decisions\2.5\bin\CRDBJAVAServer.jar;C:\Archivos de programa\Archivos comunes\Crystal
Decisions\2.5\java\lib\jdbc\ojdbc14.jar";${CLASSPATH}
IORFileLocation = d:/temporal
JavaServerTimeout = 1800
JVMMaxHeap = 64000000
JVMMinHeap = 32000000
[CRDB_JDBC]
CacheRowSetSize = 100
JDBCURL = jdbc:oracle:thin:@icm21:1521:denivel2
JNDIURL =
JDBCUserName =
JDBCDriverName = oracle.jdbc.driver.OracleDriver
JNDIUserName =
JNDIConnectionFactory =
JNDIInitContext = java:/comp.env.jdbc
GenericJDBCDriverBehavior = Oracle
[CRDB_XML]
PREREADNBYTE = 5000
CacheRowSetSize = 100
XMLLOCALURL =
SCHEMALOCALURL =
XMLHTTPURL =
SCHEMAHTTPURL =
USETEMPFile = TRUE
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.
PATH = C:\Producto\JavaSoft\j2sdk1.4.2_04\jre\bin
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 CrystalReports2_0 debemos elegir JDBC (JNDI) y al pulsar el
signo ‘+’ nos mostrará una ventana con la información de la conexión JDBC.
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.
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.
3 LIBRERÍA CrystalReports2_0
Esta librería contiene las siguientes clases públicas para tratamiento de reports solamente
desde Java:
• CrystalReportBean: Bean con información del report y métodos para exportarlo a los
distintos formatos soportados: PDF y RTF .
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.
4 CrystalReportAccion
Los reports se deben encontrar en un directorio dentro del web de nuestra aplicación por
debajo del directorio WEB_INF.
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
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 CrystalReports2_0
cuando ésta vaya a generar los informes.
<HTML>
<HEAD>
<TITLE>Genera Report</TITLE>
<SCRIPT>
function enviarFormulario(destino){
document.formulario.action = destino;
document.formulario.submit();
}
</SCRIPT>
<!--mstheme-->
<link rel="stylesheet" type="text/css"
href="../../_themes/portaldesarrollo/port1110.css">
<meta name="Microsoft Theme" content="portaldesarrollo 1110, default">
</HEAD>
<BODY>
<p style="text-align: center">
<font size="4" color="#800000">Generación de report genérica</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">
</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>
</p>
</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>
</BODY>
</HTML>
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.
4.2.1 EjemploCR_PDF
package report.acciones;
import sistemas.framework.excepciones.AccionException;
import crystalreports.acciones.CrystalReportAccion;
import crystalreports.beans.CrystalReportBean;
/**
* 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.
* @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();
}
crBean.setReport(report);
crBean.setTipo_salida(CrystalReportBean.SALIDA_PDF);
return crBean;
}
}
4.2.2 EjemploCR_HTML
package report.acciones;
import sistemas.framework.excepciones.AccionException;
import crystalreports.acciones.CrystalReportAccion;
import crystalreports.beans.CrystalReportBean;
crBean.setReport(report);
crBean.setTipo_salida(CrystalReportBean.SALIDA_HTML);
return crBean;
}
public EjemploCR_HTML () {
}
4.2.3 EjemploCR_RTF
package report.acciones;
import crystalreports.acciones.CrystalReportAccion;
import crystalreports.beans.*;
import sistemas.framework.controlador.Controlador;
import sistemas.framework.excepciones.*;
crBean.setReport(report);
crBean.setTipo_salida(CrystalReportBean.SALIDA_RTF);
public EjemploCR_RTF () {
}
}
4.2.4 EjemploCR_Parametros
En este caso se genera un fichero PDF para el report param.rpt, al que se le pasan
parámetros.
package report.acciones;
import sistemas.framework.excepciones.AccionException;
import crystalreports.acciones.CrystalReportAccion;
import crystalreports.beans.CrystalReportBean;
crBean.setReport(report);
crBean.setTipo_salida(CrystalReportBean.SALIDA_PDF);
public EjemploCR_Parametros () {
}
}
5 LIBRERÍA CrystalReportsWS
Esta librería contiene las siguientes clases públicas para tratamiento de reports accediendo al
WebService de Delphi:
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.
6 CrystalReportWSAccion
• 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.
• SALIDA: Fichero de salida, debe tener la extensión que concuerde con el tipo de
salida.
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
Por otra parte 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.
<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>
package report.acciones;
import sistemas.framework.excepciones.AccionException;
import crystalreports.acciones.CrystalReportWSAccion;
import crystalreports.beans.CrystalReportWSBean;
return crBean;
}
}