Vous êtes sur la page 1sur 15

Uso de CrystalReports 10 en Java

USO DE CRYSTALREPORTS 10 EN JAVA Versin 1.0


Agosto 2007

rea de Integracin y Arquitectura de Aplicaciones Direccin de Anlisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdireccin General de Desarrollo, Tecnologa e Infraestructuras

Pgina: 1

Uso de CrystalReports 10 en Java

INDICE 1 2 3 4 INTRODUCCION.................................................................................................... 3 CREACIN DEL INFORME .................................................................................. 4 LIBRERA CrystalReports2_0................................................................................. 7 CrystalReportAccion ................................................................................................ 7 4.1 Ejemplo genrico.............................................................................................. 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 LIBRERA CrystalReportsWS............................................................................... 12 6 CrystalReportWSAccion ........................................................................................ 12 6.1 Ejemplo genrico............................................................................................ 14

rea de Integracin y Arquitectura de Aplicaciones Direccin de Anlisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdireccin General de Desarrollo, Tecnologa e Infraestructuras

Pgina: 2

Uso de CrystalReports 10 en Java

INTRODUCCION

Desde java podemos acceder a los reports creados en CrystalReports 10. Tenemos dos opciones: Invocar directamente el informe desde java. De esta forma podemos obtener informes en los siguientes formatos: 1. PDF 2. RTF 3. HTML En este caso el informe se va a encontrar dentro de la web de java y se har uso de la librera CrystalReports2_0. Llamar desde java a un Webservice de Delphi que genera el informe. De esta forma podemos obtener informes en los siguientes formatos: 1. PDF 2. DOC (Word) 3. 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 librera CrystalReportsWS.

En ambos casos es necesario que se incluya el fichero redireccion.jsp en el directorio WEBINF/jsp de la aplicacin. Desde una aplicacin solo se debera utilizar una nica forma de generar los informes o mediante la llamada al webservice o mediante la invocacin directa desde java.

rea de Integracin y Arquitectura de Aplicaciones Direccin de Anlisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdireccin General de Desarrollo, Tecnologa e Infraestructuras

Pgina: 3

Uso de CrystalReports 10 en Java

CREACIN DEL INFORME

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 intalacin y cuando se complete ya se puede hacer un report contra el driver JDBC. Adems es necesario editar un fichero de configuracin en el directorio C:\Archivos de programa\Archivos comunes\Crystal Decisions\2.5\bin, El fichero se llama CRDB_JavaServer.ini
[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 instalacin. Este fichero contiene los drivers de jdbc para oracle.
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}

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

rea de Integracin y Arquitectura de Aplicaciones Direccin de Anlisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdireccin General de Desarrollo, Tecnologa e Infraestructuras

Pgina: 4

Uso de CrystalReports 10 en Java

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 librera CrystalReports2_0 debemos elegir JDBC (JNDI) y al pulsar el signo + nos mostrar una ventana con la informacin de la conexin JDBC.

rea de Integracin y Arquitectura de Aplicaciones Direccin de Anlisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdireccin General de Desarrollo, Tecnologa e Infraestructuras

Pgina: 5

Uso de CrystalReports 10 en Java

En esta ventana podemos modificar el parmetro URL de conexin y actualizarlo con nuestra base de datos. Al pulsar el botn 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 el caso en el que se utilice la librera 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 informacin de la conexin.

rea de Integracin y Arquitectura de Aplicaciones Direccin de Anlisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdireccin General de Desarrollo, Tecnologa e Infraestructuras

Pgina: 6

Uso de CrystalReports 10 en Java

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.

LIBRERA CrystalReports2_0

Esta librera contiene las siguientes clases pblicas para tratamiento de reports solamente desde Java: CrystalReportAccion: A partir de los atributos del request ejecuta el report correspondiente. CrystalReportBean: Bean con informacin del report y mtodos para exportarlo a los distintos formatos soportados: PDF y RTF .

Con la clase accin anterior se podra ejecutar un informe directamente o bien podramos heredar de ella y modificarla para lo que no se pudiera realizar directamente.

CrystalReportAccion

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 parmetros del request son: REPORT: Nombre del report.

rea de Integracin y Arquitectura de Aplicaciones Direccin de Anlisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdireccin General de Desarrollo, Tecnologa e Infraestructuras

Pgina: 7

Uso de CrystalReports 10 en Java

PARAMETROS: Parmetros del report en forma de campo=valor y si vienen varios, cada uno en una lnea. 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 ejecucin del report que puede ser: 1. PDF 2. RTF 3. HTML

Los reports se deben encontrar en un directorio dentro del web de nuestra aplicacin por debajo del directorio WEB_INF. Este directorio se especifica en el fichero de configuracin de la aplicacin en la propiedad reports.directorio = WEB_INF/reports. Por otra parte para que el Controlador encuentre la clase CrystalReportAccion hay que ponerla en el fichero de configuracin de la siguiente forma: CrystalReportAccion = crystalreports.acciones Si en la aplicacin se est haciendo uso del datasource de Oracle para acceder a la base de datos hay que incluir en el fichero de configuracin los parmetros bd.usuario y bd.clave con sus valores correspondientes dado que sern requeridos por la librera CrystalReports2_0 cuando sta vaya a generar los informes. Se tendr que incluir el fichero redireccion.jsp en el directorio WEB-INF/jsp de la aplicacin.

4.1

Ejemplo genrico

A continuacin se muestra un ejemplo de llamada a la Accion CrystalReportAccion desde una pgina jsp:
<jsp:useBean id="report" scope="request" class="java.lang.String" /> <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">Generacin de report genrica</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>

rea de Integracin y Arquitectura de Aplicaciones Direccin de Anlisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdireccin General de Desarrollo, Tecnologa e Infraestructuras

Pgina: 8

Uso de CrystalReports 10 en Java

<p>&nbsp; <input type="text" name="REPORT" value="<%=report%>" size="47"> </p> </blockquote> </td> </tr> <tr> <td width="100%" bgcolor="#FFFFCC"> <b>Parmetros del informe: </b> <p> Si el informe tiene parmetros 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 parmetros se pondr cada uno en una lnea </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")> &nbsp;&nbsp; <input type="reset" value="Restablecer" name="B2"> </td> </tr> </table> </form> </BODY> </HTML>

4.2

EJEMPLOS CONCRETOS

A continuacin se muestran unos ejemplos concretos en los que se conoce a priori el tipo de salida, el nombre del fichero o los parmetros.

4.2.1

EjemploCR_PDF

En este caso se genera un fichero PDF para el report aplicacin_1.rpt

rea de Integracin y Arquitectura de Aplicaciones Direccin de Anlisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdireccin General de Desarrollo, Tecnologa e Infraestructuras

Pgina: 9

Uso de CrystalReports 10 en Java

package report.acciones; import sistemas.framework.excepciones.AccionException; import crystalreports.acciones.CrystalReportAccion; import crystalreports.beans.CrystalReportBean; public class EjemploCR_PDF extends CrystalReportAccion { public EjemploCR_PDF () { } /** * 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(); } //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 parmetro reports.directorio" + " en el fichero de configuracin"); } String report = "/"+ directorio + "/aplicacion_1.rpt"; crBean.setReport(report); crBean.setTipo_salida(CrystalReportBean.SALIDA_PDF); return crBean; } }

4.2.2

EjemploCR_HTML

En este caso se genera una pgina HTML para el report aplicacin_1.rpt


package report.acciones; import sistemas.framework.excepciones.AccionException; import crystalreports.acciones.CrystalReportAccion; import crystalreports.beans.CrystalReportBean; public class EjemploCR_HTML extends 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 parmetro reports.directorio" + " en el fichero de configuracin"); } String report = "/" + directorio + "/aplicacion_1.rpt";

rea de Integracin y Arquitectura de Aplicaciones Direccin de Anlisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdireccin General de Desarrollo, Tecnologa e Infraestructuras

Pgina: 10

Uso de CrystalReports 10 en Java

crBean.setReport(report); crBean.setTipo_salida(CrystalReportBean.SALIDA_HTML); return crBean; } public EjemploCR_HTML () { } }

4.2.3

EjemploCR_RTF

Se genera un documento word (.rtf) para el report aplicacin_1.rpt


package report.acciones; import import import import crystalreports.acciones.CrystalReportAccion; crystalreports.beans.*; sistemas.framework.controlador.Controlador; sistemas.framework.excepciones.*;

public class EjemploCR_RTF extends CrystalReportAccion { protected CrystalReportBean leerDatosRequest(CrystalReportBean crBean) throws AccionException { //Se construye un crbean para un informe genrico crBean = new CrystalReportBean(); String directorio = null; try { directorio = sistemas.util.Config.get("reports.directorio"); } catch (Exception ex1) { throw new AccionException( "Se debe especificar el parmetro reports.directorio" + " en el fichero de configuracin"); } String report = "/" + directorio + "/aplicacion_1.rpt"; crBean.setReport(report); crBean.setTipo_salida(CrystalReportBean.SALIDA_RTF); crBean.exportarARTF(request, response, Controlador.getContexto()); return crBean; } 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 parmetros.
package report.acciones; import sistemas.framework.excepciones.AccionException; import crystalreports.acciones.CrystalReportAccion; import crystalreports.beans.CrystalReportBean;

rea de Integracin y Arquitectura de Aplicaciones Direccin de Anlisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdireccin General de Desarrollo, Tecnologa e Infraestructuras

Pgina: 11

Uso de CrystalReports 10 en Java

public class EjemploCR_Parametros extends 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 parmetro reports.directorio" + " en el fichero de configuracin"); } String report = "/" + directorio + "/param.rpt"; crBean.setReport(report); crBean.setTipo_salida(CrystalReportBean.SALIDA_PDF); //En el caso de que slo exista un parmetro se puede introducir como //un String //crBean.setParametros("codigo=BEGO"); //Si hay varios parmetros lo mejor es crear un objeto Properties //y llamara al mtodo setProperty para cada uno de los parmetros java.util.Properties par = new java.util.Properties(); par.setProperty("codigo", "BEGO"); crBean.setParametros(par); return crBean; } public EjemploCR_Parametros () { } }

LIBRERA CrystalReportsWS

Esta librera contiene las siguientes clases pblicas 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 aplicacin java y lo visualiza. CrystalReportWSBean: Bean con informacin del report necesaria para el webservice.

Con la clase accin anterior se podra ejecutar un informe directamente o bien podramos heredar de ella y modificarla para lo que no se pudiera realizar directamente.

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 parmetros del request son: REPORT: Nombre del report
rea de Integracin y Arquitectura de Aplicaciones Direccin de Anlisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdireccin General de Desarrollo, Tecnologa e Infraestructuras Pgina: 12

Uso de CrystalReports 10 en Java

PARAMETROS: Valores de los parametros del report separados por puntos y coma, estos valores se estableceran de forma secuencial segn le llegan al webservice. En el caso en el que el informe contenga un subinforme con parmetros el webservice requerir el valor de todos los parmetros del informe incluidos los del subinforme aunque estos se encuentren vinculados a parmetros del informe principal. TIPO_SALIDA: Tipo de ejecucin del report que puede ser: o PDF o WORD o EXCEL SALIDA: Fichero de salida, debe tener la extensin 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 cdigo de la aplicacin. Este directorio se especifica en el fichero de configuracin de la aplicacin 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 configuracin de la siguiente forma: CrystalReportWSAccion = crystalreports.acciones Si en la aplicacin se est haciendo uso del datasource de Oracle para acceder a la base de datos hay que incluir en el fichero de configuracin los parmetros bd.usuario y bd.clave con sus valores correspondientes dado que sern requeridos por la librera CrystalReportsWS cuando sta vaya a generar los informes. Otras variables de configuracin que hay que especificar son: Nombre variable Descripcin Valor de ejemplo Nombre variable Descripcin Valor de ejemplo Nombre variable Descripcin Valor de ejemplo Nombre variable Descripcin Valor de ejemplo Nombre variable Descripcin Valor de ejemplo
crystalreportsws.webservice Ruta hasta el WebService http://nticmdes09.icm.es/webservices/cgi-bin/wscreport.exe/soap/IWSCR crystalreportsws.nombreServidorRemoto 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 aplicacin 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 cdigo de la aplicacin. 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

rea de Integracin y Arquitectura de Aplicaciones Direccin de Anlisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdireccin General de Desarrollo, Tecnologa e Infraestructuras

Pgina: 13

Uso de CrystalReports 10 en Java

Nombre variable Descripcin Valor de ejemplo Nombre variable Descripcin

crystalreportsws.rutaFicherosTemporales Ruta fsica donde se guardarn los resultados de los informes en la mquina en la que se esta ejecutando la aplicacin 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 produccin se debera usar la aplicacin 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 sern las mismas que con las que se conecta la aplicacin icm21_denivel2

Valor de ejemplo Nombre variable Descripcin Valor de ejemplo

Se tendr que incluir el fichero redireccion.jsp en el directorio WEB-INF/jsp de la aplicacin.

6.1

Ejemplo genrico

A continuacin se muestra un ejemplo de llamada a la Accion InvocaWebService que extiende de CrystalReportWSAccion desde una pgina htm: <html><head><title>Pgina 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 exportacin</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>
rea de Integracin y Arquitectura de Aplicaciones Direccin de Anlisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdireccin General de Desarrollo, Tecnologa e Infraestructuras Pgina: 14

Uso de CrystalReports 10 en Java

</font><span lang="es"><font face="Arial" size="2"> 1.rpt = report normal rtf<br> 2.rpt = report con parmetro (indicar un nmero de 1 a 4)</font></span></td> </tr> <tr> <td align="center" width="20%"><span lang="es"> <font face="Arial" size="2">Parmetros 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> </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; } }

rea de Integracin y Arquitectura de Aplicaciones Direccin de Anlisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdireccin General de Desarrollo, Tecnologa e Infraestructuras

Pgina: 15

Vous aimerez peut-être aussi