Ejemplo Fusion_Documentos FRAMEWORK JAVA 2.1 IcmXFusionWord Versión 1.2 Aplicación de ejemplo fusion_documentos JULIO 2007 Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 1 Ejemplo Fusion_Documentos FRAMEWORK JAVA 2.1 1 TABLA DE CONTENIDO 1 TABLA DE CONTENIDO.................................................................................................2 2 DESCRIPCIÓN DEL PROYECTO ...................................................................................3 3 2.1 El ActiveX...........................................................................................................................3 2.2 El ejemplo ..........................................................................................................................3 ENTORNO TECNOLÓGICO DEL SISTEMA...................................................................4 3.1 4 Entorno operativo..............................................................................................................4 DESCOMPOSICIÓN EN MÓDULOS...............................................................................5 4.1 Diagrama de clases ...........................................................................................................5 4.2 Paquete fusion_documentos.controlador .......................................................................5 4.3 Paquete fusion_documentos. acciones...........................................................................6 4.4 Paquete fusion_documentos. bean .................................................................................7 4.5 Paquete fusion_documentos.modelo ..............................................................................8 5 FICHERO DE CONFIGURACIÓN ...................................................................................9 6 JSP del ActiveX ............................................................................................................11 7 RESUMEN .....................................................................................................................13 7.1 Como incluir la fusión de documentos en un proyecto J2EE ...................................... 13 7.2 Como incluir la fusión de documentos en un proyecto Forms.................................... 14 Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 2 Ejemplo Fusion_Documentos 2 FRAMEWORK JAVA 2.1 DESCRIPCIÓN DEL PROYECTO 2.1 El ActiveX El ActiveX IcmXFusionWord permite fusión de datos en un fichero de MS Word. Una vez fusionado el documento, permite salvarlo en base de datos para su posterior revisión. A partir de la versión 1.5.0.0 (Julio 2007) permite también crear y guardar de un documento PDF a partir de el documento Word editado. El ActiveX recoge a través de un parámetro propio el contenido en base 64 de un fichero zip, el cual contiene el/los ficheros/ dbf que contienen los datos, el fichero doc y un fichero de texto donde se le indican las opciones de fusión. Al fichero zip lo denominaremos fichero W2Z, al fichero de texto lo denominaremos INI. El ActiveX permite las siguientes operaciones: V E I VS ES IS Q QS E_PDF ES_PDF Visualizar un documento fusionado. Editar un documento y guardarlo en BD. Imprimir un documento sin visualizarlo. Visualizar un documento previamente guardado en BD. Editar un documento previamente guardado en BD. Imprimir un documento previamente guardado en BD. Visualizar un documento en modo de sólo lectura. Visualizar un documento guardado en BD en modo de sólo lectura. Editar un documento y crear un pdf Editar un documento salvado y crear un pdf Es el servlet el que indica el tipo de operación a realizar cuando construye el fichero w2z. El fichero INI, es un fichero de configuración que contiene información de los ficheros a imprimir, número de copias y tipo de ordenación. Un ejemplo de fichero INI: [INFO] FORMULARIO=LAUDD029.doc DATOS=RXUTQZ.dbf OPERACION=Q COPIAS=1 2.2 El ejemplo El ejemplo suministrado es un proyecto Java donde se utiliza el ActiveX. Las plantillas de word y los datos que se fusionan en ellas se encuentran Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 3 Ejemplo Fusion_Documentos FRAMEWORK JAVA 2.1 almacenados en dos tablas de oracle: FUSI_DOC_PLANTILLA y FUSI_DATOS_FORMULARIO. Los documentos salvados una vez fusionados se almacenan en FUSI_DOC_SALVADOS. Éste modelo de datos ha sido creado ad hoc para el ejemplo, por lo que a la hora de utilizar el ActiveX en una aplicación, habrá que adaptar el ejemplo al modelo particular de cada aplicación. 3 ENTORNO TECNOLÓGICO DEL SISTEMA 3.1 Entorno operativo Servidor de aplicaciones: oc4j El siguiente diagrama muestra la arquitectura del desarrollo: Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 4 Ejemplo Fusion_Documentos 4 FRAMEWORK JAVA 2.1 DESCOMPOSICIÓN EN MÓDULOS La aplicación sigue el patrón MVC, utilizado en el framework 2.1. 4.1 Diagrama de clases A continuación se muestra el diagrama de clases. IcmXFusionWord - Diagrama de Clases 4.2 Paquete fusion_documentos.controlador En este paquete se aloja la clase Controlador. Ésta clase se encarga de procesar todas las peticiones de los clientes de la aplicación. La clase Controlador hereda de la clase ControladorPublico, perteneciente a las librerías genéricas que constituyen la arquitectura proporcionada por ICM para el desarrollo de aplicaciones J2EE. Nombre: Controlador Funcionalidad: Procesa las peticiones de los clientes. Métodos Nombre Tipo Definición Controlador Constructor Constructor por defecto Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 5 Ejemplo Fusion_Documentos FRAMEWORK JAVA 2.1 4.3 Paquete fusion_documentos. acciones En éste paquete se alojan las acciones TrataTRB, GuardarBD y AbreActiveX. Nombre: TrataTRB Funcionalidad: Es la acción encargada de generar el fichero w2z. Después carga una jsp que a su vez hace una petición a la acción AbreActiveX Jsp: blanca.jsp Métodos Nombre Tipo Definición TrataTRB Constructor Constructor por defecto procesar public String Método principal de la clase. Nombre: GuardarBD Funcionalidad: Es la acción encargada de almacenar en Oracle un documento ya fusionado. Jsp:documento_salvado.jsp Métodos Nombre GuardarBD procesar decodificaFichero Tipo Constructor public String private byte[] Definición Constructor por defecto Método principal de la clase. Decodifica de base 64 a array de bytes el fichero a salvar. Nombre: AbreActiveX Funcionalidad: La acción AbreActiveX se encarga de codificar el fichero W2Z en base 64 y establecer el resto de atributos del bean ActiveXBean; éste bean se establecerá como parámetro a la jsp donde está incrustado el ActiveX. Jsp: AbreActiveX.jsp Métodos Nombre Tipo Definición AbreActiveX Constructor Constructor por defecto procesar public String Método principal de la clase. Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 6 Ejemplo Fusion_Documentos FRAMEWORK JAVA 2.1 4.4 Paquete fusion_documentos. bean En éste paquete se alojan los beans utilizados en la aplicación. Nombre: FicheroW2Z Descripción: Clase abstracta que contiene datos relativos al tipo de fusión que se va a realizar, fichero dbf, nombre del fichero doc, número de copias... Es una clase abstracta. Atributos Nombre codigo Tipo String Definición Código de la plantilla doc en base de datos operacion String Tipo de operación (Visualizar, Imprimir,…). numCopias String Número de copias a imprimir nombreDBF String Nombre de la tabla dbf a utilizar nombreDOC String Nombre temporal del fichero DOC nombreW2Z String Nombre temporal del fichero W2Z descargaDocDAO DescargaDocumentoDAO DAO para realizar las tareas de descarga de documentos. Métodos Nombre generaW2Z Tipo public abstract void generaINI protected abstract void descargaDocumento protected abstract void borrarFicherosZipeados protected void guardarFicheroHD protected void Definición Método abstracto para generar el zip. Método abstracto para generar el ini. Método abstracto para descargar el documento. Eliminar los documentos después de añadirlos al zip. Guarda en disco el fichero descargado. Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 7 Ejemplo Fusion_Documentos FRAMEWORK JAVA 2.1 Nombre: FicheroW2ZFusion Descripción: Generalización de FicheroW2Z que representa un fichero W2Z cuyo origen es la una fusióna de datos. Métodos Nombre generaW2Z generaINI descargaDocumento Tipo public void protected void protected void Definición Generar el W2Z. Generar el ini. Descargar el documento. Nombre: FicheroW2ZSalvado Descripción: Generalización de FicheroW2Z que representa un fichero W2Z cuyo origen es un documento previamente fusionado y almacenado en base de datos. Métodos Nombre generaW2Z generaINI descargaDocumento Tipo public void protected void protected void Definición Generar el W2Z. Generar el ini. Descargar el documento. Nombre: ActiveXBean Descripción: Bean que contiene la información de versión y url de descarga del activex así como el contenido del fichero w2z en base 64. Atributos Nombre codebase version nomFichero downB64 refDocumento Tipo String String String String String Definición URL del fichero IcmXFusionWord.cab Código de versión del fichero IcmXFusionWord.cab Nombre del fichero DOC. Contenido en base 64 del vichero W2Z Código del fichero en base de datos 4.5 Paquete fusion_documentos.modelo Nombre: DescargarDocumentoDAO Funcionalidad: La clase DescargarDocumentoDAO, realiza las operaciones de descargar de Oracle, la plantilla word (o un documento ya fusionado) y guardar en un dbf los datos a insertar en la misma. Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 8 Ejemplo Fusion_Documentos Métodos Nombre generaDBF obtenerPlantillaDOC FRAMEWORK JAVA 2.1 Tipo public void public byte[] obtenerDocumentoFusion Public byte[] Definición Descarga los datos de oracle a un dbf Descarga de oracle la plantilla DOC y la devuelve en un byte[] Descarga de oracle un documento previamente fusionado. Nombre: SalvarDocumentoDAO Funcionalidad: La clase SalvarDocumentoDAO, realiza la operacion de subir a Oracle, un documento fusionado. Métodos Nombre Tipo salvarDocumento public void 5 Definición Salva en Oracle el documento fusionado. FICHERO DE CONFIGURACIÓN ##################################################### # Grupo de variables constantes de una aplicacion # ##################################################### WEB_ROOT = http://icmweb01.icm.es/fusion_documentos WEB_HOME = /usr/aplic_ICM/prod/web/home8049/icm/fusion_documentos/fusion_documentos CHARACTER-ENCODING=ISO-8859-1 FICHERO_VISTAS = %WEB_HOME%/WEB-INF/conf/vistas.conf download.url = http://icmweb01.icm.es/download ############################ # Base de Datos # ############################ bd.url = jdbc:oracle:thin:@ICM21:1521:DENIVEL2 bd.usuario = dba_gat bd.clave = 009C4E09A412CF35 #Driver que va a usarse para crear las conexiones# bd.driver= oracle.jdbc.driver.OracleDriver #ATENCION! si se cambia el driver habra que poner las librerias necesarias en el ClassPath# #Timeout= tiempo maximo en minutos que una conexion puede permanecer activa# #Para desactivarlo basta con poner un 0# bd.timeout= 0 Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 9 Ejemplo Fusion_Documentos FRAMEWORK JAVA 2.1 ###################################### #Configuracion del Pool de Conexiones# ###################################### bd.pool.minConexiones=1 bd.pool.maxConexiones=3 bd.pool.maxEncolados=50 bd.pool.tiempoEsperaConexion=60000 bd.pool.recogerEstadisticas = false bd.pool.estadisticas.tempo=60000 bd.pool.estadisticas.directorioSnapshots=/usr/aplic_ICM/prod/web/temp/pdf bd.pool.estadisticas.urlSnapshots=http://icmweb01.icm.es/download bd.pool.timeout=20000 bd.pool.liberar=true ######################################################### # Variables de configuracion general de la aplicacion # ######################################################### aplicacion.usarBD=true aplicacion.nombre=BEGO aplicacion.paquete=fusion_documentos.acciones aplicacion.opcion.defecto=TrataHTML aplicacion.menu=/WEB-INF/conf/menu_aplicacion.xml aplicacion.usarMenu=false aplicacion.shutdown=true aplicacion.activeX.version=1,5,0,0 aplicacion.activeX.url=%WEB_ROOT%/ocx/IcmXFusionWord.cab aplicacion.directorio.temporal=/usr/aplic_ICM/prod/web/temp/pdf ######################################################## # Acciones comunes # ######################################################## ListaValoresJSP=sistemas.framework.acciones.comunes CalendarioJSP=sistemas.framework.acciones.comunes Calendario=sistemas.framework.acciones.comunes#CalendarioJSP Menu=sistemas.framework.acciones.comunes MuestraMenuAplicacion=sistemas.framework.acciones.comunes TrataHTML=sistemas.framework.acciones.comunes EjecutaIdMenu=sistemas.framework.acciones.comunes ConsultaEstadoPool = sistemas.conexiones ConsultaHistoricoEstadoPool = sistemas.conexiones ######################################################## # Definición del portal # ######################################################## portal.integrar = true portal.definicion = portal.xml portal.clase = sistemas.portal.generico.PortalGenerico Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 10 Ejemplo Fusion_Documentos FRAMEWORK JAVA 2.1 portal.clasesNoIntegrables=ListaValores;Calendario ################################################### # Variables para la configuracion de las trazas # ################################################### trazas.tipo=BRSLME trazas.minNivel=1 trazas.ficheroLog = /usr/aplic_ICM/prod/web/log/8049/fusion_documentos trazas.grabarLog=true trazas.fichero.banned= trazas.maxCaracteres=500 trazas.capturarSalidaEstandar=false ################################################# # Variables para la definicion del calendario # ################################################# calendario.tabla.festivos=CATA_FESTIVOS calendario.color.festivo=bgcolor=#EBEBEB calendario.color.laborable=bgcolor=#FFBB33 calendario.color.hoy=bgcolor=#FFDD33 calendario.anno.inicio=1980 calendario.anno.fin=2010 ############################ # Servidor Aplicaciones # ############################ aplicacion.servidorAplicaciones= ################################## # Variables para RemoteScripting # ################################## arbol.longitud_linea = 10 paginacion.tamano_agrupacion = 10 paginacion.paginas_mostrar = 10 paginacion.intervalo = 10 6 JSP del ActiveX A continuación se muestra la jsp que contiene el ActiveX. En el fichero vistas.conf es necesario añadir la linea que asocia el valor que devuelve el método AbreActiveX.procesar() con la JSP: icmx_fusiondoc = IcmXFusionDoc.jsp Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 11 Ejemplo Fusion_Documentos FRAMEWORK JAVA 2.1 <jsp:useBean id="actXBean" scope="request" class="fusion_documentos.bean.ActiveXBean" /> <jsp:useBean id="url_home" scope="request" class="java.lang.String" /> <TITLE>Fusión de documentos</TITLE> <p align="center"> <br><br><br><br><br> <OBJECT classid="clsid:F07FE7D6-6426-4D87-B629-43BE1F3583AF" codebase="<%=actXBean.getCodebase()%>#version=<%=actXBean.getVersion()%>" id="IIcmX" width=253 height=18 align=center hspace=0 height=1> <PARAM NAME="DownB64" VALUE="<%=actXBean.getDown64()%>"> <param name="AxBorderStyle" value="0"> </OBJECT> <SCRIPT EVENT="OnFinalizado" FOR="IIcmX"> <!-// window.close(); --> </SCRIPT> <SCRIPT EVENT="OnFinCodificacion" FOR="IIcmX"> document.forms[0].fich_b64.value = document.IIcmX.UpB64; document.forms[0].pdf_b64.value = document.IIcmX.UpPDF; alert("Se va a guardar el documento, por favor espere..."); volverAInicio = false; document.forms[0].submit(); </SCRIPT> <SCRIPT> // ejecutar OCX cuando esté cargado function EjecutarOCX(){ while (document.readyState != 'complete'){ setTimeout("EjecutarOCX()", 500); return; } //IIcmX.ComprobarDlls(); if(IIcmX.DllStatus == "ERROR"){ alert(IIcmX.DllErrorMsg+" Consulte con su operador para la actualización."); window.close(); }else{ volverAInicio=true; IIcmX.Fusion(); if (volverAInicio) window.location="<%=url_home%>"; } } </SCRIPT> <body bgcolor="#ffffff" scroll="no" onload="EjecutarOCX()"> Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 12 Ejemplo Fusion_Documentos FRAMEWORK JAVA 2.1 <!--br><br><br><br><br><br><br><br><br> <HR--> </p> <form method="POST" action="GuardarBD.icm"> <input type="hidden" name="fich_b64" value="fichero modificado en b64"> <input type="hidden" name="pdf_b64" value="fichero pdf en b64"> <input type="hidden" name="nom_fich" value="<%=actXBean.getNomFichero()%>"> <input type="hidden" name="IDDOC" value="<%=actXBean.getRefDocumento()%>"> </form> <!--HR--> <br><br> 7 RESUMEN 7.1 Como incluir la fusión de documentos en un proyecto J2EE Incluir un directorio ocx con el fichero IcmXFusionWord.cab al mismo nivel que el directorio WEB-INF. Incluir la página IcmXFusionWord.jsp. Incluir en el fichero vistas.conf las lineas icmx_fusiondoc = IcmXFusionDoc.jsp blanca = blanca.jsp guardarbd=documento_salvado.jsp Incluir todas las clases java, salvo Controlador.java. Es necesario modificar las clases DescargarDocumentoDAO y SalvarDocumentoDAO, ya que éstas clases acceden a unas tablas de ejemplo. Es necesario, por tanto, cambiar dichas tablas por las que use la aplicación. Las tablas utilizadas en el ejemplo suministrado son como tal, tablas ejemplo, y todas ellas han de ser modificadas por tablas propias de la aplicación, son las siguientes y con el siguiente contenido: FUSI_DATOS_FORMULARIO: Ésta tabla contiene los datos a fusionar (sobre la que se realiza la consulta para la obtención del fichero .dbf) FUSI_DOC_PLANTILLA: Ésta tabla contiene las plantillas (formularios .doc comprimidos) FUSI_DOC_SALVADOS: Ésta tabla contiene los documentos salvados Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 13 Ejemplo Fusion_Documentos FRAMEWORK JAVA 2.1 resultantes de la fusión (no todas las aplicaciones necesitarán salvar los documentos generados, esto depende del requisito funcional). Son necesarias las siguientes páginas o IcmXFusionWord.jsp o dlanca.jsp o documento_salvado.jsp Utilizar el ActiveX suministrado: IcmXFusionWord.cab, para lo cual se han de incluir en el fichero de configuración las siguientes entradas: o aplicación.activeX.version=1,5,0,0 o aplicación.activeX.url=%WEB_ROOT%/ocx/IcmXFusionWord.cab 7.2 Como incluir la fusión de documentos en un proyecto Forms En el caso de necesitar utilizar el activex desde una aplicación Forms vale el ejemplo tal cual está (con las modificaciones pertinentes de las tablas de oracle). Hay que realizar una petición a la acción TrataTRB.icm añadiendo los campos de formulario “DOCUMENTO” y “OPERACION”, que contienen el identificador del documento y la operación a realizar. Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 14