A Luisma, Javi, Marce y a toda la gente de la GIS Cueva, en especial a Dani y Zaka, por su inestimable ayuda. A mis padres, por su esfuerzo y paciencia para hacer esto posible. Web Document Store and Printing WEB DOCUMENT STORE AND PRINTING Autor: Egido Cortés, Miguel. Director: Calvo Díez, Luis Manuel. Entidad colaboradora: Fractalia Remote Systems, S.L. RESUMEN Existen hoy en día dos tendencias que se manifiestan visiblemente, como son la tendencia a utilizar soportes digitales en lugar de papel para el manejo de la información y el crecimiento del número de instalaciones que proporcionan acceso público a Internet y de sus usuarios. Sin embargo ambas presentan ciertas limitaciones. Por un lado, el papel como soporte es en muchas ocasiones necesario. Por otro, el carácter público impone restricciones respecto a los recursos físicos puestos a disposición de los usuarios. Existe también una vinculación clara entre ambos aspectos. Los usuarios de entornos de acceso público a Internet encuentran, con excesiva frecuencia, la limitación de no poder utilizar una impresora para plasmar en papel sus documentos en formato digital. Esta limitación viene impuesta en unos casos por la inexistencia de una impresora en el entorno de acceso público, y en otros por la incapacidad del gestor de la instalación para facturar el servicio, generalmente por no disponer de un sistema de control que lo justifique. El proyecto que se presenta a continuación consiste en la elaboración de un sistema que permita superar esta limitación. Esto es, salvando la necesidad obvia de existencia de la impresora en la instalación de acceso público, el sistema desarrollado permite a los usuarios utilizar la impresora cuando les sea necesaria, efectuando un control de los trabajos de impresión realizados, y estableciendo al i Web Document Store and Printing mismo tiempo un sistema mediante el cual los gestores de estas instalaciones pueden ofrecer y facturar el servicio de la misma manera que lo hacen con el resto de servicios ofrecidos. El sistema desarrollado está formado por varios componentes de distinta naturaleza. Por una parte, se ha elaborado un modelo de datos que permite la gestión de los datos persistentes del sistema. La base de datos resultante es utilizada tanto para el almacenamiento de los documentos de usuarios como para mantener un soporte estable de las propiedades necesarias para la gestión del sistema. Como abstracción a este modelo de datos se ha desarrollado también un servicio web, que representa un modo seguro, fiable y ubicuo de obtener acceso a los datos manejados. Este servicio es utilizado por el resto de componentes como interfaz con la base de datos. Por otro lado, se ha desarrollado un módulo consistente en un servicio Windows, que actúa de enlace entre el sistema desarrollado y el sistema operativo sobre el que se ejecuta. Este servicio realiza la monitorización y el control explícitos de los trabajos de impresión, y de sus propiedades, gestionados por el sistema operativo a petición del usuario. La parte visible del sistema consiste en un conjunto de páginas Web, las cuales representan el interfaz presentado al usuario, y mediante el cual se permite el acceso a todas las funcionalidades ofrecidas por el sistema. Esta interfaz está dividida en dos secciones. Una primera destinada al usuario final, con el objetivo de cubrir sus necesidades de impresión. La otra destinada a los explotadores del servicio, con el objetivo de cubrir sus necesidades de gestión del mismo. ii Web Document Store and Printing Por último, se ha desarrollado un pequeño servicio encargado de realizar un mantenimiento mínimo de la información manejada por el sistema. La labor principal de este componente es la eliminación de documentos considerados obsoletos para el sistema, para así limitar en lo posible los recursos de hardware de almacenamiento utilizados. En la siguiente memoria del proyecto se pueden ver reflejados los resultados del trabajo realizado para la construcción del sistema. Se comienza haciendo una breve presentación del proyecto, sus motivaciones y los recursos utilizados. Más tarde se muestran las definiciones formales del sistema a desarrollar, para después detallar la solución técnica adoptada. Detallando a continuación la planificación de trabajos seguida y así como una estimación de los costes vinculados al desarrollo del sistema, se concluye con un estudio de los resultados y una propuesta de posibles mejoras de funcionalidad futuras. iii Web Document Store and Printing ABSTRACT There are now two tendencies which manifest visibly, such as the trend of using digital media instead of paper for information management and the growth of the number of facilities, together with its users, providing public Internet access. However, both have certain limitations. On one hand, paper as a support is often necessary. On the other, the public nature imposes restrictions on the physical resources that can be put available to users. There is also a clear link between both aspects. Users of public access to the Internet environments find, too often, the limitation of not being able to use a printer in order to print into paper their digital documents. This limitation is imposed in some cases by the absence of a printer in the public access environment, and in others by the inability of the manager of the facility to bill the service, usually due to the lack of a control system that justifies it. The project presented below consists in the development of a system which allows overcoming this limitation. That is, saving the obvious needing for the existence of a printer in the public access environment, the developed system allows users to use the printer when it is necessary, carrying out a control of printing jobs performed, and establishing at the same time a system whereby the managers of these facilities can provide this service and bill it, doing it at the same way they do with other services. The developed system consists of multiple components of different nature. On one hand, a data model has been developed, which allows system persistent data to be managed. The resulting database is used for the storage of user documents as well as to maintain a stable support of properties needed to manage the system. iv Web Document Store and Printing As an abstraction to this data model, a web service has also been developed, which represents a safe, reliable and ubiquitous way for gaining access to managed data. This service is used by the other components as an interface with the database. On other hand, a module consisting of a Windows service has been developed, which acts as a link between the developed system and the operating system on which it runs. This service carries out the explicit monitoring and control of printing jobs, as well as of their properties, managed by the operating system to user request. The visible part of the system consists of a set of Web pages, which represent the interface presented to the user, and through which the access to every feature offered by the system is allowed. This interface is divided into two sections. One of them is reserved for the end user, with the aim of meeting their printing needs. The other reserved for the managers of the service, with the aim of meeting their needs for service management. Finally, a small service has been developed, which is in charge to perform minimal maintenance of the information handled by the system. The main task of this component is removing those documents considered already obsolete for the system, thereby limiting as possible the storage hardware resources used. Inside the next report of the project, the results of the work accomplished to build the system can be seen reflected. It begins with a brief presentation of the project, its motivations and the resources used. Later, it shows the formal definitions of the system to be developed and afterwards the detail of the technical solution adopted. Detailing then the followed work planning, as well as an estimation of the costs associated with system development, it concludes with a study of the results and a proposal of possible future functionality enhancements. v Web Document Store and Printing ÍNDICE 1. INTRODUCCIÓN ............................................................................................ 1 1.1. PRESENTACIÓN DEL PROYECTO ........................................................................... 2 1.2. MOTIVACIÓN ................................................................................................. 3 2. ESTADO DEL ARTE ........................................................................................ 6 2.1. RESPECTO DEL ALMACENAMIENTO TEMPORAL ........................................................ 7 2.2. RESPECTO DE LA GESTIÓN DE RECURSOS ................................................................ 8 3. OBJETIVOS ................................................................................................. 10 4. TECNOLOGÍA UTILIZADA............................................................................. 12 4.1. LENGUAJES Y OTROS RECURSOS DE PROGRAMACIÓN .............................................. 13 4.1.1. Visual C# .NET .................................................................................... 13 4.1.2. Visual C++ .NET .................................................................................. 14 4.1.3. ADO .NET ........................................................................................... 14 4.1.4. ASP .NET ............................................................................................ 14 4.1.5. Detours .............................................................................................. 15 4.1.6. TextCrypter ........................................................................................ 15 4.1.7. Log4Net ............................................................................................. 15 4.2. PROTOCOLOS Y ESTÁNDARES ............................................................................ 16 4.2.1. HTTPS – Hypertext Transfer Protocol Secure ...................................... 16 4.2.2. AES – Advanced Encryption Protocol .................................................. 16 4.2.3. SOAP – Simple Object Access Protocol ............................................... 17 4.2.4. XML – Extensible Markup Language .................................................. 17 4.3. HERRAMIENTAS ............................................................................................ 18 4.3.1. Visual Studio 2008 ............................................................................. 18 vi Web Document Store and Printing 5. DEFINICIÓN DE CASOS DE USO ................................................................... 19 5.1. DIAGRAMA DE CASOS DE USO ........................................................................... 20 5.2. DEFINICIÓN DE CASOS DE USO .......................................................................... 21 5.2.1. Almacenar documento ....................................................................... 21 5.2.2. Descargar documento ........................................................................ 22 5.2.3. Imprimir documento .......................................................................... 23 5.2.4. Consultar precio artículos .................................................................. 25 5.2.5. Monitorizar impresiones .................................................................... 26 5.2.6. Registrar trabajo ................................................................................ 27 5.2.7. Confirmar pago .................................................................................. 28 5.2.8. Cancelar pago .................................................................................... 30 5.2.9. Consultar precio total ........................................................................ 31 6. ESPECIFICACIÓN DE REQUISITOS ................................................................ 33 6.1. PERSPECTIVA DEL PRODUCTO ........................................................................... 34 6.2. CARACTERÍSTICAS DEL PRODUCTO...................................................................... 34 6.3. TIPOS DE USUARIOS Y CARACTERÍSTICAS .............................................................. 34 6.4. ENTORNO DE FUNCIONAMIENTO ....................................................................... 35 6.5. LIMITACIONES AL DISEÑO E IMPLEMENTACIÓN. ..................................................... 35 6.6. DOCUMENTACIÓN ......................................................................................... 36 6.7. DESCRIPCIÓN DE REQUISITOS FUNCIONALES ......................................................... 37 6.7.1. Grupo funcional 1 – Selección de documentos ................................... 37 6.7.2. Grupo funcional 2 – Subida de documentos al servidor ...................... 39 6.7.3. Grupo funcional 3 – Almacenamiento en el servidor .......................... 41 6.7.4. Grupo funcional 4 – Recuperación de archivos del servidor................ 42 6.7.5. Grupo funcional 5 – Impresión de documentos .................................. 45 vii Web Document Store and Printing 6.7.6. Grupo funcional 6 – Facturación del servicio ...................................... 47 6.7.7. Grupo funcional 7 – Lenguajes ........................................................... 49 6.7.8. Grupo funcional 8 – Instalación.......................................................... 50 6.8. REQUISITOS DE INTERFACES EXTERNAS ................................................................ 53 6.8.1. Interfaz de usuario ............................................................................. 53 6.8.2. Interfaces Hardware .......................................................................... 55 6.8.3. Interfaces Software ............................................................................ 55 6.8.4. Interfaces de comunicación................................................................ 55 6.9. OTROS REQUISITOS NO FUNCIONALES ................................................................. 55 6.9.1. Requisitos de fiabilidad ...................................................................... 55 6.9.2. Requisitos de seguridad ..................................................................... 56 6.9.3. Requisitos de calidad ......................................................................... 56 7. ESPECIFICACIONES TÉCNICAS DEL SISTEMA ................................................ 57 7.1. DESCRIPCIÓN DEL SISTEMA .............................................................................. 58 7.1.1. Arquitectura....................................................................................... 58 7.2. COMPONENTES ............................................................................................ 60 7.2.1. Base de Datos .................................................................................... 60 7.2.2. Página Web ....................................................................................... 64 7.2.3. Servicio Web ...................................................................................... 88 7.2.4. Servicio de monitorización de impresiones ......................................... 91 7.2.5. Tarea Programada ............................................................................. 98 8. PLANIFICACIÓN ........................................................................................ 101 8.1. DESCRIPCIÓN DE LAS ACTIVIDADES LLEVADAS A CABO. .......................................... 102 8.1.1. Iteración 1 ........................................................................................ 102 8.1.2. Iteración 2 ........................................................................................ 103 viii Web Document Store and Printing 8.2. RESUMEN DE LA PLANIFICACIÓN ...................................................................... 105 9. ESTUDIO ECONÓMICO.............................................................................. 106 9.1. COSTES DE PERSONAL ................................................................................... 107 9.2. COSTES EN MATERIALES ................................................................................ 107 9.3. COSTES INDIRECTOS ..................................................................................... 108 9.4. RESUMEN DE COSTES ................................................................................... 108 10. CONCLUSIONES Y LÍNEAS FUTURAS .......................................................... 110 10.1. RESUMEN DE RESULTADOS ......................................................................... 111 10.2. FUTUROS DESARROLLOS ............................................................................. 112 10.2.1. Respecto al almacenamiento e impresión ........................................ 113 10.2.2. Respecto a la facturación ................................................................. 114 11. BIBLIOGRAFÍA .......................................................................................... 116 12. GLOSARIO DE ACRÓNIMOS ...................................................................... 119 ANEXO A. MANUAL DE INSTALACIÓN Y OPERACIÓN ............................... 122 ANEXO B. MANUAL DE USUARIO FINAL .................................................. 169 ANEXO C. MANUAL DE USUARIO GESTOR .............................................. 182 ix Web Document Store and Printing 1. Introducción Web Document Store and Printing 1.1. Presentación del proyecto Actualmente es clara la tendencia a utilizar soportes digitales para la creación, almacenamiento y distribución de todo tipo de documentos, reemplazándose así el papel como soporte físico de los mismos. Sin embargo, existen muchas situaciones en las que, debido a la naturaleza de ciertos documentos, resulta estrictamente necesario disponer de ellos en papel. Por otro lado se está experimentando un rápido crecimiento del número de instalaciones en que se proporciona acceso público a Internet y, por lo tanto, del número de usuarios que hacen uso de estas redes públicas. Estos entornos proporcionan servicios cada vez más variados y de mayor calidad, pero su carácter público impone ciertas limitaciones respecto a los recursos que pueden ser puestos a disposición de los usuarios para su utilización. La vinculación entre estos dos aspectos es clara. Los usuarios de entornos de acceso público a Internet encuentran, con excesiva frecuencia, la limitación de no poder utilizar una impresora para plasmar en papel sus documentos en formato digital. Esta limitación viene impuesta en unos casos por la inexistencia de una impresora en el entorno de acceso público, y en otros por la incapacidad del gestor de la instalación para facturar el servicio, generalmente por no disponer de un sistema de control que justifique su cobro. El proyecto llevado a cabo consiste en un sistema que permite salvar esta limitación. Esto es, siendo obvia la necesidad de existencia de la impresora en la instalación de acceso público, el sistema desarrollado permite su uso a los usuarios cuando les sea necesaria, estableciendo al mismo tiempo un sistema mediante el cual los gestores de estas instalaciones pueden ofrecer y facturar el servicio de igual manera que lo hacen con el resto de servicios ofrecidos. 2 Web Document Store and Printing 1.2. Motivación El presente proyecto nace con la vocación de cubrir una necesidad concreta detectada por los usuarios de estas redes públicas. Esta necesidad consiste en tener la posibilidad de plasmar todo tipo de contenidos digitales en un soporte físico final, esto es, la impresión de todo tipo de documentos. Cuando un usuario hace uso de una red de acceso público a Internet, en la gran mayoría de los casos carece de un recurso, como una impresora, mediante el cual poder cubrir esta necesidad. Un ejemplo claro de esta necesidad se encuentra en instalaciones hoteleras que disponen de servicios de acceso público a Internet, mediante redes tanto cableadas como inalámbricas, para su uso con dispositivos propios de los usuarios. Dada la gran cantidad y variedad de usuarios del servicio en estos entornos, se encuentran necesidades de impresión de muy diversos tipos de documentos, desde correos electrónicos hasta fotografías, pasando por entradas de cine, entradas de conciertos, billetes de avión y tren, y una larga lista de etcéteras. En estas situaciones, la limitación de no disponer de una impresora conduce a los usuarios a la necesidad de buscar alternativas. Por ejemplo, podrían acudir a los llamados “Cibers”, teniendo que realizar un nuevo pago para un nuevo acceso a Internet simplemente para poder imprimir el documento; o bien solicitar la impresión en la propia instalación hotelera de manera que, en caso de que el responsable de la instalación permita la impresión, resulta muy complicado para él tanto poder realizar como poder justificar y registrar el cobro de ese servicio. Por lo tanto, y con el fin de cubrir estas necesidades detectadas, se puede resumir la motivación del proyecto en la consecución de dos grandes bloques de objetivos: 3 Web Document Store and Printing Por una parte, se necesita desarrollar una aplicación Web que permita a los usuarios, desde cualquier lugar donde dispongan de una conexión a Internet, transferir cualquier documento hacia un servidor, donde este quedará almacenado, otorgándole al usuario un número de serie. Este número de serie identificará unívocamente el documento de manera que el usuario, posteriormente, podrá acercarse a cualquier comercio gestionado y solicitar la impresión del documento, identificándolo mediante el número de serie. Por parte del comerciante, hará uso de la misma herramienta Web, la cual además le presentará el precio del servicio, en caso de existir, obteniendo así una manera de realizar, justificar y registrar la facturación del mismo. Por otra parte, y como soporte al sistema anterior, se necesita desarrollar un subsistema que permita gestionar y controlar todos los aspectos que intervienen en la impresión de documentos, como pueden ser las propiedades de impresión, estado de impresión de un documento y de funcionamiento de la impresora, etc. De esta manera se permitirá adaptar la facturación del servicio a las características concretas de cada trabajo de impresión. Además, teniendo en cuenta la gran variedad en cuanto a la naturaleza y contenidos de los archivos que manejará el sistema, los cuales además no pueden ser conocidos a priori debido al carácter público necesario para la solución, se debe tener especial cuidado con la seguridad del sistema. Por lo tanto, otro objetivo importante del sistema desarrollado es garantizar la seguridad de los documentos gestionados por el mismo. Así, se debe garantizar que los documentos no son interceptados, inspeccionados ni modificados por entes externos en ningún momento, tanto durante la transmisión de los mismos a través del canal inherentemente inseguro que representa Internet, como durante su almacenamiento temporal en el servidor. 4 Web Document Store and Printing En otro ámbito, en el plano personal, de entre todos los posibles proyectos que el desarrollador podía haber elegido, se decantó por el presente proyecto debido a dos aspectos claves. Por un lado, se encuadra dentro del interés del desarrollador por las comunicaciones y el desarrollo de herramientas de uso público basadas en la utilización de Internet. Por otro lado, ofrece al desarrollador el reto superar la falta de conocimientos respecto a la interacción de sistemas con el sistema operativo, ya que el sistema a desarrollar pasaba necesariamente por la inclusión de un módulo que interactuase con el sistema operativo al más bajo nivel, interviniendo incluso en el funcionamiento del núcleo de sistemas operativos Microsoft Windows. 5 Web Document Store and Printing 2. Estado del arte Web Document Store and Printing El estado de la tecnología con respecto al alcance de este proyecto es esperanzador, pero insuficiente en unos ámbitos e inexistente en otros. 2.1. Respecto del almacenamiento temporal Respecto del almacenamiento temporal de documentos, existen a nivel internacional algunos proyectos que presentan al usuario la posibilidad de almacenar sus documentos online, con iniciativas como Google Docs o el almacenamiento ofrecido por Microsoft a partir de su correo Web Hotmail, las cuales presentan una gran calidad respecto del servicio que ofrecen. Sin embargo, en el alcance del presente proyecto, se le encuentran diferentes carencias: Requieren por parte del usuario de un registro previo, que obliga a la presentación de datos personales del usuario, en la plataforma que integra el servicio. No garantizan la integridad de los documentos gestionados durante su transmisión, y se desconoce el alcance de la garantía de integridad durante su almacenamiento. No se garantiza la imposibilidad de inspección de los documentos por parte de los gestores de las aplicaciones. Otras soluciones de almacenamiento temporal usadas comúnmente en ciertos entornos, como pueden ser unidades de almacenamiento en red, servidores FTP, etc., suelen ser aplicables únicamente a entornos privados, y suponen la necesidad de que los usuarios presenten un grado más que elemental en el uso de las tecnologías de la información. 7 Web Document Store and Printing 2.2. Respecto de la gestión de recursos Respecto a la gestión del uso de recursos de impresión, y debido a la necesidad de permitir su uso, existe una gran variedad de métodos implantados en todo tipo de entornos. Algunos pasan por que un empleado utilice el recurso, establezca de manera manual el precio del servicio y realice su cobro. Otros más avanzados utilizan herramientas basadas en el protocolo IPP (Internet Printing Protocol), permitiendo al usuario final una impresora compartida en red, instalándola y utilizándola desde su propio dispositivo a través de un servidor de impresión. Estas soluciones, implantadas con mucho éxito en entornos como universidades, empresas, reprografías, etc., suelen presentar algunas de las siguientes limitaciones con respecto a su utilización pública: Se basan en aplicaciones locales, donde la orden de impresión se realiza necesariamente desde un dispositivo local, y en algunos casos es necesario acceder físicamente al servidor que gestiona el dispositivo de impresión. Debido a esa necesidad de uso, requieren por parte del usuario estar previamente inscrito o asociado de alguna manera a la institución donde se hace uso del servicio. No realiza control de las propiedades de impresión de los documentos. Por tanto, no es factible realizar una gestión de la facturación del servicio, o incluso de utilización aunque este se ofrezca de manera gratuita. No existe la posibilidad de imponer restricciones al uso del recurso de impresión respecto a algunos aspectos, como pueden ser el tipo de documentos, su tamaño, o propiedades como el color o la calidad de salida. 8 Web Document Store and Printing Por otra parte, es destacable que ninguna de las soluciones existentes integra todos los aspectos mencionados anteriormente, por lo que el alcance del proyecto que aquí se presenta le confiere una calidad elevada de innovación. 9 Web Document Store and Printing 3. Objetivos Web Document Store and Printing El objetivo del presente proyecto es el desarrollo de una herramienta que permita a los usuarios de redes de acceso público, por una parte, transferir y almacenar de manera completamente segura y a través de Internet cualquier tipo de documento en un servidor; y por otra, posteriormente, identificarse para descargarlos e imprimirlos, añadiendo además funciones de control de los servicios de impresión para permitir la correcta gestión de permisos de uso y facturación del servicio, en caso de que se desee realizarla. Ofrecer la posibilidad de almacenamiento temporal remoto de documentos a través de Internet. Ofrecer la posibilidad anterior sin necesidad previa de inscripción ni pago, y desde cualquier lugar donde se disponga de conexión a Internet. Ofrecer la posibilidad de descarga e impresión de documentos previamente incorporados al sistema. Ofrecer la posibilidad anterior en cualquier lugar gestionado, sin necesidad previa de inscripción o registro, con la simple presentación de un identificador. Garantizar la seguridad ante inspección y modificación de los documentos involucrados durante toda su existencia en el sistema. Realizar un control explícito de las propiedades de los trabajos de impresión llevados a cabo en los centros gestionados. Ofrecer al explotador final del servicio la posibilidad de gestionar, justificar y registrar el cobro del mismo. Ofrecer la posibilidad anterior basando el precio del servicio en las propiedades específicas de cada trabajo de impresión llevado a cabo. 11 Web Document Store and Printing 4. Tecnología utilizada Web Document Store and Printing Debido a que ha sido necesario desarrollar módulos del sistema de diversa índole, se ha necesitado también utilizar varias tecnologías para su desarrollo. Cabe destacar que, debido a que se ha realizado en el entorno de Fractalia como entidad colaboradora, y ajustándose a la filosofía, tradición y necesidades de la misma, el proyecto completo se ha desarrollado basándose en tecnologías Microsoft. De entre ellas cabe destacar: 4.1. Lenguajes y otros recursos de programación 4.1.1. Visual C# .NET Visual C# .NET es uno de los cuatro lenguajes de .NET incluidos por Microsoft para crear los últimos componentes, aplicaciones y servicios .NET. La versión más reciente del lenguaje representa el salto generacional más importante que ha dado en su historia. Visual C# .NET ya es un auténtico lenguaje orientado a objetos. Con esta versión los programadores pueden construir todo, desde aplicaciones ASP.NET hasta servicios Web XML. Visual C# .NET se integra plenamente con otros lenguajes de Microsoft Visual Studio® .NET. No sólo se pueden programar componentes de aplicaciones en diferentes lenguajes de programación, sino que las clases se pueden heredar de clases escritas en otros lenguajes utilizando la herencia entre lenguajes. Con el depurador unificado, se pueden depurar aplicaciones en varios lenguajes, independientemente de si se ejecutan localmente o en equipos remotos. Por último, independientemente del lenguaje que se utilice, .NET Framework proporciona un amplio conjunto de interfaces de programación de aplicaciones (API) para el sistema operativo Microsoft Windows e Internet. 13 Web Document Store and Printing 4.1.2. Visual C++ .NET La última versión de Microsoft Visual C++ .NET supone la integración transparente del lenguaje C++ con el resto de la arquitectura .NET. De este modo, el paradigma de la programación orientada a objetos, junto a la potencia de los servicios distribuidos .NET, se convierten en un tándem difícil de superar a la hora de crear aplicaciones bajo Windows. El software escrito para .NET es más escalable, seguro y portable que cualquier otra tecnología Windows anterior. 4.1.3. ADO .NET Microsoft ActiveX® Data Objects .NET (ADO.NET) es un conjunto de bibliotecas incluidas en Microsoft .NET Framework que ayudan a comunicarse con los datos de aplicaciones basadas en .NET, incluyendo datos XML. 4.1.4. ASP .NET ASP.NET, una parte de la plataforma .NET de Microsoft, es una estructura de programación revolucionaria que permite el desarrollo de aplicaciones Web dirigidas a corporaciones. Constituye la forma más rápida y escalable de desarrollar, implementar y ejecutar aplicaciones Web en cualquier navegador o dispositivo. ASP.NET facilita el desarrollo de aplicaciones si lo comparamos con el modelo ASP clásico, por lo que la productividad de los programadores mejorará considerablemente. Esta plataforma permite dotar de funciones adicionales a una aplicación Web y escribir una menor cantidad de código, entre otras características. 14 Web Document Store and Printing 4.1.5. Detours Detours es una librería para el desarrollo de todo tipo de funciones Win32 en plataformas x86, x64 e IA64. Detours es capaz de interceptar funciones Win32 mediante la sobre escritura del código en memoria para las funciones objetivo. El paquete Detours incluye también utilidades para crear enlaces a cualquier librería DLL y hacia cualquier binario basado en Win32. Detours permite preservar el funcionamiento de las librerías originales mediante llamadas a subrutinas que representan las funciones originales. 4.1.6. TextCrypter TextCrypter es un una librería DLL creada por Fractalia, desarrollada en lenguaje C# y, por lo tanto, que se integra perfectamente en cualquier desarrollo basado en el Framework de .NET. Esta librería puede importarse fácilmente dentro de cualquier proyecto desarrollado mediante Visual Studio, permitiendo de manera sencilla su utilización. Mediante esta librería se puede acceder fácilmente a funciones de encriptación y desencriptación basadas en el estándar AES, siendo así un recurso muy útil para la implantación de los más elevados criterios de seguridad de acceso a la información en los desarrollos, de manera rápida y sencilla. 4.1.7. Log4Net Log4net es una herramienta para ayudar a los programadores a crear registros de funcionamiento, generalmente conocidos como “logs” o “bitácoras”, hacia una gran variedad de entornos de salida, como pueden ser terminales de consola, ficheros, e-mail, etc. El API publicado por log4net permite de manera sencilla crear estas salidas log, incluso jerarquizándolas en niveles según la importancia de los eventos registrados. 15 Web Document Store and Printing Log4net es una herramienta abierta, que forma parte del proyecto “Apache Logging Services”. Este proyecto tiene como objetivo proveer servicios de logging para diversas plataformas, con propósitos de auditoría y depuración. 4.2. Protocolos y estándares 4.2.1. HTTPS – Hypertext Transfer Protocol Secure El protocolo de transferencia de hipertexto HTTP (HyperText Transfer Protocol) constituye el estándar de facto para la transmisión de información en la Web. Es un protocolo construido sobre la base de los protocolos TCP/IP, es orientado a transacciones y sigue el esquema petición-respuesta entre un cliente y un servidor.es Este protocolo, utilizado en conjunción con SSL (Secure Sockets Layer), permite la transmisión de información entre un servidor Web y un agente de usuario a través de Internet de manera segura, basando la seguridad en la encriptación de las transmisiones mediante un sistema de claves asimétricas. 4.2.2. AES – Advanced Encryption Protocol Advanced Encryption Standard, también conocido como Rijndael, es un esquema de cifrado por bloques, con un tamaño de bloque fijo de 128 bits y con tamaños de clave de 128, 192 ó 256 bits. Este sistema de cifrado, adoptado inicialmente como estándar de cifrado por los Estados Unidos, es actualmente uno de los algoritmos más populares utilizados en criptografía simétrica, además de ser considerado el que mayor nivel de seguridad ofrece. 16 Web Document Store and Printing 4.2.3. SOAP – Simple Object Access Protocol Se trata de un protocolo de comunicación bajo HTTP mediante XML, y forma prácticamente el núcleo de los servicios web. SOAP proporciona un mecanismo estándar de empaquetar mensajes, facilitando la comunicación del estilo RPC (Remote Procedure Call) entre un cliente y un servidor remoto. SOAP es el primer protocolo de su tipo que ha sido aceptado prácticamente por todas las grandes compañías de software del mundo, obteniendo así ventajas como son el no estar asociado directamente a ningún lenguaje ni protocolo de transporte, permitiendo además la interoperabilidad entre múltiples plataformas. 4.2.4. XML – Extensible Markup Language Se trata de un lenguaje basado en etiquetas. Es extensible ya que, después de diseñado y puesto en producción, es posible extender XML con la adición de nuevas etiquetas, de modo que se pueda continuar utilizando sin complicación alguna. Además, el analizador del lenguaje es un componente estándar, no es necesario crear un analizador específico para cada versión de lenguaje XML, por lo que es completamente portable. Realmente no es un lenguaje en sí, sino una manera de definir lenguajes para diferentes necesidades. Algunos de los lenguajes que usan XML para su definición son XHTML, SVG, MathML. 17 Web Document Store and Printing 4.3. Herramientas 4.3.1. Visual Studio 2008 Visual Studio es la herramienta más productiva para crear aplicaciones que se ejecutan en el sistema operativo Microsoft Windows. Con Visual Studio, los programadores pueden crear aplicaciones para Windows que aprovechan las completas características de la interfaz de usuario del sistema operativo Windows. Esta versión incluye todas las herramientas de programación rápida de aplicaciones que los programadores esperan de Microsoft, como la creación, con arrastrar y colocar, de aplicaciones para Windows que aprovechan totalmente las bases de datos y los servicios Web XML. Con la herencia visual, los programadores pueden simplificar enormemente la creación de aplicaciones basadas en Windows. 18 Web Document Store and Printing 5. Definición de casos de uso Web Document Store and Printing A continuación se presenta un estudio de los casos de uso iniciales identificados para el sistema, desde el punto de vista de su utilización por parte de los usuarios del mismo. 5.1. Diagrama de casos de uso Los casos de uso identificados para el sistema responden a la estructura representada en el siguiente diagrama: Web Document Store and Printing Almacenar documento Descargar documento «uses» Consultar precio artículos «uses» Usuario final «uses» Imprimir documento Registrar trabajo «uses» Monitorizar impresiones CajaWeb Confirmar pago «uses» Consultar precio total Usuario gestor «uses» Cancelar pago Figura 1. Diagrama de casos de uso 20 Web Document Store and Printing 5.2. Definición de casos de uso 5.2.1. Almacenar documento Actor primario: Usuario final Actores secundarios: Ninguno Trigger: Petición de almacenamiento por parte del usuario final. Precondiciones: Ninguna Escenario primario: 1. El usuario realiza la petición de almacenamiento. 2. El documento se transfiere al servidor y se almacena. 3. Se genera un identificador del documento. 4. Se presenta el identificador del documento al usuario. Extensiones: 1.- No se ha especificado un documento para almacenar 1. Se muestra al usuario un mensaje pidiendo que especifique un documento. 2a.- El documento no puede transferirse 1. Se muestra un mensaje al usuario indicando la situación. 2b.- El documento no puede almacenarse 1. Se muestra un mensaje al usuario indicando la situación. 21 Web Document Store and Printing Descripción de datos: Documento: Documento especificado por el usuario para ser almacenado. Identificador: Identificador alfanumérico del documento una vez almacenado. 5.2.2. Descargar documento Actor primario: Usuario final Actores secundarios: Ninguno Trigger: Petición de descarga por parte del usuario final. Precondiciones: El usuario debe indicar el identificador del documento. Escenario primario: 1. El usuario indica el identificador y realiza la petición de descarga. 2. Previa ejecución del caso de uso “Consultar precio artículos”, se presentan al usuario los precios asociados al servicio de impresión. 3. Se busca en la base de datos el documento asociado con el identificador. 4. El documento se transfiere del servidor al terminal utilizado por el usuario. Extensiones: 1.- No se ha especificado un identificador de documento 1. Se muestra al usuario un mensaje pidiendo que especifique un identificador. 22 Web Document Store and Printing 2a.- El identificador especificado no corresponde con ningún documento 1. Se muestra un mensaje al usuario indicando la situación y pidiendo que especifique otro identificador. 2b.- El documento no asociado ha sido eliminado del sistema 1. Se muestra un mensaje al usuario indicando la situación. Deberá volver a almacenarlo si desea imprimirlo. 3.- El documento no puede ser transferido 1. Se muestra un mensaje al usuario pidiendo que vuelva a intentar la descarga más tarde. Descripción de datos: Identificador: Identificador alfanumérico del documento. Documento: Documento asociado al identificador de documento. 5.2.3. Imprimir documento Actor primario: Usuario final Actores secundarios: Sistema CajaWeb Trigger: Petición de impresión por parte del usuario final. Precondiciones: Ninguna Escenario primario: 1. El cliente realiza la petición de impresión. 23 Web Document Store and Printing 2. Previa ejecución del caso de uso “Consultar precio artículos”, se presentan al usuario los precios asociados al servicio de impresión. Se procesa el trabajo de impresión. A petición del usuario, se ejecuta el caso de uso “Monitorizar impresiones”. Se ejecuta el caso de uso “Registrar trabajo”. Extensiones: 2.- No se puede mostrar el precio de los artículos 1. Se indica la situación al usuario, permitiendo continuar con el trabajo. 3a.- El trabajo de impresión queda interrumpido de manera no definitiva 1. Se muestra un mensaje al usuario indicando la situación. El trabajo podrá continuarse pero se necesita interacción física con la impresora. 3b.- El trabajo de impresión queda interrumpido de manera definitiva 1. Se muestra un mensaje al usuario indicando la situación. El trabajo se cancelará. 2. Se cancela la ejecución del presente caso de uso. Descripción de datos: Documento: Documento especificado por el usuario para ser impreso. Centro: Identificador del centro donde se está realizando el caso de uso. 24 Web Document Store and Printing 5.2.4. Consultar precio artículos Actor primario: Sistema Web Document Store and Printing Actores secundarios: Sistema CajaWeb Trigger: Ejecución de los casos de uso “Descargar documento” o “Imprimir documento”. Precondiciones: Ninguna Escenario primario: 1. Se pregunta al sistema CajaWeb por los artículos de impresión y su precio asociados al centro especificado. 2. Se recoge la respuesta por parte del sistema CajaWeb. 3. Se presenta el resultado al módulo ejecutor del caso de uso que generó la petición. 4. Se continúa la ejecución del caso de uso que generó la petición. Extensiones: 1.- No se puede conectar con el sistema CajaWeb 1. Se indica la situación. No se cancela la ejecución del caso de uso previo. 2.- No se recibe respuesta del sistema CajaWeb 1. Se indica la situación. No se cancela la ejecución del caso de uso previo. Descripción de datos: Centro: Identificador del centro donde se está realizando el caso de uso previo. Artículos: Listado de artículos de impresión disponibles para el centro. 25 Web Document Store and Printing Precios: Listado de precios asociados a los artículos de impresión disponibles para el centro. 5.2.5. Monitorizar impresiones Actor primario: Usuario final Actores secundarios: Ninguno Trigger: Petición de monitorización por parte del usuario. Precondiciones: El usuario debe haber indicado un identificador de documento. Escenario primario: 2. El usuario realiza la petición de monitorización. 3. Se consulta el estado de los trabajos de impresión asociados al documento. 4. Se consultan las propiedades del trabajo de impresión. 5. Se muestra el estado al usuario. 6. Se actualiza el estado de manera periódica. Extensiones: 2.- No se puede consultar el estado 1. Se indica la situación al usuario. 3.- No se puede consultar el estado 1. Se indica la situación al usuario. 26 Web Document Store and Printing Descripción de datos: Identificador: Identificador alfanumérico del documento en proceso. Estado: Tipo de estado en que se encuentra el trabajo de impresión. Páginas: Número de páginas impresas durante el trabajo de impresión. Color: Identificador que indica si el trabajo de impresión se realizó en color o en blanco y negro. 5.2.6. Registrar trabajo Actor primario: Sistema Web Document Store and Printing Actores secundarios: Ninguno Trigger: Finalización de un trabajo de impresión. Precondiciones: Ninguna Escenario primario: 1. Se detecta la finalización de un trabajo de impresión. 2. Se registran en el sistema las propiedades del trabajo de impresión. Extensiones: 1.- Finalización debida a interrupción definitiva del trabajo 1. Se cancela la ejecución de este caso de uso. 27 Web Document Store and Printing Descripción de datos: Identificador: Identificador alfanumérico del documento. Centro: Identificador del centro donde se ha ejecutado el trabajo de impresión. Páginas: Número de páginas impresas durante el trabajo de impresión. Color: Identificador que indica si el trabajo de impresión se realizó en color o en blanco y negro. 5.2.7. Confirmar pago Actor primario: Usuario gestor Actores secundarios: Sistema CajaWeb Trigger: Petición de confirmación de pago por parte del usuario gestor. Precondiciones: El usuario debe haber especificado un identificador de documento. Escenario primario: 1. El usuario realiza la petición de confirmación. 2. Se ejecuta el caso de uso “Consultar precio total”. 3. Se muestra al usuario el precio total y se le pide aceptación del mismo. 4. Se comunica al sistema CajaWeb la ejecución del pago. 5. Se vincula el identificador de documento al estado “pagado” y se registra en el sistema. 6. Se marca el documento asociado al identificador como obsoleto para el sistema. 28 Web Document Store and Printing Extensiones: 3a.- No se conoce el precio total 1. Se cancela la ejecución del caso de uso. 3b.- No se acepta el precio establecido 1. Se cancela la ejecución del caso de uso. 4.- No se puede establecer comunicación con el sistema CajaWeb 1. Se cancela la ejecución del caso de uso. Descripción de datos: Identificador: Identificador alfanumérico del documento. Documento: Documento asociado al identificador de documento. Centro: Identificador del centro donde se ha ejecutado el trabajo de impresión. Páginas: Número de páginas impresas durante el trabajo de impresión. Color: Identificador que indica si el trabajo de impresión se realizó en color o en blanco y negro. Precio total: Precio total de los trabajos de impresión asociados al documento. 29 Web Document Store and Printing 5.2.8. Cancelar pago Actor primario: Usuario gestor Actores secundarios: Sistema CajaWeb Trigger: Petición de cancelación de pago por parte del usuario gestor. Precondiciones: El usuario debe haber especificado un identificador de documento. Escenario primario: 1. El usuario realiza la petición de cancelación. 2. Se pide al usuario el motivo de la cancelación. 3. Se comunica al sistema CajaWeb la cancelación y su motivo. 4. Se vincula el identificador de documento al estado “cancelado” y se registra en el sistema. 5. Se marca el documento asociado al identificador como obsoleto para el sistema. Extensiones: 2.- No se ha especificado un motivo para la cancelación 1. Se indica al usuario que es estrictamente necesario especificarlo. 3.- No se puede establecer comunicación con el sistema CajaWeb 1. Se cancela la ejecución del caso de uso. Descripción de datos: Identificador: Identificador alfanumérico del documento. 30 Web Document Store and Printing Centro: Identificador del centro donde se ha ejecutado el trabajo de impresión. Motivo: Motivo para la cancelación indicado por el usuario. 5.2.9. Consultar precio total Actor primario: Sistema Web Document Store and Printing Actores secundarios: Sistema CajaWeb Trigger: Ejecución del caso de uso “Confirmar pago”. Precondiciones: Se debe haber especificado un identificador de documento y centro. Escenario primario: 1. Se pregunta al sistema CajaWeb por los artículos de impresión y su precio asociados al centro especificado. 2. Se recuperan las propiedades de todos los trabajos de impresión asociados al identificador de documento especificado. 3. Se calcula el precio total en función de los trabajos realizados y los artículos disponibles. Extensiones: 1.- No se puede establecer comunicación con el sistema CajaWeb 1. Se indica la situación al módulo que generó la petición de ejecución del presente caso de uso. 31 Web Document Store and Printing Descripción de datos: Identificador: Identificador alfanumérico del documento. Centro: Identificador del centro donde se ha ejecutado el trabajo de impresión. Artículos: Listado de artículos de impresión disponibles para el centro. Precios: Listado de precios asociados a los artículos de impresión disponibles para el centro. Trabajos: Lista de trabajos de impresión asociados al identificador de documento. Páginas: Número de páginas impresas durante cada trabajo de impresión. Color: Identificador que indica para cada trabajo de impresión se realizó en color o en blanco y negro. 32 Web Document Store and Printing 6. Especificación de requisitos Web Document Store and Printing 6.1. Perspectiva del producto Las especificaciones detalladas a lo largo de este capítulo definen un producto completo, el cual debe desarrollarse desde cero, de principio a fin. 6.2. Características del producto El sistema a desarrollar debe proveer, por un lado, un método para almacenar documentos en un servidor remoto a través de Internet y, por otro, un método para recuperar estos documentos del servidor remoto, con el objetivo de imprimirlos. Una vez almacenados los documentos, el sistema deberá proporcionar al usuario un identificador, el cuál le servirá posteriormente para identificarse como propietario del documento y así poder descargarlo e imprimirlo. Además, deberá presentar un método que permita al explotador final del producto conocer y aplicar el precio de facturación del servicio de impresión de manera automática. 6.3. Tipos de usuarios y características Se pretende que este software pueda ser utilizado por cualquier usuario de redes de acceso público a Internet, independientemente de los conocimientos y habilidades que presenten en el uso de las tecnologías de información. Es decir, está orientado al público en general. Por otro lado, los empleados de las empresas explotadoras finales también deberán hacer uso del software. Teniendo en cuenta que el sistema está pensado para poderse utilizar en una gran variedad de entornos, estos usuarios también pueden considerarse público en general. 34 Web Document Store and Printing 6.4. Entorno de funcionamiento El sistema consistirá en un entorno Web, y por lo tanto deberá funcionar a partir de un sistema de servidor Web. Debido a que se pretende que pueda ser instalado y utilizado en entornos tanto locales como remotos, se deberá poder usar cualquiera de los siguientes entornos: Microsoft Information Server, versión 5.1 o superior, instalado sobre el sistema operativo Microsoft Windows 2003 Server. Microsoft Information Server, versión 5.1 superior, instalado sobre el sistema operativo Microsoft Windows XP Professional. Además, se necesita implementar un sistema de almacenamiento en base de datos. El entorno del servidor de bases de datos podrá consistir en cualquiera de los dos siguientes: Microsoft SQL Server 2005 instalado sobre un sistema operativo Microsoft Windows 2003 Server. Microsoft SQL Server Desktop Engine instalado sobre un sistema operativo Microsoft Windows XP Professional. 6.5. Limitaciones al diseño e implementación. Todas las páginas Web desarrolladas deben ser codificadas utilizando el lenguaje de programación ASP .NET. El módulo de enlace con la cola de impresión del sistema operativo deberá codificarse utilizando el lenguaje de programación C++. 35 Web Document Store and Printing El resto de módulos del sistema deberán codificarse utilizando el lenguaje de programación C#. Todos los módulos del sistema desarrollados utilizando los lenguajes anteriores y que hagan uso de las bibliotecas proporcionadas por el Microsoft .NET Framework, harán uso de la versión 2.0 del mismo como máximo. El sitio Web a desarrollar debe ser navegable utilizando cualquier navegador Web. Un ejemplo y una relación de mínimos de navegadores que deben soportarse es: Microsoft Internet Explorer Mozilla Firefox Opera Safari Google Chrome 6.6. Documentación Junto con el software desarrollado deberán entregarse los siguientes documentos: Manual de instalación y operación Manual de usuario 36 Web Document Store and Printing 6.7. Descripción de requisitos funcionales A continuación se detallan los requisitos funcionales identificados para el sistema y que este debe implantar. El orden de prioridades está jerarquizado, de manera que dentro de la prioridad de un grupo funcional se debe seguir también el orden de prioridad de cada requisito concreto. También las dependencias están jerarquizadas. Esto es, todas las dependencias especificadas para un grupo funcional son aplicables a sus requisitos concretos, sin perjuicio de las especificadas explícitamente para ellos. Los elementos escritos en cursiva representan elementos y controles de usuario utilizados comúnmente en entornos y aplicaciones Web. 6.7.1. Grupo funcional 1 – Selección de documentos 6.7.1.1. Descripción y prioridad Descripción: El sistema debe permitir a los usuarios seleccionar el archive que desean almacenar en el servidor. Además de permitir escribir la ruta del documento en un textbox, deberá presentar un control de usuario, tal como un botón, con el objetivo de mostrar una ventana de selección de archivo. Dependencias: Ninguna. Prioridad: alta 6.7.1.2. Secuencias de estímulo/respuesta Estímulo El usuario activa el botón de selección de archivo. 37 Web Document Store and Printing Respuesta Se abre una ventana de selección de archivo. Cuando el usuario ha seleccionado el archivo y presionado el botón “Aceptar”, la ventana de selección se cierra y la ruta del archivo se escribe en el textbox. 6.7.1.3. Requisitos funcionales REQ-1: Tipos de archivos seleccionables por defecto Prioridad: Alta. Dependencias: Ninguna. Definición: Por defecto, la ventana de selección de archivos mostrará únicamente archivos imprimibles, entendidos como los tipos de archivos que más comúnmente se imprimen y que más probablemente se dispondrá del software necesario para abrirlos. Los tipos de ficheros por defecto, en cualquier caso, se deben poder especificar como parámetro de configuración del sistema. Inicialmente, se soportarán los siguientes tipos de archivos: “.txt” files “.doc” and “.docx” files “.xls” and “.xlsx” files “.ppt” and “.pptx” files “.pdf” files “.bmp”, “.tif”, “.tiff”, “.gif”, “.jpg”, “.jpeg” and “.png” files. 38 Web Document Store and Printing REQ-2: Selección de otros tipos de archivos Prioridad: Alta. Dependencias: Depende del REQ-1. Definición: Además del comportamiento definido en el REQ-1, la ventana de selección de archivos deberá permitir cambiar los tipos de archivos mostrados, de manera que se puedan encontrar todos los archivos almacenados en el dispositivo. 6.7.2. Grupo funcional 2 – Subida de documentos al servidor 6.7.2.1. Descripción y prioridad Descripción: El sistema debe permitir a los usuarios subir sus documentos al servidor. Antes de hacerlo, debe alertar sobre posibles situaciones especiales. Una vez almacenados, debe proporcionar al usuario un identificador, el cual le permitirá posteriormente identificarse como propietario del documento. Dependencias: Depende de la consecución del Grupo Funcional 1 – Selección de documentos. Prioridad: Alta. 6.7.2.2. Secuencias de estímulo/respuesta Estímulo El usuario activa el botón de subida de archivo. Respuesta La aplicación intenta subir el documento al servidor. Una vez almacenado se genera y presenta al usuario un identificador del documento. 39 Web Document Store and Printing 6.7.2.3. Requisitos funcionales REQ-3: Comprobación del tipo de archivo Prioridad: Media. Dependencias: Depende del REQ-1. Definición: Cuando el usuario presiona el botón de subida del archivo, el sistema deberá verificar si el archivo está incluido en la lista de tipos de archivos soportados definida en la configuración. Si el usuario ha seleccionado un archivo cuyo tipo no está incluido en la lista, cuando presiona el botón de subida el sistema deberá mostrar un mensaje de advertencia, indicando que el documento puede aparecer como no imprimible cuando más tarde el usuario desee imprimirlo. Cuando se muestre este mensaje, se deberá obligar al usuario a elegir entre las opciones “Continuar” o “Cancelar”, de manera que se continúe con la subida del documento o se cancele y se vuelva a la página de selección de archivo, respectivamente. REQ-4: Comportamiento en caso de que el fichero no pueda ser subido Prioridad: Alta. Dependencias: Ninguna. Definición: En caso de que, por cualquier razón, el documento no pueda ser subido al servidor correctamente, el sistema deberá presentar un mensaje indicando la situación. Después, deberá volver a la página de selección de archivo, donde el archivo permanecerá seleccionado. 40 Web Document Store and Printing 6.7.3. Grupo funcional 3 – Almacenamiento en el servidor 6.7.3.1. Descripción y prioridad Descripción: El sistema debe permitir a los usuarios almacenar sus documentos en un servidor, cifrándolo de algún modo. También deberá almacenar los identificadores asociados a los documentos, cifrándolos igualmente. Dependencias: Ninguna. Prioridad: Alta. 6.7.3.2. Secuencias de estímulo/respuesta Estímulo: Llega al servidor una petición de almacenamiento de archivo. Respuesta: El servidor descarga el archivo y lo almacena en la base de datos. El servidor almacena en la base de datos el identificador del documento y su nombre original. 6.7.3.3. Requisitos funcionales REQ-5: Nombre de los ficheros Prioridad: Alta. Dependencias: Ninguna. 41 Web Document Store and Printing Definición: Cuando un fichero es almacenado por el servidor, deberá crearse un GUID para el mismo y deberá modificarse el nombre del fichero, de manera que el nombre del fichero almacenado quedará formado por la concatenación de su nombre original y su GUID. REQ-6: Tabla de archivos – identificadores Prioridad: Alta. Dependencias: Ninguna. Definición: El sistema deberá mantener un registro de ficheros almacenados e identificadores de los mismos. Los identificadores de documentos deberán almacenarse de manera cifrada. REQ-7: Cifrado de ficheros Prioridad: Alta. Dependencias: Ninguna. Definición: Cuando un fichero es almacenado en el sistema, este debe ser cifrado con el objetivo de evitar que cualquiera pueda abrirlo. A pesar de que legalmente se considera suficiente el almacenamiento en base de datos en modo binario, se debe considerar la posibilidad de utilizar un cifrado basado en el protocolo AES de encriptación. 6.7.4. Grupo funcional 4 – Recuperación de archivos del servidor 6.7.4.1. Descripción y prioridad Descripción: el sistema debe permitir a los usuarios recuperar sus documentos del servidor, con el objetivo de poder imprimirlos, mediante la utilización del identificador asociado al documento. 42 Web Document Store and Printing Dependencias: Depende del Grupo funcional 2 – Subida de documentos al servidor y del Grupo funcional 3 – Almacenamiento en el servidor. Prioridad: Alta 6.7.4.2. Secuencias de estímulo/respuesta Estímulo: El usuario escribe el identificador del documento en un textbox y activa un botón. Respuesta: Se envía el identificador al servidor. El servidor busca el identificador. Si se encuentra el identificador, el servidor busca el archivo asociado, lo descifra y lo envía al usuario. 6.7.4.3. Requisitos funcionales REQ-8: Comportamiento en caso de identificador inexistente Prioridad: Media. Dependencias: Depende del REQ-6. Definición: En caso de que el identificador del documento no coincida con ninguno de los almacenados, se deberá mostrar un mensaje al usuario indicando la situación. 43 Web Document Store and Printing REQ-9: Comportamiento en caso de que el archivo no pueda ser recuperado Prioridad: Media. Dependencias: Ninguna. Definición: Si, por cualquier razón, el archivo no puede ser recuperado del servidor, se debe mostrar un mensaje indicando la situación y una posible causa. REQ-10: Comportamiento en caso de que el tipo de fichero NO esté incluido en la lista de tipos soportados. Prioridad: Media. Dependencias: Depende del REQ-1. Definición: Al recuperar un documento, el sistema debe comprobar si su tipo está incluido en la lista de tipos de archivos soportados definida en la configuración. En caso de que no esté incluido, se debe presentar un mensaje indicando al usuario la situación. REQ-11: Comportamiento en caso de que el tipo de fichero SÍ esté incluido en la lista de tipos soportados Prioridad: Alta. Dependencias: Depende del REQ-1. Definición: Al recuperar un documento, el sistema debe comprobar si su tipo está incluido en la lista de tipos de archivos soportados definida en la configuración. En caso de que esté incluido, el documento deberá abrirse con la aplicación apropiada y, de ser posible, se deberá abrir automáticamente un diálogo de impresión. 44 Web Document Store and Printing 6.7.5. Grupo funcional 5 – Impresión de documentos 6.7.5.1. Descripción y prioridad Descripción: El sistema debe permitir a los usuarios imprimir sus documentos en una impresora accesible. Además, deberá controlar el número de páginas impresas y si la impresión se realiza en color o en blanco y negro, dejando un registro en el sistema de las propiedades de cada impresión realizada sobre un documento gestionado por el sistema. Dependencias: Depende del Grupo funcional 4 – Recuperación de archivos del servidor. Prioridad: Alta. 6.7.5.2. Secuencias de estímulo/respuesta Estímulo: Se detecta la impresión de un archivo gestionado por el sistema. Respuesta: Se realiza control de las propiedades de los trabajos de impresión asociados al archivo. Se guarda un registro de las propiedades detectadas. 6.7.5.3. Requisitos funcionales REQ-12: Control de propiedades de impresión Prioridad: Alta. Dependencias: Ninguna. 45 Web Document Store and Printing Definición: El sistema deberá realizar un control explícito del número de páginas imprimidas, y de si las impresiones se han realizado en color o en blanco y negro, para cada documento gestionado por el sistema. REQ-13: Registro de propiedades Prioridad: Alta. Dependencias: Depende del REQ-12 Definición: El sistema deberá guardar un registro que relacione cada identificador de documento gestionado por el sistema con las propiedades de los trabajos de impresión realizados sobre el mismo. REQ-14: Comportamiento en caso de documento no gestionado por el sistema y permitido para la impresión Prioridad: Media. Dependencias: Ninguna. Definición: Cuando se detecta un trabajo de impresión cualquiera, el sistema debe comprobar si se trata de un documento gestionado por el sistema. En caso de no serlo, deberá comprobar también si el nombre del documento cumple con alguna de las expresiones regulares definidas por configuración. En caso de que se cumpla alguna, se permitirá la impresión libre del documento. REQ-15: Comportamiento en caso de documento no gestionado por el sistema y NO permitido para la impresión Prioridad: Alta. Dependencias: Ninguna. 46 Web Document Store and Printing Definición: Cuando se detecta un trabajo de impresión cualquiera, el sistema debe comprobar si se trata de un documento gestionado por el sistema. En caso de no serlo, deberá comprobar también si el nombre del documento cumple con alguna de las expresiones regulares definidas por configuración. En el caso de que no cumpla ninguna, se deberá denegar la posibilidad de imprimirlo. REQ-16: Monitorización de trabajos de impresión Prioridad: Media Dependencias: Ninguna Definición: Se debe proveer al usuario con una manera de monitorizar sus trabajos de impresión, con el objetivo de conocer en todo momento el estado de los mismos. 6.7.6. Grupo funcional 6 – Facturación del servicio 6.7.6.1. Descripción y prioridad Descripción: El sistema debe proporcionar un método mediante el cual los explotadores finales del servicio puedan conocer el precio asociado a los trabajos de impresión realizados sobre los documentos gestionados por el sistema, así como de guardar un registro de las facturaciones realizadas. Dependencias: Depende del Grupo funcional 5 – Impresión de documentos. Prioridad: Alta. 6.7.6.2. Secuencias de estímulo/respuesta Estímulo: El usuario administrativo introduce el identificador de un documento y pulsa un botón. 47 Web Document Store and Printing Respuesta: Se le muestra al usuario administrativo el precio asociado a los trabajos de impresión del documento asociado. Se le muestra un botón que permita la posibilidad de guardar registro del pago realizado. 6.7.6.3. Requisitos funcionales REQ-17: Cálculo del precio del servicio Prioridad: Alta. Dependencias: Ninguna. Descripción: Para el cálculo del precio del servicio, el sistema deberá comunicarse con el sistema externo de facturación, indicándole el centro donde se ha prestado el servicio y las propiedades de los trabajos de impresión, recuperando así el precio final. REQ-18: Registro de la facturación Prioridad: Alta. Dependencias: Ninguna. Descripción: Cuando se realice el cobro del servicio, el usuario administrativo deberá poder registrarlo, mediante la activación de un botón. Cuando esta acción se realice, el sistema deberá tanto registrar en su base de datos que los trabajos de impresión asociados al documento han sido cobrados, como notificar la situación al sistema de facturación externo. 48 Web Document Store and Printing REQ-19: Comportamiento en caso de identificador no encontrado Prioridad: Media. Dependencias: Ninguna. Descripción: En caso de que el identificador introducido por el usuario administrativo no se encuentre en el sistema, se deberá mostrar un mensaje indicando la situación REQ-20: Eliminación del documento del servidor Prioridad: Media. Dependencias: Ninguna. Descripción: Cuando los trabajos de impresión de un documento asociado al sistema se hayan cobrado, el sistema deberá eliminar automáticamente el documento de su almacenamiento en el servidor. 6.7.7. Grupo funcional 7 – Lenguajes 6.7.7.1. Descripción y prioridad Descripción: El sistema debe permitir a los usuarios cambiar en cualquier momento el lenguaje en que se muestran los textos dentro de los interfaces Web del sistema. Dependencias: Ninguna. Prioridad: Media. 6.7.7.2. Secuencias de estímulo/respuesta Estímulo: El usuario hace “click” en el enlace relativo al idioma que desea seleccionar. 49 Web Document Store and Printing Respuesta: La página Web cambia el lenguaje en que se muestran todos los textos incluidos. 6.7.7.3. Requisitos funcionales REQ-21: Lenguaje por defecto Prioridad: Media. Dependencias: Ninguna. Definición: El lenguaje por defecto en que se muestren los textos de los interfaces Web debe poder ser fijado a través de un parámetro de configuración. REQ-22: Almacenamiento de textos Prioridad: Alta. Dependencias: Ninguna. Definición: Todos los textos que se mostrarán en los interfaces Web y en cualquier elemento Web que vaya a presentarse al usuario, deberán ser almacenados en un fichero XML. Además, tanto el sistema en sí como el formato del fichero XML deberán permitir la adición de nuevos mensajes. 6.7.8. Grupo funcional 8 – Instalación 6.7.8.1. Descripción y prioridad Descripción: Todos los componentes del sistema, a excepción de la base de datos en caso de ser inviable, se deberán poder instalar haciendo uso de un fichero autoinstalable de Microsoft, esto es, mediante la ejecución de un archivo “.msi”. La aplicación de instalación debe dejar el componente listo para su uso. 50 Web Document Store and Printing Dependencias: Ninguna. Prioridad: Baja. 6.7.8.2. Secuencias de estímulo/respuesta Estímulo: Se ejecuta el instalador. Respuesta: La aplicación de instalación pregunta por los parámetros de instalación deseados. El componente se instala usando los parámetros definidos durante la instalación. 6.7.8.3. Requisitos funcionales REQ-23: Comprobación de requisitos de sistema Prioridad: Alta. Dependencias: Ninguna. Definición: La aplicación de instalación deberá comprobar si se cumplen los requisitos necesarios para el funcionamiento del componente, como pueden ser la presencia del Microsoft .NET Framework, o que el servicio de estado de ASP .NET se encuentre arrancado. Si alguno de los requisitos no se cumplen, la aplicación de instalación debe intentar realizar las acciones necesarias para evitar la situación. Si para algún requisito no puede realizarse acción alguna, se debe mostrar un mensaje al usuario indicando la situación. 51 Web Document Store and Printing REQ-24: Creación de directorios virtuales de IIS Prioridad: Media. Dependencias: Ninguna. Definición: La aplicación de instalación deberá preguntar por qué sitio Web de entre los definidos en IIS se deberá utilizar para instalar los componentes Web, así como por el nombre del directorio virtual a crear Después, la aplicación de instalación deberá crear la carpeta del directorio virtual, el directorio virtual dentro del IIS y asignarle los permisos necesarios para que el sistema funcione correctamente. REQ-25: Creación de la carpeta de logs Prioridad: Media. Dependencias: Ninguna. Definición: La aplicación de instalación deberá preguntar por el directorio donde se desean almacenar los logs del componente, crearlo en caso de que no exista y asignarle los permisos necesarios para que el componente pueda escribir el él. 52 Web Document Store and Printing 6.8. Requisitos de interfaces externas 6.8.1. Interfaz de usuario Las interfaces de usuario consistirán en un grupo de páginas Web. El mínimo de páginas y controles de usuario existentes en las mismas será: 6.8.1.1. Página de subida de archivos Desde esta página el usuario podrá seleccionar el archivo que desea subir y realizar la petición de subida. Además, deberá presentar enlaces que permitan cambiar el lenguaje de los textos mostrados. Así en ella existirán, al menos, los siguientes controles: Un textbox para indicar la ruta del archivo a subir. Un botón para abrir la ventana de búsqueda de archivos. Un botón para comenzar la subida del archivo. Un enlace para cada lenguaje disponible. Además deberá mostrar un texto indicando el nombre y descripción del sistema, un texto indicando los términos de uso, y deberá estar preparada para mostrar posibles mensajes de advertencia o error. 6.8.1.2. Página de descarga de archivos Desde esta página el usuario podrá indicar el identificador de un documento con el objetivo de poder descargarlo del servidor, así como monitorizar el estado de sus trabajos de impresión. Además, deberá presentar enlaces que permitan cambiar el lenguaje de los textos mostrados. 53 Web Document Store and Printing Así en ella existirán, al menos, los siguientes controles: Un textbox para la introducción del identificador del documento. Un botón para comenzar la descarga. Un enlace por cada lenguaje disponible. Además esta página deberá mostrar un texto indicando el nombre y descripción del sistema, un texto indicando los términos de uso, y deberá estar preparada para mostrar posibles mensajes de advertencia o error. 6.8.1.3. Página de facturación Desde esta página los usuarios administrativos podrán introducir un identificador de documento, con el objetivo de conocer el precio asociado a sus trabajos de impresión. Además, podrán realizar la petición de registro del cobro realizado. Así en ella existirán, al menos, los siguientes controles: Un textbox para introducir el identificador del documento. Un botón para pedir el registro del cobro del servicio. Además esta página deberá mostrar un texto indicando el nombre y descripción del sistema, un texto indicando los términos de uso, y deberá estar preparada para mostrar posibles mensajes de advertencia o error. 54 Web Document Store and Printing 6.8.2. Interfaces Hardware La parte cliente Web del sistema deberá poder utilizarse desde cualquier tipo de ordenador personal que utilicen los usuarios finales. Todos los módulos instalables funcionarán en plataformas basadas en tecnología Intel de 32 bits. 6.8.3. Interfaces Software La parte cliente del sistema deberá funcionar en cualquier navegador Web que utilicen los usuarios, tal y como se define en el apartado 6.5. Limitaciones al diseño e implementación. El sistema deberá además interactuar con el sistema externo de facturación “CajaWeb”. 6.8.4. Interfaces de comunicación Al implementar interfaces basadas en aplicaciones Web, y dada la necesidad de salvaguarda de la seguridad, las comunicaciones entre distintos componentes del sistema deberán realizarse utilizando el protocolo HTTPS. 6.9. Otros requisitos no funcionales 6.9.1. Requisitos de fiabilidad Durante el uso de este sistema ningún documento de usuario debe ser dañado ni modificado, ni en su localización original en el dispositivo del usuario ni en su almacenamiento temporal en el servidor. 55 Web Document Store and Printing 6.9.2. Requisitos de seguridad Debido a la gran variedad y naturaleza de los documentos potencialmente gestionables por el sistema, garantizar su seguridad durante toda la gestión de los mismos por parte del sistema es un requisito clave. Así, se debe prever que, para la transmisión de documentos entre distintos módulos del sistema, se utilizará la versión segura del protocolo HTTP. Se debe garantizar al menos el mismo nivel de seguridad en las transmisiones que involucren otros protocolos de comunicación. Por otro lado, en el almacenamiento de los documentos, se debe garantizar la seguridad igualmente. Así, como requisito mínimo se establece el almacenamiento de los mismos en forma binaria, debiendo estudiarse la viabilidad de utilización de sistemas de cifrado que garanticen un mayor nivel de seguridad. 6.9.3. Requisitos de calidad Las interfaces de usuario desarrolladas deben cumplir unos mínimos criterios de navegabilidad y usabilidad. El sistema de almacenamiento temporal debe permitir una correcta gestión de los recursos físicos de almacenamiento utilizados, eliminando automáticamente todos aquellos documentos que, por unas causas u otras, ya no vaya a ser necesario que permanezcan almacenados. 56 Web Document Store and Printing 7. Especificaciones técnicas del sistema Web Document Store and Printing 7.1. Descripción del sistema 7.1.1. Arquitectura Web Document Store and Printing es un sistema creado para permitir a los usuarios de soluciones de acceso público a Internet poder realizar impresiones de sus documentos. Para esto se dispondrá de un servidor para almacenar el documento, con la idea de posteriormente descargarlo en un lugar que disponga de impresoras accesibles. El sistema monitoriza las impresiones y factura las impresiones realizadas. Para lograr esta funcionalidad, el sistema dispone de cinco componentes que se detallan posteriormente y se comunica con un sistema externo de facturación utilizado en Fractalia denominado “CajaWeb”, mediante un servicio Web que este sistema publica. Los cinco componentes propios del sistema son los siguientes: Una base de datos, (WDSDb). Sirve para almacenar los documentos y la información necesaria acerca de las impresiones asociadas a los documentos almacenados. Una página Web, (WDSWeb). Va a ser utilizada por dos perfiles de usuarios. o El cliente final para almacenar un documento, descargarlo desde una ubicación con impresoras disponibles, realizar impresiones del documento y monitorizarlas. o El encargado de las impresiones para saber qué precio tienen las impresiones realizadas correctamente y realizar el cobro. Un Servicio Web, (WDSws). Sirve para comunicar el monitor de impresiones con la base de datos. Un Servicio Windows, (WDSMonitor). Es un servicio de monitorización de impresiones que se envían a la cola de impresión de una impresora. 58 Web Document Store and Printing Una tarea programada, (WDSDbCleaner). Sirve para borrar los documentos pagados del servidor y para borrar los documentos no pagados con una antigüedad. El diagrama con la arquitectura sería el siguiente: Figura 2. Arquitectura del sistema 59 Web Document Store and Printing 7.2. Componentes 7.2.1. Base de Datos Los datos persistentes que maneja el sistema se almacenan en una base de datos y que se identifica en el esquema como WDSDb. 7.2.1.1. Esquema Figura 3. Esquema de la base de datos 60 Web Document Store and Printing 7.2.1.2. Descripción de los objetos 7.2.1.2.1 Tablas wds01_Document En esta tabla se almacenan los documentos que se suben al servidor. Tiene declarados los siguientes campos: o wds01_id: es el identificador de un documento y actúa como clave primaria. o wds01_uploadTime: es la fecha y hora en la que se ha almacenado un documento en el servidor. o wds01_password: es la contraseña que se usa para descargar un documento y consultar la impresión o impresiones relacionadas con dicho documento. o wds01_guid: es un GUID que identifica externamente a un documento. o wds01_fileData: este campo almacena los datos binarios de un documento. o wds01_name: es el nombre del documento junto con su extensión. o wds01_payed: define si la impresión o impresiones de un documento han sido pagadas. wds02_Printing En esta tabla se almacena información sobre las impresiones de los documentos, detectados en las colas de impresiones. Se almacena además información de la facturación asociada a cada impresión que se obtiene a través del sistema “CajaWeb”. Tiene declarados los siguientes campos: 61 Web Document Store and Printing o wds02_id: es el identificador de la impresión de un documento y actúa como clave primaria. o wds02_idDocument: es el identificador del documento del cual se ha realizado una impresión y actúa como clave ajena referenciando a la tabla “wds01_Document”. o wds02_idCenter: es el identificador del Centro en el cual se ha mandado a imprimir el documento. o wds02_submittedTime: es la fecha y hora en la que se ha mandado un documento a una cola de impresión. o wds02_totalPages: es el número total de páginas impresas. o wds02_color: define si una impresión se ha realizado en color o en blanco y negro. o wds02_idPrintingState: identificador del estado de la impresión. Actúa como clave ajena referenciando a la tabla “wds03_PrintingState”. o wds02_idTicket: es el identificador del ticket asociado a la impresión. o wds02_articleDescription: describe el tipo de artículo asociado a la impresión. o wds02_price: es el precio aplicado al total de las páginas impresas y que figura en el ticket. o wds02_ticketCancelled: toma valor true cuando se cancela el ticket asociado a la impresión. 62 Web Document Store and Printing wds03_PrintingState En esta tabla se almacena información descriptiva sobre el estado de una impresión. Tiene declarados los siguientes campos: o wds03_id: es el identificador de un estado de impresión y actúa como clave primaria. o wds03_name: es el nombre de un estado de impresión. Los estados que puede tomar una impresión son los siguientes: o Printing: impresión de documento en curso. o Printed: impresión concluida. o Printer Error: la impresora a la que se ha mandado el documento para imprimir está en un estado de error, y por tanto, NO se ha podido realizar la impresión. o Ticket Error: No se ha podido generar un ticket asociado a la impresión, y por tanto, NO se ha podido realizar la impresión. o Interrupted Printing: la impresión del documento está interrumpida debido a que la impresora está en un estado que requiere la intervención física de un usuario. 7.2.1.2.2 Procedimientos Almacenados AddPrinting: añade la impresión de un documento, detectada en una cola de impresión, a la base de datos. CheckPassword: Verifica si existe un documento en la base de datos que tiene asignado una determinada contraseña. 63 Web Document Store and Printing DeleteFileData: Borra los datos binarios de documentos que cumplen ciertos criterios. GetDocument: Devuelve un documento con su información y datos. GetDocumentPassword: devuelve la contraseña asociada a un documento. GetPrinting: Devuelve la información de una impresión o impresiones realizadas para un documento. SetDocumentPayed: actualiza el estado de un documento a pagado. SetTicketPrintingToCancelled: actualiza el estado de cancelación del ticket de una impresión cuyo ticket asociado fue cancelado. StoreDocument: Almacena en la base de datos un documento. UpdatePrinting: Actualiza el estado de una impresión de documento. 7.2.2. Página Web WDSWeb es una aplicación Web que sirve al usuario final para subir documentos, descargarlos y monitorizar las impresiones. Al usuario encargado de realizar el cobro, le sirve para saber lo que hay que facturar por las impresiones realizadas. El funcionamiento del sitio web se puede agrupar en tres apartados los cuales se corresponden con una página física. En la página Upload.aspx se suben los documentos al servidor y se muestra un código que sirve al usuario para identificar el documento almacenado. En la página Download.aspx se descargan los documentos almacenados anteriormente y se realiza la monitorización de los trabajos de impresión enviados del documento descargado. 64 Web Document Store and Printing En la página Payment.aspx se muestran las impresiones realizadas para el documento y se calcula el precio total en función de las copias impresas, que están asociadas a un artículo de impresión del centro. Aunque WDSWeb es el proyecto principal y todas las secciones de este punto se refieren a este proyecto, la solución de Visual Studio que contiene el de la página web contiene varios proyectos más: Crypt: Es un proyecto que genera una librería que se utiliza para desencriptar la cadena de conexión a la base de datos. WDSWeb_deploy: Contiene la publicación de la página web. WDSWeb_Installer: Crea un instalador para el sitio web. 7.2.2.1. Estructura La aplicación Web se ha estructurado haciendo uso de una Master Page representada por la página MainPage.master, que es plantilla de diseño y distribución de contenidos. Los controles de usuario son como plantillas que podremos ubicar en tantos sitios de nuestra Web como queramos, de forma que todo queda centralizado, y cualquier cambio en nuestro fichero .ascx se verá reflejado allá donde lo hayamos ubicado. Se utilizan tres controles de usuario: LanguageControl.ascx, se utiliza para mostrar las banderas que sirven para seleccionar el idioma con el que se muestran los textos del sitio web. PrinterArticles.ascx, se utiliza para mostrar en una tabla los artículos de impresión que tiene un centro. 65 Web Document Store and Printing PrintingDocument.ascx, se utiliza para mostrar en una tabla las impresiones realizadas de un documento descargado del sitio web. Las páginas que se muestran en el contenedor de la página maestra, son Default.aspx, Upload.aspx, Download.aspx y Payment.aspx. El archivo de idiomas se llama Languages.xml y se encuentra en la carpeta “language”, pero su nombre y localización se puede configurar en los parámetros del archivo de configuración. La carpeta de almacenamiento temporal de archivos en el servidor web se llama WDSFiles, pero se puede seleccionar una carpeta distinta, creándola en el directorio virtual y cambiando la ruta mediante un parámetro del archivo de configuración. Las imágenes se guardan en la carpeta “images” y la hoja de estilo, que se encuentra en la carpeta “css”, se llama DocumentStoreWeb.css. 7.2.2.1.1 Clase de la Master-Page La página maestra se compone de un titulo y un texto personalizable mediante el archivo de idiomas, un contenedor para mostrar las páginas de contenido y una barra horizontal que contiene un enlace a la página de inicio, un enlace personalizable y el control de idiomas. 7.2.2.1.2 Archivo XML con los idiomas. En archivo de idiomas tiene la siguiente estructura. <?xml version="1.0" encoding="utf-8"?> <TRADUCTOR> <!-- Página maestra--> <IDIOMA id="lbHeader"> <ES>Bienvenido al servicio Web Document Store</ES> <EN>Welocme to Web Document Store System</EN> </IDIOMA> <IDIOMA id="lbHome"> <ES>Inicio</ES> <EN>Home</EN> </IDIOMA> … </TRADUCTOR> 66 Web Document Store and Printing Se pueden añadir más sentencias para traducir si siguen la misma estructura. También se pueden añadir más traducciones para las sentencias existentes siempre que se utilicen los códigos de lenguaje según el formato de Microsoft en http://msdn.microsoft.com/es-es/goglobal/bb964664(en-us).aspx y que se añada el código correspondiente en el fichero de configuración. Si se quiere añadir un lenguaje en el archivo de traducción hay que asegurarse que se va a añadir la nueva traducción en todas las sentencias. Ejemplo de añadir una nueva traducción a la sentencia en otros idiomas. <IDIOMA id="lbHome"> <ES>Inicio</ES> <EN>Inicio(EN)</EN> <PT>Inicio(PT)</PT> <DE>Inicio(DE)</DE> <FR>Inicio(FR)</FR> <IT>Inicio(IT)</IT> </IDIOMA> 7.2.2.1.3 Clases de App_Code Las clases contenidas en esta carpeta se compilan en tiempo de ejecución y se creara un solo ensamblado al que se podrá tener acceso desde el código de cualquier parte de la aplicación Web. Autoticket.cs Página que sirve para realizar las operaciones necesarias con el servicio web del sistema externo de facturación. Tiene dos métodos públicos: GetPrintingArticles public List<ArticlePrintable> GetPrintingArticles(int idCenter, out PrintingArticlesResult result) 67 Web Document Store and Printing Esta función devuelve una lista de los artículos de impresión que tiene un centro. ArticlePrintable es una clase serializable del servicio web del sistema de facturación, que contiene los datos del artículo imprimible. Como parámetros de entrada, tiene el identificador de centro de plataforma interna y una enumerador PrintingArticlesResult que devuelve el estado de la operación. Los valores de este enum son, success, centerFail y databaseFail. Este método realiza una llamada al siguiente método web del sistema de facturación: public reply SelectPrintableArticles(int idCentro, out List<ArticlePrintable> articlesGroup, out string message) CancelPeripheralTicket public bool CancelPeripheralTicket(int idTicket, string comment) Esta función devuelve el resultado de realizar la cancelación de un ticket de periférico en la base de datos. Como parámetros de entrada, tiene el identificador de ticket y un string que indica la causa de la cancelación. Devuelve un bool que indica si se realizó la cancelación correctamente o hubo algún fallo. Este método realiza una llamada al siguiente método web del sistema de facturación: public reply CancelAndDeactivatePeripheralTicket(int IDTicketPeripheral, string comment, out string message) Center.cs Esta clase contiene los datos que necesitamos de un centro. Para poder visualizar las páginas accesibles solo desde centros, se comprueba que existe variable de sesión llamada center, que contiene la información sobre los artículos imprimibles del centro. Los datos que se almacenan del centro son: 68 Web Document Store and Printing Int32 _identifier: el identificador de centro. <ArticlePrintable> _articlesPrintables: La lista de artículos de impresión del centro. Int32 _numberOfArticles: el número de artículos de impresión. Autoticket.PrintingArticlesResult _result: el resultado de obtener la lista de artículos de impresión a través del servicio web del sistema de facturación. Los valores de este enum son, success, centerFail y databaseFail. El constructor de esta clase es public Center(Int32 identifier). Solo se le pasa el identificador de centro desde el que se pretende acceder y en el constructor se realiza una llamada a su único método, que sirve para obtener los artículos imprimibles del centro. private List<ArticlePrintable> getPrintingArticlesByCenter(int idCenter) Este método instancia la clase Autoticket.cs y llama al método para obtener los artículos imprimibles. Database.cs En esta clase se encuentran declarados los métodos que realizan llamadas a procedimientos almacenados, para operaciones que se aplican sobre bases de datos. La clase Database define los siguientes métodos: public Database(): Constructor de la clase. Obtiene la cadena de conexión de fichero de configuración y la desencripta con la clase AESCrypt de la librería Crypt.dll. public bool AddNewDocument(string byte[] filedata): name, string password, Guid guid, Añade un nuevo documento en la base de datos. 69 Web Document Store and Printing o Los parámetros de entrada son el nombre del documento junto a su extensión, la contraseña que se genera al subir el documento, el Guid que identifica externamente al documento, los datos binarios del documento. o Devuelve un bool que indica si se realizo la cancelación correctamente. public bool CheckPassword(string password): Comprueba si la existe un documento asociado a esa contraseña en la base de datos. o El parámetro de entrada es la contraseña que se genera al subir el documento. o Devuelve un bool que indica si se realizo la cancelación correctamente. public Document GetDocument(string password): Obtiene el documento asociado a la contraseña. o El parámetro de entrada es la contraseña que se genera al subir el documento. o Devuelve un bool que indica si se realizo la cancelación correctamente. public List<Printing> GetDocumentPrintings(string password): Obtiene las impresiones del documento almacenado con la contraseña. o El parámetro de entrada es la contraseña que se genera al subir el documento. o Devuelve un bool que indica si se realizo la cancelación correctamente. public bool SetDocumentPayed(string password): Marca el documento almacenado con esa contraseña como pagado. o El parámetro de entrada es la contraseña que se genera al subir el documento. o Devuelve un bool que indica si se realizo la cancelación correctamente. 70 Web Document Store and Printing public bool SetPrintingTicketCancelled(int idTicket): Marca la impresión asociada a un documento cuyo ticket sea el parámetro de entrada como cancelado. o El parámetro de entrada es el identificador de ticket de periférico almacenado en la base de datos o Devuelve un bool que indica si se realizo la cancelación correctamente. private Object ExecuteStoredProcedure(string List<SqlParameter> parameters): storedProc, Ejecuta un procedimiento almacenado o Los parametros de entrada son el nombre del procedimiento almacenado a ejecutar y la lista de parematros de entrada. o Devuelve un Object que encapsula la informacion devuelta por el procedimiento almacenado. private bool ExecuteStoredProcedureBool(string storedProc, List<SqlParameter> parameters): o Los parametros de entrada son el nombre del procedimiento almacenado a ejecutar y la lista de parematros de entrada. o Devuelve un bool con el resultado de la ejecución del procedimiento almacenado private GetDocumentByCode(string password): Obtiene el documento almacenado, mediante su contraseña. o El parámetro de entrada es la contraseña que se genera al subir el documento. o Devuelve un DataSet que contiene los datos del documento. 71 Web Document Store and Printing private DataSet GetPrintingByDocumentCode(string password): Obtiene las impresiones asociadas a un documento, mediante su contraseña. o El parámetro de entrada es la contraseña que se genera al subir el documento. o Devuelve un DataSet que contiene los datos de las impresiones. private void OpenConnection(): Abre la conexión con la base de datos. private void CloseConnection(): Cierra la conexión con la base de datos. private bool IsDatasetEmpty(DataSet ds): Comprueba si el DataSet está vacío. o El parámetro de entrada es el DataSet. o Devuelve un bool que indica si el DataSet está vacío. Document.cs Es una clase de envoltura de la tabla wds01_Document. Las variables privadas declaradas son: private int _id, DateTime _uploadTime, string _password, Guid _guid, byte[] _fileData, string _name y bool _payed. Todos estos variables tienen los métodos de envoltura, get y set. LanguageTranslator.cs LanguageTranslator se utiliza para leer el archivo XML donde se guardan las sentencias de texto traducidas en varios idiomas que se muestran en la página web. Se almacena una instancia de LanguageTranslator como variable de sesión en la página web. 72 Web Document Store and Printing La clase LanguageTranslator define los siguientes métodos públicos: public LanguageTranslator(): XmlTextReader Constructor de la clase. Crea un nuevo objeto con el fichero XML especificado en el fichero de configuración. public void loadLanguages(): Lee las sentencias del fichero de idiomas y las almacena en una variable de tipo diccionario Dictionary<string, Sentence> siendo el string el nombre de la sentencia y Sentence una instancia de dicha clase. public string translate(string language, string idLabel): Obtiene la traducción de una sentencia en un idioma determinado. o Los parámetros de entrada son el idioma en el que traducir la sentencia y el nombre de la sentencia. o Devuelve un string con la sentencia traducida. public string GetLanguage(string reqLang, object sessLang): lenguaje actual con el que mostrar los textos. Si no existe sessLang reqLang, siempre que existan en el parámetro de configuración Obtiene el se devuelve languages. Si no existen ninguno de ellos, se pone el lenguaje por defecto configurado en default_language. o Los parámetros de entrada son el lenguaje al que traducir el texto y el lenguaje en el que estaban traducidos los textos anteriormente. o Devuelve un string con el lenguaje a traducir el texto. 73 Web Document Store and Printing Printing.cs Es una clase de envoltura de la tabla wds02_Printing. Las variables privadas declaradas son: int _id, int _idDocument, int _idCenter, DateTime _submittedTime, int _totalPages, bool _color, int _idPrintingState, int _idTicket, string _articleDescription, decimal _price y bool _ticketCancelled. Todas estas variables tienen los métodos de envoltura, get y set. RandomPassword.cs Esta clase estática se utiliza para generar contraseñas aleatorias generadas de forma que sean más fácil de recordar. El tamaño mínimo de estas contraseñas será de cuatro caracteres. Las contraseñas van a tener siempre dos silabas y si su longitud es mayor que cuatro, se añaden números hasta completar la longitud. Se declaran las siguientes variables donde se declaran que caracteres se van a utilizar para generar las contraseñas de forma aleatorias: private static readonly char[] VOWELS = new char[] {'a','e','i','o','u'}; private static readonly char[] CONSONANTS = new char[] {'b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z'}; private static readonly char[] NUMBERS = new char[] {'1','2','3','4','5','6','7','8','9'}; La clase RandomPassword define los siguientes métodos públicos: public static string Generate(int length): Genera una contraseña utilizando los arrays definidos para ello. o El parámetro de entrada es la longitud de la cadena, debe ser mayor de cuatro, si no es así, se creara una cadena de cuatro caracteres. o Devuelve un string con la contraseña creada de forma aleatoria, siguiendo el formato establecido por la clase. 74 Web Document Store and Printing public static bool CheckPassword(string password, int length): Comprueba si la contraseña cumple con el formato establecido por la clase. o Los parámetros de entrada son la contraseña y la longitud de la contraseña. o Devuelve un bool indicando si la contraseña introducida cumple el formato establecido por la clase. Sentence.cs Es una clase que contiene las traducciones de una sentencia y define el siguiente método público: public Sentence(string[] language, string[] languagesSentence): Añade la traducción de una sentencia en varios idiomas. o Los parámetros de entrada son un array con los lenguajes de traducción y otro con las sentencias traducidas. SurfOption.cs Esta clase contiene varios enum que definen las opciones de navegación de las siguientes páginas: Upload.aspx public enum UploadOption { ShowSelectFile, ShowSelectFileFromCenter, ShowFileCode, UploadFileToWeb, UploadFileToDataBase } 75 Web Document Store and Printing Download.aspx public enum DownloadOption { ShowInsertFileCode, ShowDocumentLink, DeleteServerFileAndWait, DownloadAndShowLink, ShowPrintingsMonitorize } Payment.aspx. public enum PaymentOption { ShowInsertFileCode, ShowPrintingsPayment, ShowPrintingsCancel, ShowPayedPrintings, ShowPayPanel } También contiene varios enum que definen los mensajes que se pueden mostrar como respuesta a sucesos que ocurren en las siguientes páginas: Upload.aspx public enum UploadMessage { ErrorMaxSize = 1 WarningFileSize, WarningExtension, WarningFileSizeAndExtension, ErrorFileEmpty, ErrorUploadFail, ErrorDataBaseComunication } 76 Web Document Store and Printing Download.aspx public enum DownloadMessage { ErrorNotDownloadOutsideCenter = 1, InfoWaitForStartMonitorize, ErrorDownloadFail, ErrorNotPrintablesArticles, InfoFileDeleted, SucessMonitorizeStop, ErrorDataBaseComunication, ErrorFillMonitorizeTable, } Payment.aspx. public enum PaymentMessage { ErrorNotPaymentOutsideCenter = 1, ErrorNotPrintablesArticles, WarningNotAllPrintingsCompleted, SuccesCancelPayment, ErrorWebServiceComunication, ErrorDataBaseComunication, ErrorFillPaymentTable } 7.2.2.1.4 Clases de las Páginas ASPX Default.aspx.cs Esta es la página de menú donde se muestran enlaces a la página de subir documentos y a la de descargarlos. Al cargar la página se cargan obtiene el idioma actual, que es el que hay que mostrar los textos. También se comprueba si la página está siendo visualizada desde un centro y si es así se añade una instancia de la clase Center como variable de sesión. Se eliminan las variables de sesión que ya no sean útiles y se cargan los textos de la página en función del centro. 77 Web Document Store and Printing Los métodos declarados en Default.aspx.cs son los siguientes: protected void Page_Load(object sender, EventArgs e): Se ejecuta al cargar la página. private void checkAccessible(): Comprueba si la página es accesible desde un centro. Si lo es, crea una instancia de la clase Center y la almacena en la variable de sesión center. private void DeleteSessionValue(): comprueba si existe alguna variable de sesión que se utiliza en el resto de páginas y ya no son necesarias y las borra. Upload.aspx.cs En esta página se suben los documentos al servidor y se muestra un código que sirve al usuario para identificar el documento almacenado. Los controles se dividen en paneles que se muestran u ocultan en función de lo que se quiera mostrar. La página tiene cinco acciones que se pueden llevar a cabo cuando se carga la página: ShowSelectFile: Esta acción muestra el control para subir archivos cuando no se accede desde un centro. ShowSelectFileFromCenter: Esta acción muestra el control para subir archivos cuando se accede desde un centro. Muestra la tabla de artículos imprimibles del centro. ShowFileCode: Esta acción muestra la contraseña relacionada con el archivo cuando se ha subido correctamente el documento en el servidor de base de datos. 78 Web Document Store and Printing UploadFileToWeb: Esta acción sube el documento al servidor web. Si es correcto se recarga la página con la opción UploadFileToDataBase y si no se muestra un mensaje en la página. Message.aspx. UploadFileToDataBase: Esta acción almacena el documento del servidor Web a la base de datos. Si es correcto se recarga la página con la opción ShowFileCode y si no se muestra un mensaje en la página Message.aspx. Los métodos declarados en Upload.aspx.cs son los siguientes: protected void Page_Load(object sender, EventArgs e): Se ejecuta al cargar la página. private SurfOption.UploadOption CheckOption(): Selecciona la opción a realizar en la página web. private bool CheckAccessibleFromCenter(): Comprueba si la página se está accediendo desde un centro. Bien por tener una instancia de la clase almacenado en la variable de sesión center, Center por tener un parámetro en la dirección URL que lo indique o por tener un parámetro de configuración que indique el centro. Si es accesible y no existía la variable de sesión, la crea. private void CheckSessionItems(SurfOption.UploadOption option): Elimina las variables de sesión que no se necesitan para cada opción. private void HidePanels(bool upload, bool code, bool table): Oculta los paneles que no se usan para cada opción de navegación de página. private void FillArticlesTable(): Rellena la tabla con los artículos imprimibles del centro. 79 Web Document Store and Printing protected void btnUpload_Click(object sender, EventArgs e): Evento que se ejecuta para al pulsar el botón de subida para almacenar el archivo en la base de datos. private CheckFileResult CheckFileSize(int fileSize): Comprueba el tamaño del archivo a subir. private CheckFileResult CheckFileExtension(string name): Comprueba si la extensión del archivo es de tipo imprimible por configuración. private void strFileName): UploadFileToWebServer(HttpPostedFile uploadFile, string Almacena el archivo temporalmente en el servidor web. private void AddFile(string filePath): Almacena el archivo que se encuentra en el servidor web en el servidor de base de datos. private void DeleteDocument(string filePath): Borra el archivo del servidor web. private string GetFileExtension(string fileName): Obtiene la extensión del archivo. private bool FileExtensionIsApproved(string extension): Comprueba si la extensión esta añadida por configuración como imprimible. protected void btnMoreUpload_Click(object sender, EventArgs e): Evento que se ejecuta al pulsar el botón para mostrar la opción de añadir más documentos en la base de datos. 80 Web Document Store and Printing Download.aspx.cs En esta página se descargan los documentos almacenados anteriormente y se realiza la monitorización de los trabajos de impresión enviados del documento descargado. La página tiene cinco acciones que se pueden llevar a cabo cuando se carga la página: ShowInsertFileCode: Esta acción se muestra al cargar la página por primera vez. Permite introducir el código del documento, para descargarlo. Si el código existe en la base de datos y se puede descargar, se recarga la página con la opción ShowDocumentLink y si no se muestra un mensaje en la página Message.aspx. ShowDocumentLink: Esta opción descarga el documento de la base de datos al servidor web durante un tiempo establecido por configuración y se muestra un enlace para que el usuario lo descargue o lo abra. Cuando este tiempo transcurre, se recarga la página en la opción DownloadAndShowLink. DeleteServerFileAndWait: Esta opción elimina el documento del servidor web y muestra un mensaje en la página preguntando al usuario si empezar la monitorización o mostrar otra vez el enlace. Si hay que monitorizar las impresiones se recarga la página con la opción ShowPrintingsMonitorize y en caso contrario con la opción DownloadAndShowLink. DownloadAndShowLink: Descarga el documento de la base de datos al servidor web y recarga la pagina en la opción ShowDocumentLink. ShowPrintingsMonitorize: Esta acción se encarga de mostrar los datos sobre las impresiones del documento realizadas, se refresca automáticamente y se leen los datos de la tabla de impresiones de la base de datos. 81 Web Document Store and Printing Los métodos declarados en Download.aspx.cs son los siguientes: protected void Page_Load(object sender, EventArgs e): Se ejecuta al cargar la página. private SurfOption.DownloadOption realizar en la página CheckAccessibleFromCenter Message.aspx private web. CheckOption(): Selecciona la opción a Realiza llamada una la método y si no es accesible se muestra un mensaje en la pagina indicando que solo se puede acceder a la pagina desde un centro. bool CheckAccessibleFromCenter(): Comprueba si la página se está accediendo desde un centro. Bien por tener una instancia de la clase almacenado en la variable de sesión center, Center por tener un parámetro en la dirección URL que lo indique o por tener un parámetro de configuración que indique el centro. Si es accesible y no existía la variable de sesión, la crea. private void CheckSessionItems(SurfOption.DownloadOption option): Elimina las variables de sesión que no se necesitan para cada opción. private void printings): HidePanels(bool code, bool table, bool link, bool Oculta los paneles que no se usan para cada opción de navegación de página. private void RefreshPage(string action): Añade una etiqueta HTML indicando que se debe recargar la página en el periodo de tiempo indicado. private void FillArticlesTable(): Rellena la tabla con los artículos imprimibles del centro. private bool FillPrintingTable(string code): Rellena la tabla con las impresiones enviadas del documento que se descargo. 82 Web Document Store and Printing private void ShowMonitorizeLinks(bool showPause): Muestra el link para parar la monitorización si esta activa o para reiniciarla si esta pausada. private List<Printing> LeakPrintingsByCenter(List<Printing> printings): Filtra los artículos que no son de ese centro. protected void btnDownloadWeb_Click(object sender, EventArgs e): Evento que se ejecuta tras pulsar el botón para descargar el documento. private void WriteDocument(string password): Filtra las impresiones que no pertenecen al centro actual. private bool DeleteDocument(string filePath): Elimina el documento del servidor web. private void DeleteDocument CloseFileWebBrowser(): Realiza una llamada al método para eliminar el archivo del servidor web. private string GetFileExtension(string fileName): Devuelve la extensión del nombre del archivo. private string getFileName(string fileName): Devuelve el nombre del archivo sin la extensión. Payment.aspx.cs En esta página se muestran las impresiones realizadas para el documento y se calcula el precio total en función de las copias impresas, que están asociadas a un artículo de impresión del centro. 83 Web Document Store and Printing La página tiene cinco acciones que se pueden llevar a cabo cuando se carga la página: ShowInsertFileCode: Esta acción se muestra al cargar la página por primera vez. Permite introducir el código del documento, para mostrar las impresiones realizadas. Si el documento existe, se recarga la página y se muestra la acción si no fue marcado como pagado anteriormente y la opción ShowPrintingsPayment ShowPayedPrintings en caso contrario. ShowPrintingsPayment: Esta acción muestra las impresiones realizadas del documento y el precio total de todas ellas. Pulsando sobre los RadioButton de cada impresión recarga la página y se muestra la opción ShowPrintingsCancel, que permite cancelar esa impresión. Se puede ejecutar el pago habiendo pulsado el checkbox primero. Si se marca el documento como pagado en la base de datos se recarga la página y se muestra la acción ShowPayPanel, en caso contrario se muestra un error en el pago. ShowPrintingsCancel: Permite cancelar una impresión seleccionada anteriormente desde la tabla de impresiones. Se tiene que escribir el motivo de la cancelación. Se muestra un mensaje en la página Message.aspx indicando si la operación se realizo correctamente. ShowPayedPrintings: Se muestra el nombre del documento y se indica que las impresiones ya han sido pagadas anteriormente. ShowPayPanel: Esta opción se muestra cuando se ha realizado el pago correctamente. Los métodos declarados en Payment.aspx.cs son los siguientes: protected void Page_Load(object sender, EventArgs e): Se ejecuta al cargar la página. 84 Web Document Store and Printing private SurfOption.PaymentOption CheckOption(): en la página web. Realiza una llamada la método Selecciona la opción a realizar CheckAccessibleFromCenter y si no es accesible se muestra un mensaje en la pagina Message.aspx indicando que solo se puede acceder a la pagina desde un centro. private bool CheckAccessibleFromCenter(): Comprueba si la página se está accediendo desde un centro. Bien por tener una instancia de la clase almacenado en la variable de sesión center, Center por tener un parámetro en la dirección URL que lo indique o por tener un parámetro de configuración que indique el centro. Si es accesible y no existía la variable de sesión, la crea. private void CheckSessionItems(SurfOption.PaymentOption option): Elimina las variables de sesión que no se necesitan para cada opción. private void HidePanels(bool code, bool table, bool cancel, bool pay, bool payLink): Oculta los paneles que no se usan para cada opción de navegación de página. protected void btnPaymentWeb_Click(object sender, EventArgs e): Evento que se ejecuta al pulsar el botón para mostrar las impresiones realizadas para el documento que se introdujo la contraseña. private void FillPrintingTable(string code): Rellena la tabla con las impresiones del documento. private List<Printing> LeakPrintings(List<Printing> printings): Filtra las impresiones que estén no sean de ese centro, las impresiones canceladas y las que no hayan generado ticket. protected void btnPay_Click(object sender, EventArgs e): Evento que se ejecuta pulsando el botón para marcar el documento como pagado. 85 Web Document Store and Printing private void DocumentPay(string code): Intenta marcar el documento de la base de datos como pagado. protected void btnCancel_Click(object sender, EventArgs e): Evento que se ejecuta la pulsar el botón cancelar, para cancelar una impresión. protected void btnExitCancel_Click(object sender, EventArgs e): Evento que se ejecuta al pulsan el botón para finalizar la cancelación de la impresión. 7.2.2.2. Configuración La configuración de este componente se realiza a través de su fichero de configuración “web.config”. <?xml version="1.0"?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <appSettings> <!-- Language configuration--> <add key="default_language" value="es"/> <add key="languages" value="es,en,pt,fr"/><!-value="ESPAÑOL,INGLES,PORTUGUES,ALEMAN,FRANCES"/>--><!--assigned Locale ID by microsoft (http://msdn.microsoft.com/es-es/goglobal/bb964664(en-us).aspx)--> <add key="XmlTranslationFile" value="language\Languages.xml"/> <!-- Upload file to server folder--> <add key="tempDocPath" value="WDSFiles"/> <!--max file size MB (Max value 100 httpRuntime maxRequestLength="102400")--> <add key="MaxFileSize" value="20"/> <add key="SizeToShowMessage" value="10"/> <!-- Refresh page --> <add key="SecsToIniciateMonitor" value="20"/><!-- If empty, value = 20 --> <add key="RefreshSecTime" value="5"/><!-- If empty, value = 5 --> <!-- The extension to be show--> <add key="supportedFileTypes" value="txt, doc, docx, xls, xlsx, ppt, pdf, bmp, tif, tiff, gif, jpg, jpeg, png"/> <add key="center" value=""/> <!-- Connection strings, WDS database conexion string encrypt with textcrypter --> <add key="WDSDataBase" value="******************************************************"/> <!-- AutoTicket webservice--> <add key="WS_AutoTicket.WebService" value="http://localhost:11872/webservicefacturacion/WebService.asmx"/> 86 Web Document Store and Printing </appSettings> <log4net> <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="C:\Temp\WDSWeb.log"/> <param name="AppendToFile" value="true"/> <appendToFile value="true"/> <rollingStyle value="Size"/> <maxSizeRollBackups value="10"/> <maximumFileSize value="3MB"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%d{dd-MM-yyyy HH:mm:ss} %-5p - %l - %m%n"/> </layout> </appender> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="[Header]\r\n"/> <param name="Footer" value="[Footer]\r\n"/> <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/> </layout> </appender> <root> <level value="debug"/> <appender-ref ref="RollingFileAppender"/> <appender-ref ref="ConsoleAppender"/> </root> </log4net> <system.web> <compilation debug="true"/> <authentication mode="Windows"/> <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm"> </customErrors> <httpRuntime executionTimeout="90" maxRequestLength="102400" useFullyQualifiedRedirectUrl="true" requestLengthDiskThreshold="20480"/><!--100MB tamaño maximo-> <!-- requestLengthDiskThreshold: igual al valor de tamaño maximo en kb (MaxFileSize*1024)--> <mobileControls cookielessDataDictionaryType="System.Web.Mobile.CookielessData"/> <deviceFilters> <filter name="isJPhone" compare="Type" argument="J-Phone"/> … <filter name="supportsVoiceCalls" compare="CanInitiateVoiceCall" argument="true"/> </deviceFilters> </system.web> </configuration> 87 Web Document Store and Printing 7.2.3. Servicio Web El servicio web permite al servicio Windows de monitorización de impresiones comunicarse con la base de datos del sistema. El servicio web requiere autenticación mediante cabecera SOAP. El identificador de usuario y contraseña están ofuscados con TextCrypter, usándose la misma clave de ofuscación para el caso de la cadena de conexión con la base de datos. Hay que ponerse en contacto con el desarrollador del Sitio Web para obtener la clave de ofuscación. Hay que tener en cuenta que si cambian estos parámetros, habría que cambiarlos en las aplicaciones que llamen a los webmethods del servicio web. 7.2.3.1. Componentes 7.2.3.1.1 Webmethods Tiene publicados cuatro webmethods: public bool AddPrinting(Guid uniqueIdentifier, int idCenter, DateTime submittedTime, int totalPages, bool color,int printingState, int idTicket, string articleDescription, decimal price) Permite añadir una impresión asociada a un documento almacenado en la base de datos. Devuelve un bool indicando si la operación pudo realizarse con éxito o no. public string GetDocumentPassword(Guid guid) Permite obtener el código de documento asociado a un Guid. Devuelve un string con el código asociado al Guid o un null si no encontró un documento con ese Guid en la base de datos. 88 Web Document Store and Printing public bool UpdatePrinting(Guid uniqueIdentifier, DateTime submittedTime, int printingState) Permite actualizar el estado de una impresión mediante el Guid que identifica externamente al documento y de la fecha de envió a la cola de impresión. Devuelve un bool indicando si la operación pudo realizarse con éxito o no. public bool UpdatePrintingWithTicketCancelled(Guid uniqueIdentifier, DateTime submittedTime, int printingState) Permite actualizar el estado de una impresión y establecer el campo booleano de cancelación de ticket como true. Devuelve un bool indicando si la operación pudo realizarse con éxito o no. Database.cs Los métodos de esta clase son utilizados por las webmethodos para realizar operaciones con la base de datos. Document.cs Es una clase de envoltura de la tabla wds01_Document. Es serializable, para que las aplicaciones que utilizan el servicio web puedan utilizar esta clase. Printing.cs Es una clase de envoltura de la tabla wds02_Printing. Es serializable, para que las aplicaciones que utilizan el servicio web puedan utilizar esta clase. 89 Web Document Store and Printing 7.2.3.2. Configuración La configuración de este componente se realiza a través de su fichero de configuración “web.config”. <?xml version="1.0"?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <appSettings> <!-- Connection strings, WDS database conexion string encrypt with textcrypter --> <add key="WDSDataBase" value="*******************************************************"/> <!-- WDSUser --> <add key="user" value="*********************" /> <!-- WDSpass --> <add key="password" value="*********************" /> </appSettings> <log4net> <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="C:\Temp\WDSws.log"/> <param name="AppendToFile" value="true"/> <appendToFile value="true"/> <rollingStyle value="Size"/> <maxSizeRollBackups value="10"/> <maximumFileSize value="3MB"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value=" %d{dd-MM-yyyy HH:mm:ss} %-5p - %l - %m%n "/> </layout> </appender> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="[Header]\r\n"/> <param name="Footer" value="[Footer]\r\n"/> <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/> </layout> </appender> <root> <level value="debug"/> <appender-ref ref="RollingFileAppender"/> <appender-ref ref="ConsoleAppender"/> </root> </log4net> <system.web> <compilation debug="true"/> <authentication mode="Windows"/> </system.web> </configuration> 90 Web Document Store and Printing 7.2.4. Servicio de monitorización de impresiones Identificado en el esquema como “WDS Monitor”, es un servicio Windows que monitoriza la cola de impresión del sistema operativo en el cual está instalado. La monitorización se realiza mediante un subcomponente llamado SpoolerHook que, además de monitorizar, permite ejecutar acciones sobre las impresiones que llegan a la cola de impresión. Cuando llega una impresión a la cola, se comprueba si el nombre del documento contiene un GUID que lo identifica como un documento gestionado por el sistema. Si no contiene un GUID válido, se verifica si el nombre del documento cumple con una determinada expresión regular que habilita su impresión. Si no cumple ninguna de estas condiciones, la impresión se cancela. Cuando se trata de un documento gestionado por el sistema, se genera un ticket asociado a la impresión mediante el servicio web del sistema de facturación, y se monitoriza el estado de la impresora con la cual se está realizando la impresión. En caso de que durante la impresión la impresora se encuentre en un estado obstructivo, se cancela el ticket generado y la impresión. Un estado obstructivo es aquel que impide que un documento se siga imprimiendo correctamente. Para la comprobación de documentos, creación y actualización de impresiones dentro del sistema, se realizan llamadas al Servicio Web del mismo. La solución de Visual Studio que contiene el código del Servicio está formada por varios proyectos: los proyectos Core, NamePipes y SpoolerHook se describen como componentes en el siguiente apartado. 91 Web Document Store and Printing Los proyectos HookClient y HookInstaller son proyectos que se emplean para instalar (desinstalar) el SpoolerHook añadiendo (borrando) una entrada en el registro de Windows que hace referencia a la librería del SpoolerHook. El proyecto HookInstallerApp tiene como salida una aplicación de ventana que se usa para instalar e desinstalar el SpoolerHook. Se apoya en los proyectos HookClient y HookInstaller. El proyecto WDSMonitorApp es un proyecto de consola que se emplea para probar la funcionalidad del Servicio sin tener que instalarlo, permitiendo así hacer depuraciones de código. Se debe hacer uso de la aplicación de ventana “HookInstallerApp.exe” que es salida del proyecto con el mismo nombre, para instalar y desinstalar el SpoolerHook. El proyecto WDSMonitorService es el proyecto que crea el Servicio Windows en sí. Depende de las salidas de los proyectos HookClient y HookInstaller para instalar (desinstalar) el SpoolerHook durante la instalación (desinstalación) del Servicio Windows. El proyecto WDSMonitorInstaller genera el instalador (MSI) para el Servicio Windows. El proyecto Crypt se usa para descodificar las cadenas de caracteres ofuscadas. 7.2.4.1. Componentes 7.2.4.1.1 Core Contiene la funcionalidad principal del Servicio Windows. El proyecto homónimo hace referencia a dos carpetas que agrupan las clases necesarias para procesar información sobre una impresora y una impresión, y que son respectivamente “Printer” y “Printing”. 92 Web Document Store and Printing Seguidamente se lista el resto de clases que usa el componente Core: Core.cs: es una clase que se usa para crear una instancia del objeto Core que desencadena la funcionalidad principal del Servicio, creando una instancia única la de clase PrintingMonitor. Durante la creación de la instancia está instalado el SpoolerHook, mediante la llamada al método Core, se comprueba si CheckSpoolerHooker() ubicado en la misma clase. PrintingMonitor.cs: en esta clase se concentran las operaciones que se realizan durante el procesamiento de impresiones según su estado, alta y actualización de la información relativa a las impresiones dentro del sistema mediante su servicio web y creación de tickets asociados a las impresiones mediante el servicio web del sistema de facturación. Dentro de esta clase se crean dos tipos de suscripciones a eventos: notificación sobre impresiones desde la clase PrintingPipe, realiza dentro del método y la notificación del estado de una ProcessPrinting, cuyo tratamiento se impresora desde la clase PrinterStatusMonitor, cuyo tratamiento se realiza dentro de la llamada al método ProcessInterruptedPrinting. PrintingPipe.cs: esta clase se encarga de establecer comunicación con el SpoolerHook mediante el mecanismo de tuberías haciendo uso de la clase PipeConnection. Se mantiene a la escucha sobre la tubería hasta que recibe información sobre una impresión. Cuando se produce esto último, se da formato a la información recibida como un objeto Printing y se pasa como parámetro al método delegado OnNotify. Este método delegado dispone de un parámetro de salida que se usa como respuesta para la acción a realizar con respecto a la impresión notificada: seguir imprimiendo o cancelar la impresión, enviándose como mensaje al SpoolerHook mediante la tubería. 93 Web Document Store and Printing PrinterStatusMonitor.cs: es la clase que contiene la funcionalidad necesaria para obtener el estado una impresora. Se apoya en funciones importadas desde el controlador de la cola de impresión del sistema operativo. La frecuencia de comprobación del estado de una impresora viene determinada por un temporizador (objeto Timer) que, cuando se produce el evento asociado (OnTimedEvent), comprueba el estado de la impresora invocando un método delegado en caso de que el estado de la impresora obtenido sea válido. Este invocación recibe como parámetros la impresión interrumpida a causa del tratamiento del estado y la acción a tomar dependiendo de si el estado de la impresora es obstructivo o no (cancelar o seguir imprimiendo respectivamente). SectionConfigHander.cs: esta clase representa el manejador para las secciones de configuración de los estados obstructivos de una impresora y los parámetros de la expresión regular para las impresiones. 7.2.4.1.2 NamePipes Este componente contiene las clases necesarias para establecer una comunicación basada en el mecanismo de tuberías con nombre. Dichas clases son las que se describen seguidamente: PipeConnection.cs: esta clase contiene los métodos básicos para crear una tubería (constructor de la clase PipeConnection), conectarse a una tubería (Connect), desconectarse de una tubería (Disconnect), leer de una tubería (ReadBytes), escribir en una tubería (WriteBytes) y cerrar una tubería (Close). Todos es métodos se apoyan en métodos de la clase NamedPipeWrapper. 94 Web Document Store and Printing NamedPipeWrapper.cs: Implementa las operaciones que se realizan sobre tuberías con nombre. Esta clase hace uso de los métodos importados desde la librería del sistema kernel32.dll y declarados dentro de la clase PipeNative. PipeNative.cs: incluye declaraciones de constantes, estructuras e importaciones de funciones desde librerías del sistema (kernel32.dll y advapi32.dll) que son necesarias para establecer una comunicación mediante tuberías con nombre. PipeHandle.cs: clase que declara el manejador de una tubería con nombre. Este manejador está compuesto por un puntero (IntPtr) y el estado de la conexión con la tubería, a la que hace referencia el manejador, de tipo enum (PipeConnectionState). NamedPipeIOException.cs: esta clase se usa para tratar como excepción cualquier error que se pueda producir durante una comunicación mediante pipe con nombres. Se lanza como excepción un objeto de tipo NamedPipeIOException. 7.2.4.1.3 SpoolerHook En el proyecto de librería de C++ SpoolerHook se encuentra la funcionalidad principal del subcomponente SpoolerHook. Consta de las siguientes clases: SpoolerHook.cpp: define el punto de entrada de la librería SpoolerHook.dll. En esta clase se implementan las operaciones que se realizan al interceptar llamadas al sistema desde el controlador de la cola de impresión. Estas llamadas son: StartDocPrinterW y EndDocPrinter. SetJobW, La intercepción se efectúa haciendo uso de la utilidad Detours. Hay que tener en cuenta que para compilar el proyecto, además de dicha utilidad, debe estar instalado en la máquina en la cual se realiza el desarrollo el kit de desarrollo de controladores para Windows (Windows DDK). 95 Web Document Store and Printing RequestManager.cpp: Esta clase se usa para notificar al Servicio Windows (o cualquier otro componente) información vinculada a impresiones. La notificación se efectúa mediante una comunicación basada en una tubería con nombre. Las funciones que implementan el SendJobNotification. cometido de la notificación son y AddRequest También se implementa en esta clase una función con la que se obtiene información adicional sobre una impresión: GetJobDevMode. Marshal.cpp: se emplea para serializar en forma de bytes la información relativa a una impresión, con el fin de escribir dichos bytes en la tubería con nombre. Esta operación de serialización se realiza mediante la función que se apoya a su vez en las funciones MarshallDownStructure WriteNum, WriteMessage y y WriteSystemTime declaras en la misma clase. AutoCS.cpp: esta clase implementa un mecanismo de seguridad para la concurrencia de procesos mediante secciones críticas. Log.cpp: esta clase define el sistema de log de la librería mediante escritura de las trazas que genera la librería en un fichero de texto. utils.cpp: esta clase agrupa una serie de funciones que distinto cometido y de las que hacen uso las clases SpoolerHook.cpp y RequestManager.cpp. 7.2.4.2. Configuración Este componente se configura mediante el fichero de configuración con extensión “*.config”, situado al mismo nivel que el ejecutable dentro de la ruta de destino. <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> <section name="PrintingRegExLabels" type="Fractalia.GIS.WDSMonitor.SectionConfigHander, Core" /> 96 Web Document Store and Printing <section name="ObstructivePrinterStatus" type="Fractalia.GIS.WDSMonitor.SectionConfigHander, Core" /> </configSections> <log4net> <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="c:\temp\WDSMonitorService.log" /> <param name="AppendToFile" value="true" /> <appendToFile value="true" /> <rollingStyle value="Size" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="1000KB" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%d{dd/MM/yyyy HH:mm:ss} [%t] %-5p - %l - %m%n" /> </layout> </appender> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="[Header]\r\n" /> <param name="Footer" value="[Footer]\r\n" /> <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" /> </layout> </appender> <root> <level value="info" /> <appender-ref ref="RollingFileAppender" /> <appender-ref ref="ConsoleAppender" /> </root> </log4net> <appSettings> <!-- The ID of the Center where the WDSMonitor is installed --> <add key="CenterID" value=""/> <!-- The URL of the WDS Webservice --> <add key="WDSwsURL" value="http://localhost:1390/WDSws/WebService.asmx"/> <!-- The encrypted user name for validating against the WDS Webservice --> <add key="WDSwsEncrypted_user" value="********************"/> <!-- The encrypted password associated to the user for validating against the WDS Webservice --> <add key="WDSwsEncrypted_pwd" value="*************************"/> <!-- The URL of the AutoTicket Webservice --> <add key="AutoTicketwsURL" value="http://localhost/webservicefacturacion/WebService.asmx "/> <!-- The time frequency of refreshing the status of printers in seconds --> <add key="PrinterStatusRefresh" value="3" /> <!-- The parametrized regular expression for printing documents without valid GUID.--> <add key="PrintingRegEx" value="regEx1%label1%regEx2%label2%regEx3%"/> </appSettings> <!-- A section that contains the values of the regular expression parameters --> <PrintingRegExLabels> <label1>Value of label1</label1> <label2>Value of label2</label2> </PrintingRegExLabels> 97 Web Document Store and Printing <!-- A section that contains obstructive printer status --> <ObstructivePrinterStatus> <Status>PRINTER_STATUS_ERROR</Status> <Status>PRINTER_STATUS_NO_TONER</Status> <Status>PRINTER_STATUS_NOT_AVAILABLE</Status> <Status>PRINTER_STATUS_OFFLINE</Status> <Status>PRINTER_STATUS_PAPER_JAM</Status> <Status>PRINTER_STATUS_PENDING_DELETION</Status> <Status>PRINTER_STATUS_SERVER_UNKNOWN</Status> </ObstructivePrinterStatus> </configuration> 7.2.5. Tarea Programada WDSDbCleaner es una aplicación de consola que al instalarla crea una tarea programada para eliminar documentos de la base de datos que cumplan una de las siguientes condiciones: Si se han pagado las impresiones asociadas a ese documento. Si el documento lleva almacenado en el servidor más tiempo que el establecido en configuración. La tarea programada se llama WDSDatabaseCleaner y se ejecuta diariamente a una hora determinada en la instalación. 7.2.5.1. Componentes Program.cs Es la clase principal del proyecto, crea una instancia de FileDelete y llama a su único método para borrar documentos de la base de datos del sistema. 98 Web Document Store and Printing FileDelete.cs El constructor crea una nueva instancia de la clase operaciones con la base de datos y su único método, parámetro MaxStoredDay DataBase, que sirve para realizar public void DeleteFiles(), lee el de el fichero de configuración que indica el número de días que permanecen los documentos almacenados en el servidor. Si este parámetro está vacío llama a un método de la clase DataBase para borrar los archivos marcados como pagados. Si este parámetro contiene un número entero se llama a un método para borrar los archivos pagados y los archivos que lleve más días almacenados en el servidor que el número de días máximo establecido por configuración. DataBase.cs Esta clase se encarga de realizar las operaciones con la base de datos. Tiene dos funciones: public int DeletePayedOrExpiredFiles(int MaxStoredDays), que elimina los documentos marcados como pagados y los que hayan sido almacenados hace mas de el numero de dias pasados como argumento. public int DeletedPayedFiles(), que elimina del servidor, los documentos cuyas empresiones hayan sido pagados. Ambas devuelven el número de documentos borrados de la base de datos. 7.2.5.2. Configuración Este componente se configura mediante el fichero de configuración con extensión “*.config”, situado al mismo nivel que el ejecutable dentro de la ruta de destino. <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <appSettings> <!-- Connection strings, WDS database conexion string encrypt with textcrypter --> 99 Web Document Store and Printing <add key="WDSDataBase" value="*************************************************"/> <add key="MaxStoredDays" value="7"/> </appSettings> <log4net> <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="c:\Temp\WDSDbCleaner.log" /> <param name="AppendToFile" value="true" /> <appendToFile value="true"/> <rollingStyle value="Size"/> <maxSizeRollBackups value="10" /> <maximumFileSize value="3MB"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%d{dd-MM-yyyy HH:mm:ss} %-5p - %l - %m%n"/> </layout> </appender> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="[Header]\r\n"/> <param name="Footer" value="[Footer]\r\n"/> <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/> </layout> </appender> <root> <level value="DEBUG"/> <appender-ref ref="RollingFileAppender"/> <appender-ref ref="ConsoleAppender"/> </root> </log4net> </configuration> 100 Web Document Store and Printing 8. Planificación Web Document Store and Printing 8.1. Descripción de las actividades llevadas a cabo. Desde el punto de vista de la organización de trabajos el presente proyecto se divide en dos iteraciones, elaborando en primer lugar una primera propuesta de especificación del sistema y los primeros prototipos de prueba, para en la segunda iteración completar la definición del sistema y desarrollar todos los módulos completos. La organización de trabajos realizados ha sido la siguiente: 8.1.1. Iteración 1 Primera iteración en el ciclo de desarrollo, con una duración aproximada de 4 meses, cuyo resultado fue una primera definición del sistema, junto con los primeros prototipos de la solución y sus pruebas correspondientes. Se dividió en las siguientes fases: 8.1.1.1. FASE 1 – Análisis y definición de casos de uso. Especificación de requisitos funcionales. Inicio: 01/10/2008 Fin: 28/10/2008 En esta fase se analizaron los perfiles de usuario y distintos casos de uso que puedan hacer de la solución, así como las necesidades de funcionamiento requeridas y derivadas de ellos. El objetivo de esta fase fue identificar todas las casuísticas que se puedan encontrar en el uso de la solución por parte de los usuarios finales, derivadas de distintos perfiles de uso, los distintos flujos de utilización que puedan presentarse y las necesidades concretas que puedan encontrarse durante su seguimiento. A partir de los casos de uso encontrados, incluyendo las interfaces software que definidas para los distintos módulos, se especificaron los requisitos funcionales a cumplir por la solución, plasmando ambos formalmente en un primer borrador del documento de especificación de requisitos y diseño de la arquitectura de la solución. 102 Web Document Store and Printing 8.1.1.2. FASE 2 – Elaboración de prototipos de los distintos módulos. Inicio: 29/10/2008 Fin: 10/01/2009 Durante esta fase se comenzó la construcción del sistema. Atendiendo a todas las necesidades y requisitos especificados en la fase anterior, se construyeron prototipos de todos los módulos del sistema, incluidas las interconexiones entre los mismos. El resultado de esta fase fue un primer sistema con funcionalidades reducidas, a partir del cual se pretendía evaluar la viabilidad de la solución y las necesidades más específicas que no se encontraran en la primera fase de definición. 8.1.1.3. FASE 3 – Pruebas iniciales Inicio: 11/01/2009 Fin: 30/01/2009 Una vez construidos los primeros prototipos, se procedió a realizar las pruebas oportunas, tanto unitarias para cada módulo como del correcto funcionamiento de los distintos módulos entre sí. A pesar de que las pruebas fueron satisfactorias, se detectaron varias carencias en el sistema que debían ser incluidas en la definición de la solución para que esta aportase una funcionalidad completa a los distintos perfiles de usuarios detectados. 8.1.2. Iteración 2 Segunda iteración del ciclo de desarrollo, en la cual se realizó la especificación final de todas las necesidades y requisitos a cubrir a partir de los datos obtenidos en la primera iteración. Una vez definido el sistema por completo, se pasó a completar su construcción y diseño, dando lugar a la solución final. 103 Web Document Store and Printing 8.1.2.1. FASE 4 – Definición final de requisitos de la solución Inicio: 31/01/2009 Fin: 03/03/2009 A partir de los datos obtenidos de las pruebas realizadas con los prototipos iniciales, y llevando a cabo un análisis más en profundidad de casuísticas no encontradas durante la primera fase de definición, se completó esta detallándola en la medida de lo necesario. El resultado de esta fase fue una propuesta funcional completa a partir de la cual se puedo comenzar la construcción de la solución final. 8.1.2.2. FASE 5 – Desarrollo de la solución Inicio: 04/01/2009 Fin: 09/07/2009 Una vez se obtuvo una definición completa de la solución, se pasó a su construcción final. Esta construcción abarca desde el desarrollo de los distintos módulos y de las interconexiones entre ellos, hasta el diseño de los interfaces finales y su adaptación para mejorar al máximo la usabilidad de las mismas. El resultado de esta fase fue un sistema completo y funcional ya preparado para llevar a cabo las pruebas finales y la validación de los resultados obtenidos. 8.1.2.3. FASE 6 – Pruebas finales Inicio: 10/07/2009 Fin: 15/08/2009 Una vez construido el sistema completo se procedió a realizar todas las pruebas necesarias para su validación final, que incluían el funcionamiento aislado de cada componente, las interconexiones entre los mismos y un análisis de la facilidad en su utilización por parte de los usuarios finales. 104 Web Document Store and Printing Durante las pruebas se encontraron pequeños defectos que fueron corregidos, de manera que al terminar esta fase se disponía de la solución completa, revisada y lista para su puesta en explotación. 8.1.2.4. FASE 7 – Documentación Inicio: 01/10/2008 Fin: 31/08/2009 Esta se trata de una fase auxiliar, incluida en esta iteración por mero pragmatismo, cuyo objetivo es documentar el desarrollo del proyecto desde su inicio hasta las conclusiones finales. La documentación del proyecto ha sido una tarea llevada a cabo de manera continua durante toda la elaboración del proyecto, por lo que abarca todo el tiempo de desarrollo de principio a fin, e incluso algún tiempo más invertido para completarla a la finalización del proyecto. 8.2. Resumen de la planificación A continuación se muestra un diagrama resumen de la planificación seguida para el desarrollo del proyecto: Año 2008 9 10 11 Año 2009 12 1 2 3 4 5 6 7 8 9 Fase 1 - Definición inicial ITERACIÓN 1 Fase 2 - Prototipos Fase 3 - Pruebas iniciales Fase 6 - Definición completa ITERACIÓN 2 Fase 7 - Desarrollo de la solución Fase 8 - Pruebas finales Fase 9 - Documentación Figura 4. Resumen de la planificación del proyecto 105 Web Document Store and Printing 9. Estudio económico Web Document Store and Printing Los costes definidos para el proyecto incluyen el trabajo de definición y desarrollo, los costes de materiales y de software necesarios para el desarrollo y los costes indirectos asociados al mismo. 9.1. Costes de personal El presente proyecto ha sido desarrollado por un ingeniero informático trabajando una media de 8 horas a la semana durante 40 semanas., lo que hace un total de 320 horas Suponiendo un salario de 15€ por hora trabajada, el coste total de personal asciende a 4800€. Detallándolo según las distintas fases del proyecto, los costes de personal son los siguientes: FASE HORAS COSTE/HORA PARCIAL 1 30 15,00 € 450,00 € 2 70 15,00 € 1050,00 € 3 24 15,00 € 360,00 € 4 32 15,00 € 480,00 € 5 140 15,00 € 2100,00 € 6 24 15,00 € 360,00 € 7 Todo el proyecto N/A N/A TOTAL 4800,00 € 9.2. Costes en materiales Los costes de materiales asociados al proyecto incluyen tanto el hardware como el software necesario para el desarrollo del proyecto. Además de todos los elementos necesarios para el desarrollo propiamente dicho, se incluyen los costes de materiales necesarios para las pruebas del sistema. De la misma manera se incluyen los costes asociados a la publicación del proyecto. 107 Web Document Store and Printing Sin embargo, se excluyen varios elementos por disponer de ellos de manera previa y encontrarse completamente amortizados. Entre estos elementos se incluyen los servidores utilizados junto con sus licencias asociadas de sistemas operativos, y la licencia de la herramienta de desarrollo de software. De esta manera, los costes en materiales resultaron como se especifica a continuación: CONCEPTO UNIDADES PRECIO UNITARIO PARCIAL Equipo PC de desarrollo 1 700,00 € 700,00 € Impresora 1 300,00 € 300,00 € Microsoft Windows XP Professional 1 99,00 € 99,00 € Microsoft Office 2007 1 129,99 € 129,99 € Libros de apoyo 1 63,99 € 63,99 € Reprografía y encuadernación 1 50,60 € 50,60 € TOTAL 2843,58 € 9.3. Costes indirectos Los costes indirectos asociados al proyecto incluyen una estimación del coste de suministros junto con los costes de gestión del proyecto. Los costes indirectos pueden resumirse de la siguiente manera: CONCEPTO PARCIAL Suministros generales 210,00 € Gastos de gestión 350,00 € TOTAL 560,00 € 9.4. Resumen de costes La suma de todos los costes asociados al proyecto nos proporciona el precio final asociado al mismo, incluyendo todo lo necesario desde su inicio hasta su posible puesta en explotación. 108 Web Document Store and Printing Los costes totales del proyecto se resumen como sigue: CONCEPTO PARCIAL Costes de personal 4800,00 € Costes de materiales 2843,58 € Costes indirectos 560,00 € TOTAL DEL PROYECTO 8203,58 € 109 Web Document Store and Printing 10. Conclusiones y líneas futuras Web Document Store and Printing 10.1. Resumen de resultados Como resumen de resultados del proyecto, cabe destacar que todos los objetivos definidos para el mismo, con mayores o menores dificultades técnicas y necesidades de adaptación, han podido ser llevados a cabo. Respecto del almacenamiento temporal de documentos, su puesta en funcionamiento resultó relativamente sencilla, ya que la actual situación de tecnologías aplicables en el entorno de Internet permite llevar a cabo desarrollos de este tipo con una dedicación de tiempo y recursos asequible. Las principales dificultades técnicas surgieron del lado de la monitorización y control de las colas de impresión. Esto es debido a que resulta necesario establecer un enlace con el núcleo del sistema operativo, ya que se interviene en su operatividad habitual. Este hecho implicó la necesidad de utilizar librerías nativas de núcleo de Windows, como puede ser la librería “kernel32.dll”, ya que son estos elementos los que permiten interactuar con el sistema operativo a bajo nivel. Es de destacar que el lenguaje de programación principal que en principio se decidió utilizar para el desarrollo del proyecto era el C#. Sin embargo, las especificaciones de las interfaces publicadas por los componentes de bajo nivel del sistema operativo impusieron la necesidad de uso del lenguaje C++. De esta manera, se crearon en este lenguaje los elementos necesarios para la comunicación con las librerías y operatividad del sistema operativo, estableciendo nuevos interfaces que permiten utilizar las funcionalidades de las mismas mediante código escrito en C#. 111 Web Document Store and Printing Respecto de la facturación, no se han encontrado obstáculos de relevancia. Este hecho viene marcado por las propias especificaciones del sistema de facturación con el que interactúa este sistema, ya que la publicación de un servicio web por su parte, con todos los métodos necesarios para realizar las tareas especificadas, simplifica en gran medida el desarrollo de los módulos de interacción con él. De hecho, el desarrollo de este proyecto ha puesto de manifiesto la gran utilidad y versatilidad que entraña el uso de estos servicios web, ya que su desarrollo es relativamente sencillo, constituyen una manera muy útil de abstraer la funcionalidad de un sistema para su utilización a través de la red, y ofrecen un grado de seguridad más que aceptable mediante la utilización del protocolo HTTPS y la identificación de acceso a través de las cabeceras SOAP. El resto de dificultades del proyecto vinieron del lado del diseño, que resulta un arduo trabajo cuando se requiere cierta universalidad respecto a los navegadores. Sin embargo, la experiencia y la reciente voluntad de desarrolladores por adaptarse a los estándares existentes reduce en gran medida la dedicación necesaria para esta tarea. 10.2. Futuros desarrollos A pesar de los buenos resultados que se han obtenido en el desarrollo del proyecto, se han detectado áreas en las que en el futuro se debería hacer hincapié con el objetivo de dotar de mayor versatilidad al sistema para poder adaptarlo a un espectro más amplio de entornos. 112 Web Document Store and Printing 10.2.1. Respecto al almacenamiento e impresión Como se ha comentado, el almacenamiento remoto de documentos no entraña especial dificultad, y su funcionalidad, por ser bastante básica, no merece un alto grado de investigación al respecto, ya que actualmente se cubren a la perfección las necesidades identificadas. Por el lado de la impresión de documentos, sin embargo, sí se han detectado posibles mejoras sustanciales, que posibilitarían dotar de mayor universalidad a la solución. Por un lado, es destacable que la solución adoptada requiere la necesidad de, a la hora de la impresión de los documentos, hacer uso de un sistema operativo Microsoft Windows. Esto es debido a que el enlace establecido con el sistema operativo es específico de este, por la utilización realizada de sus librerías nativas, y en principio no es fácilmente exportable a otros sistemas operativos como pueden ser los MAC OS X o cualquier distribución Linux. Sería de bastante utilidad desarrollar adaptaciones para estos sistemas para dotar de universalidad a la solución. A este respecto también cabe mencionar que el desarrollo del proyecto garantiza la compatibilidad hasta la versión Windows XP de los sistemas operativos de Microsoft, siendo necesarios estudios y posibles adaptaciones para su operatividad en versiones posteriores. Por otro lado actualmente, tanto este sistema como los ya existentes detallados en el estado del arte, tienen limitaciones respecto a la facilidad de uso por parte del usuario. Esta facilidad puede entenderse en términos de la necesidad del usuario de establecer algún tipo de interacción con los sistemas existentes. Esto es, por ejemplo el sistema desarrollado en el presente proyecto, pasa por la necesidad de que el usuario final utilice en algún momento un PC gestionado, ya que es desde este recurso donde se puede establecer la monitorización necesaria para el control y gestión del uso de la impresora. Otros sistemas, como pueden ser aquellos basados en la utilización del protocolo IPP, pasan por la necesidad de publicar el driver específico de la impresora, y su instalación local por parte del usuario, para poder hacer uso de ella. 113 Web Document Store and Printing Para el desarrollo de este proyecto se descartó el uso del protocolo IPP ya que su adaptación al alcance del proyecto propuesto hubiera resultado más laboriosa que la solución utilizada. Sin embargo, la proliferación de impresoras de red, hace vislumbrar la posibilidad de que, realizando un estudio que integre la solución adoptada en este proyecto junto con un estudio pormenorizado del protocolo IPP, se pueda desarrollar una solución que permita a los usuarios la utilización continua de sus propios recursos, sin perder la capacidad de gestión y control necesarios. Por último cabe mencionar que, respecto a la seguridad concerniente al almacenamiento de archivos, se ha adoptado una solución, basada en el almacenamiento de los mismos en forma binaria, que cumple los mínimos exigidos legalmente. Sin embargo, convendría estudiar la posibilidad de uso de un método de cifrado más seguro y que no suponga un aumento significativo de los tiempos de proceso necesarios, como por ejemplo la encriptación DES o AES. 10.2.2. Respecto a la facturación La principal limitación que se puede encontrar respecto de la facturación es que el pago del servicio se realiza necesariamente en modo pos pago, esto es, una vez el servicio ya ha sido utilizado, junto con que el cobro debe realizarse de manera manual por parte de un empleado de la empresa explotadora final. Un primer desarrollo a tener en cuenta sería la integración con un sistema de facturación que permita el pago mediante tarjeta de crédito, de manera que la única interacción necesaria entre el usuario final y el empleado sea la de recoger los trabajos de impresión realizados. 114 Web Document Store and Printing Por otro lado, y en relación con la posibilidad de uso de la impresora sin necesidad de interacción con los sistemas existentes, sería interesante el desarrollo de un sistema que permita la facturación en modo prepago. De esta el usuario podría disponer de unas credenciales propias que le permitan, por un lado, la compra y recarga de saldo disponible para el uso del servicio y, por otra, su utilización desde cualquier lugar, en cualquier momento y sin necesidad de utilizar nada más que su propio PC para realizar los trabajos. Las extensiones de este posible sistema son muy amplias. Así, se podría concebir la utilización del servicio desde el propio hogar del usuario, donde el usuario incluso podría decidir dónde y cuándo recoger sus trabajos, o incluso establecer un servicio de entrega a domicilio. El sistema prepago posibilitaría la eliminación de la necesidad para el usuario de interacción física con sistemas y empleados, ya que la compra y recarga de saldo podría realizarse a través de Internet. Además, posibilitaría a los explotadores finales la utilización de las cada vez más extendidas tarjetas de fidelización de clientes, así como la integración exhaustiva de este servicio con cualquier otro que se quiera ofertar. 115 Web Document Store and Printing 11. Bibliografía Web Document Store and Printing Los siguientes libros, documentos y contenidos on-line han sido consultados por el programador durante el desarrollo del proyecto: Libros [Nagel et al, 2006] C. Nagel, B. Evjen, J. Glynn, M. Skinner, K. Watson, A. Jones. Professional C# 2005. Wiley Publishing, Inc., 2006. [Archer, 2001] T. Archer. Inside C#, architectural reference. Microsoft Press, 2001. [Piattini y Garzás, 2007] M. G. Piattini, J. Garzás. Fábricas de software: experiencias, tecnologías y organización. Ra-Ma, 2007. Documentación [Rubio, 2008] M. Rubio. C# Coding Style Guide. Fractalia Remote Systems, 2008. [Martin, 2007] C. Martín. Sistema de facturación CajaWeb, documentación técnica. Fractalia Remote Systems, 2007. [Hunt y Brubacher, 1999] G. Hunt y D. Brubacher. Detours: Binary Interception of Win32 Functions. USENIX, 1999. Contenidos on-line .NET Framework Reference Information. Microsoft Corporation. Actualizado en 2009. Disponible en la web: http://msdn.microsoft.com. Visual C++ reference. Microsoft Corporation. Actualizado en 2009. Disponible en la web: http://msdn.microsoft.com. 117 Web Document Store and Printing C# language reference. Microsoft Corporation. Actualizado en 2009. Disponible en la web: http://msdn.microsoft.com. Visual Studio 2008. Microsoft Corporation. Actualizado en 2009. Disponible en la web: http://msdn.microsoft.com. 118 Web Document Store and Printing 12. Glosario de acrónimos Web Document Store and Printing Los siguientes acrónimos y abreviaturas han sido utilizados durante la redacción del presente documento: AES: Acrónimo de “Advanced Encription Stardard” (estándar avanzado de encriptación), es un sistema de cifrado simétrico basado en bloques fijos de 128 bits. DES: Acrónimo de “Data Encryption Standard” (estándar de encriptado de datos), es un sistema de cifrado simétrico basado en bloques fijos de 64 bits. GUID: Acrónimo de “Globally Unique Identifier” (identificador global único). Es un número pseudoaleatorio, empleado habitualmente para identificar distintos elementos. Aunque no se puede garantizar que cada GUID generado sea única, el número total de identificadores posibles es tan grande que la posibilidad de que se genere un mismo número dos veces puede considerarse nula en la práctica. HTML: Acrónimo de “HyperText Markup Language” (lenguaje de marcado de hipertexto). Es el lenguaje de marcado predominante para páginas web. Proporciona una manera de describir la estructura de la información textual en los documentos, definiendo ciertos elementos como enlaces, cabeceras, párrafos, listas, etc., y para complementar estos con formularios interactivos, imágenes y otros objetos. HTTP: Acrónimo de “HyperText Transfer Protocol” (protocolo de transferencia de hipertexto). Es un protocolo de comunicaciones, usado comúnmente para transmitir contenidos HTML entre las partes cliente y servidor de una web. HTTPS: Acrónimo de “HyperText Transfer Protocol Secure” (protocolo de transferencia segura de hipertexto). Es una implementación de HTTP que utiliza SSL para cifrar las comunicaciones. 120 Web Document Store and Printing IIS: Acrónimo de “Internet Information Server” (Servidor de información de Internet). Es un software de servidor desarrollado por Microsoft que permite almacenar y publicar contenidos web. SSL: Acrónimo de “Secure Sockets Layer” (capa de conexión segura). Se trata de un protocolo que provee seguridad e integridad de datos para las comunicaciones sobre los protocolos TCP/IP, en redes tales como Internet. XML: Acrónimo de “Extended Markup Language” (lenguaje extendido de marcado), se trata de una especificación de propósito general para la creación de lenguajes de marcado personalizados. Se clasifica como lenguaje extensible debido a que permite a los usuarios definir sus propios elementos. Su propósito principal es ayudar a los sistemas de información a compartir datos estructurados, particularmente vía Internet, y es utilizado tanto para codificar documentos como para serializar datos. 121 Web Document Store and Printing Anexo A. Manual de instalación y operación Web Document Store and Printing 1. Descripción del sistema 1.1. Arquitectura Web Document Store and Printing es un sistema creado para permitir a los usuarios de soluciones de acceso público a Internet poder realizar impresiones de sus documentos. Para esto se dispondrá de un servidor para almacenar el documento, con la idea de posteriormente descargarlo en un lugar que disponga de impresoras accesibles. El sistema monitoriza las impresiones y factura las impresiones realizadas. Para lograr esta funcionalidad, el sistema dispone de cinco componentes que se detallan posteriormente y se comunica con un sistema externo de facturación utilizado en Fractalia denominado “CajaWeb”, mediante un servicio Web que este sistema publica. Los cinco componentes propios del sistema son los siguientes: Una base de datos, (WDSDb). Sirve para almacenar los documentos y la información necesaria acerca de las impresiones asociadas a los documentos almacenados. Una página Web, (WDSWeb). Va a ser utilizada por dos perfiles de usuarios. o El cliente final para almacenar un documento, descargarlo desde una ubicación con impresoras disponibles, realizar impresiones del documento y monitorizarlas. o El encargado de las impresiones para saber qué precio tienen las impresiones realizadas correctamente y realizar el cobro. 123 Web Document Store and Printing Un Servicio Web, (WDSws). Sirve para comunicar el monitor de impresiones con la base de datos. Un Servicio Windows, (WDSMonitor). Es un servicio de monitorización de impresiones que se envían a la cola de impresión de una impresora. Una tarea programada, (WDSDbCleaner). Sirve para borrar los documentos pagados del servidor y para borrar los documentos no pagados con una antigüedad. El diagrama con la arquitectura sería el siguiente: Figura 5. Arquitectura del sistema 124 Web Document Store and Printing 2. Componentes 2.1. Base de Datos Los datos persistentes que maneja el sistema se almacenan en una base de datos y que se identifica en el esquema como WDSDb. 2.1.1. Esquema Figura 6. Esquema de la base de datos 125 Web Document Store and Printing 2.1.2. Descripción de los objetos 2.1.2.1. Tablas wds01_Document En esta tabla se almacenan los documentos que se suben al servidor. Tiene declarados los siguientes campos: o wds01_id: es el identificador de un documento y actúa como clave primaria. o wds01_uploadTime: es la fecha y hora en la que se ha almacenado un documento en el servidor. o wds01_password: es la contraseña que se usa para descargar un documento y consultar la impresión o impresiones relacionadas con dicho documento. o wds01_guid: es un GUID que identifica externamente a un documento. o wds01_fileData: este campo almacena los datos binarios de un documento. o wds01_name: es el nombre del documento junto con su extensión. o wds01_payed: define si la impresión o impresiones de un documento han sido pagadas. 126 Web Document Store and Printing wds02_Printing En esta tabla se almacena información sobre las impresiones de los documentos, detectados en las colas de impresiones. Se almacena además información de la facturación asociada a cada impresión que se obtiene a través del sistema “CajaWeb”. Tiene declarados los siguientes campos: o wds02_id: es el identificador de la impresión de un documento y actúa como clave primaria. o wds02_idDocument: es el identificador del documento del cual se ha realizado una impresión y actúa como clave ajena referenciando a la tabla “wds01_Document”. o wds02_idCenter: es el identificador del Centro en el cual se ha mandado a imprimir el documento. o wds02_submittedTime: es la fecha y hora en la que se ha mandado un documento a una cola de impresión. o wds02_totalPages: es el número total de páginas impresas. o wds02_color: define si una impresión se ha realizado en color o en blanco y negro. o wds02_idPrintingState: identificador del estado de la impresión. Actúa como clave ajena referenciando a la tabla “wds03_PrintingState”. o wds02_idTicket: es el identificador del ticket asociado a la impresión. o wds02_articleDescription: describe el tipo de artículo asociado a la impresión. 127 Web Document Store and Printing o wds02_price: es el precio aplicado al total de las páginas impresas y que figura en el ticket. o wds02_ticketCancelled: toma valor true cuando se cancela el ticket asociado a la impresión. wds03_PrintingState En esta tabla se almacena información descriptiva sobre el estado de una impresión. Tiene declarados los siguientes campos: o wds03_id: es el identificador de un estado de impresión y actúa como clave primaria. o wds03_name: es el nombre de un estado de impresión. 2.1.2.2. Procedimientos Almacenados AddPrinting: añade la impresión de un documento, detectada en una cola de impresión, a la base de datos. CheckPassword: Verifica si existe un documento en la base de datos que tiene asignado una determinada contraseña. DeleteFileData: Borra los datos binarios de documentos que cumplen ciertos criterios. GetDocument: Devuelve un documento con su información y datos. GetDocumentPassword: devuelve la contraseña asociada a un documento. GetPrinting: Devuelve la información de una impresión o impresiones realizadas para un documento. SetDocumentPayed: actualiza el estado de un documento a pagado. 128 Web Document Store and Printing SetTicketPrintingToCancelled: actualiza el estado de cancelación del ticket de una impresión cuyo ticket asociado fue cancelado. StoreDocument: Almacena en la base de datos un documento. UpdatePrinting: Actualiza el estado de una impresión de documento. 2.2. Página Web WDSWeb es una aplicación Web que sirve al usuario final para subir documentos, descargarlos y monitorizar las impresiones. Al usuario encargado de realizar el cobro, le sirve para saber lo que hay que facturar por las impresiones realizadas. El funcionamiento del sitio web se puede agrupar en tres apartados los cuales se corresponden con una página física. En la página Upload.aspx se suben los documentos al servidor y se muestra un código que sirve al usuario para identificar el documento almacenado. En la página Download.aspx se descargan los documentos almacenados anteriormente y se realiza la monitorización de los trabajos de impresión enviados del documento descargado. En la página Payment.aspx se muestran las impresiones realizadas para el documento y se calcula el precio total en función de las copias impresas, que están asociadas a un artículo de impresión del centro. 129 Web Document Store and Printing 2.3. Servicio Web Identificado en el esquema como “WDSws”, el Servicio Web permite al Servicio Windows de monitorización de impresiones comunicarse con la base de datos del sistema. Tiene declarados cuatro métodos Web que sirven para: obtener la contraseña del documento a través de su GUID, añadir una nueva impresión de un documento, modificar el estado de la impresión y cancelarla. 2.4. Servicio de monitorización de impresiones Identificado en el esquema como “WDSMonitor”, es un servicio Windows que monitoriza la cola de impresión del sistema operativo en el cual está instalado. La monitorización se realiza mediante un subcomponente llamado SpoolerHook que, además de monitorizar, permite ejecutar acciones sobre las impresiones que llegan a la cola de impresión. Cuando llega una impresión a la cola, se comprueba si el nombre del documento contiene un GUID que lo identifica como un documento gestionado por el sistema. Si no contiene un GUID válido, se verifica si el nombre del documento cumple con una determinada expresión regular que habilita su impresión. Si no cumple ninguna de estas condiciones, la impresión se cancela. Cuando se trata de un documento gestionado por el sistema, se genera un elemento de facturación (denominado comúnmente “ticket”) asociado a la impresión mediante el servicio Web proporcionado por la plataforma “CajaWeb”, y se monitoriza el estado de la impresora con la cual se está realizando la impresión. En caso de que durante la impresión la impresora se encuentre en un estado obstructivo, se cancela el ticket generado y la impresión. Un estado obstructivo es aquel que impide que un documento se siga imprimiendo correctamente. 130 Web Document Store and Printing Para la comprobación de documentos, creación y actualización de impresiones dentro del sistema se realizan llamadas al Servicio Web. 2.5. Tarea Programada Identificado en el esquema como “WDSDbCleaner”, este componente es una aplicación de consola que al instalarla crea una tarea programada para eliminar documentos que cumplan una de las siguientes condiciones. Si se han pagado las impresiones asociadas a ese documento. Si el documento lleva almacenado en el servidor más tiempo que el establecido en configuración. El servicio se ejecuta diariamente a una hora determinada durante la instalación. Relación con sistemas externos Tal y como se ha mencionado, WDS interactúa con el sistema “CajaWeb”. Más en concreto, haciendo uso del Servicio Web publicado por este sistema externo. Este Servicio Web se emplea para generar ticket de artículos de impresión, mientras que Web Document Store and Printing lo utiliza para recoger información de los artículos de impresión de las que dispone cada Centro y para crear y cancelar un ticket de impresión asociado a una impresión y a un artículo de impresión del Centro, gracias a llamadas a métodos Web que atacan a la base de datos de CajaWeb. 131 Web Document Store and Printing 3. Instalación Para que el sistema funcione correctamente, la instalación de la base de datos debe preceder a la instalación del resto de componentes. La página web, el servicio web de comunicación con el servicio de monitorización de impresiones y la tarea programada para eliminar los documentos deben instalarse posteriormente, porque necesitan conocer la cadena de conexión a la base de datos. El monitor de impresiones debe instalarse posteriormente al servicio web de comunicación, porque necesita saber la dirección del servicio para comunicarse con la base de datos. Por tanto, el orden lógico de instalación de los componentes del sistema es el siguiente: 1. Base de datos. 2. Servicio web de comunicación, página web y tarea programada, siendo el orden irrelevante. 3. Servicio de monitorización de impresiones, después de la instalación del servicio web de comunicación. 3.1. Base de datos 3.1.1. Requisitos previos Para instalar la base de datos será necesario cumplir los siguientes requisitos: 1. Tener instalada y configurada una instancia del motor de base de datos SQL Server 2005 Express Edition. 132 Web Document Store and Printing 2. El SQL Server debe permitir conexiones remotas. Esto se puede consultar en la herramienta “SQL Server Surface Area Configurator for Services and Connections”, bajo la opción “Remote Connections”. Figura 7. Configuración de Microsoft SQL Server para aceptar conexiones remotas El cortafuegos del sistema debe permitir también el uso del puerto de SQL Server (1433 por defecto). 3.1.2. Detalles del paquete El paquete de instalación de la base de datos consiste en un fichero comprimido en formato zip, y cuyo nombre es “WDS Database”. 133 Web Document Store and Printing 3.1.2.1. Instalación La instalación de la base de datos se efectuará ejecutando el siguiente script que está incluido en el fichero comprimido: WDSDB_Script.sql: Una vez creada la base de datos de Web Document Store, con un usuario con permisos de creación, se tiene que ejecutar este Script para crear tablas y procedimientos almacenados. 3.1.2.2. Configuración No existen parámetros de configuración para este componente. 3.1.2.3. Comprobaciones Para asegurarse de que el script “WDSDB_Script.sql” se ha ejecutado correctamente, habría que comprobar que se han creado los siguientes objetos: Tablas: o “wds01_Document” sin registros pre-insertados. o “wds02_Printing” sin registros pre-insertados. o “wds03_PrintingState” con 5 registros pre-insertados en el siguiente orden: 1 Printing 2 Printed 3 Printer Error 4 Ticket Error 5 Interrupted Printing 134 Web Document Store and Printing Procedimientos almacenados: o AddPrinting. o CheckPassword. o DeleteFileData. o GetDocument. o GetDocumentPassword. o GetPrinting. o SetDocumentPayed. o SetTicketPrintingToCancelled. o StoreDocument. o UpdatePrinting. 3.1.2.4. Procedimiento de marcha atrás Al no disponer de un instalador, en caso de que se produzca un error durante la instalación de la base de datos, se deben borrar manualmente los objetos generados. 135 Web Document Store and Printing 3.2. Página Web 3.2.1. Requisitos previos .Net Framework 2.0 Microsoft Internet Information Server con Microsoft .NET Framework 2.0 registrado. El servidor ha de poder acceder a las URL del sistema “CajaWeb”. Tener previamente instalada la base de datos del sistema y poder acceder a ella desde el ordenador donde se instale la Página web. 3.2.2. Detalles del paquete El paquete de instalación de la Página Web consiste en un fichero autoinstalable (.msi), y cuyo nombre es “WDS Web”. 3.2.3. Instalación La instalación se realiza ejecutando el fichero autoinstalable. Durante el proceso de instalación se especificará el destino del directorio virtual dentro del IIS y su nombre. Finalizada la instalación, hay que asegurarse de que el directorio virtual esté configurado dentro del IIS para que ejecute con la versión 2.0 de ASP .NET, y configurar la página web mediante el fichero web.config ubicado dentro del directorio virtual creado en el IIS. 3.2.4. Configuración 3.2.4.1. Fichero de configuración “web.config” <?xml version="1.0"?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> 136 Web Document Store and Printing <appSettings> <!-- Language configuration--> <add key="default_language" value="es"/> <add key="languages" value="es,en, pt, fr"/><!--value="ESPAÑOL,INGLES, POrTUGUES, FRANCES"/>-><!--assigned Locale ID by microsoft (http://msdn.microsoft.com/es-es/goglobal/bb964664(enus).aspx)--> <add key="XmlTranslationFile" value="language\Languages.xml"/> <!-- Upload file to server folder--> <add key="tempDocPath" value="WDSFiles"/> <!--max file size MB (Max value 100 httpRuntime maxRequestLength="102400")--> <add key="MaxFileSize" value="20"/> <add key="SizeToShowMessage" value="10"/> <!-- Refresh page --> <add key="SecsToIniciateMonitor" value="20"/><!-- If empty, value = 20 --> <add key="RefreshSecTime" value="5"/><!-- If empty, value = 5 --> <!-- The extension to be show--> <add key="supportedFileTypes" value="txt, doc, docx, xls, xlsx, ppt, pdf, bmp, tif, tiff, gif, jpg, jpeg, png"/> <add key="center" value=""/> <!-- Connection strings, database conexion string encrypt with textcrypter --> <add key="WDSDataBase" value="************************************************"/> <!-- CajaWeb webservice--> <add key="WS_AutoTicket.WebService" value="http://localhost/facturacion/WebService.asmx"/> </appSettings> <log4net> <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="C:\Temp\WDSWeb.log"/> <param name="AppendToFile" value="true"/> <appendToFile value="true"/> <rollingStyle value="Size"/> <maxSizeRollBackups value="10"/> <maximumFileSize value="3MB"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%d{dd-MM-yyyy HH:mm:ss} %-5p - %l - %m%n"/> </layout> </appender> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="[Header]\r\n"/> <param name="Footer" value="[Footer]\r\n"/> <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/> </layout> </appender> <root> <level value="debug"/> <appender-ref ref="RollingFileAppender"/> <appender-ref ref="ConsoleAppender"/> </root> </log4net> <system.web> 137 Web Document Store and Printing <compilation debug="true"/> <authentication mode="Windows"/> <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm"> </customErrors> <httpRuntime executionTimeout="90" maxRequestLength="102400" useFullyQualifiedRedirectUrl="true" requestLengthDiskThreshold="20480"/><!--100MB tamaño maximo-> <!-- requestLengthDiskThreshold: igual al valor de tamaño maximo en kb (MaxFileSize*1024)--> <mobileControls cookielessDataDictionaryType="System.Web.Mobile.CookielessData"/> <deviceFilters> <filter name="isJPhone" compare="Type" argument="J-Phone"/> … <filter name="supportsVoiceCalls" compare="CanInitiateVoiceCall" argument="true"/> </deviceFilters> </system.web> </configuration> 3.2.4.2. Explicación de los parámetros El fichero de configuración contiene tres secciones. La sección appSettings que contiene la configuración personalizada, la sección log4net contiene la configuración de las trazas y la sección system.web contiene la configuración de las aplicaciones Web ASP .NET. Parámetros de la sección appSettings o default_language: El lenguaje por defecto que se muestra en la página web, tiene que existir la traducción en el archivo de lenguajes. El valor de este parámetro se puede modificar, siempre con un valor que exista en el parámetro “languages”. o languages: Todos los lenguajes en los que están traducidas los textos de la página. Códigos de lenguaje según el formato de Microsoft en http://msdn.microsoft.com/es-es/goglobal/bb964664(en-us).aspx. El valor de este parámetro se puede modificar, siempre que se añadan las nuevas traducciones en el archivo de lenguajes cuya ruta se encuentra definida en el parámetro XmlTranslationFile. 138 Web Document Store and Printing o XmlTranslationFile: Ruta física que indica donde se encuentra el archivo con todas las sentencias mostradas en el sitio web, traducidas en tantos idiomas como indica el parámetro “languages”. El valor de este parámetro no debe modificarse a no ser que se cambie de posición el archivo de idiomas. o tempDocPath: Ruta donde se almacenan temporalmente los archivos almacenados en el servidor web. Si se modifica hay que crear la carpeta físicamente en el directorio virtual. El valor de este parámetro no debe modificarse a no ser que se quieran almacenar en otra carpeta los archivos temporales, pero siempre dentro del directorio virtual donde se instala el sitio web. o MaxFileSize: Tamaño máximo de los archivos que se permitirán subir en el servidor. El tamaño se expresa en Megabytes. El valor de este parámetro puede modificarse, pero si se modifica debe cambiarse también el valor de requestLengthDiskThreshold sección system.web. puesto en en el parámetro httpRuntime de la El valor de éste debe ser el mismo que el tamaño MaxFileSize, pero en Kilobytes, o lo que es lo mismo, el valor multiplicado por 1024. o SizeToShowMessage: Tamaño a partir del que se debe mostrar un mensaje advirtiendo al usuario que el archivo es demasiado grande y puede haber un fallo al subir, dándole la opción de cancelar la subida en el servidor. El tamaño se expresa en Megabytes. El valor de este parámetro puede modificarse, en función de la velocidad de la conexión a internet. o SecsToIniciateMonitor: Segundos que se muestra el enlace para descargar el documento. Si no se le asigna un valor, por defecto será de 20 segundos. El valor de este parámetro puede modificarse. 139 Web Document Store and Printing o RefreshSecTime: Periodo de tiempo en segundos que tarda la pagina de monitorización de impresiones en refrescar la información. Si no se le asigna valor, por defecto será de 5 segundos. El valor de este parámetro puede modificarse. o supportedFileTypes: son las extensiones de ficheros marcadas como de tipo imprimible. Estas extensiones se ponen en lista, separadas por comas. Al intentar subir archivos cuyas extensiones no se encuentren en la lista, la aplicación mostrara un mensaje diciendo que los archivos no son de tipo imprimibles y se necesitar confirmar la subida. El valor de este parámetro debe modificarse en función de que aplicaciones haya en el centro o centros desde los que se descarguen los documentos. Hay que asegurarse de que los ordenadores del centro tengan las aplicaciones necesarias para mostrar los archivos con las extensiones de esta lista. o center: este parámetro indica el identificador de centro, según la plataforma de facturación. En entornos centralizados estará en blanco y se pasara el identificador de centro como parámetro en la barra de direcciones. El valor de este parámetro debe modificarse en el caso de que se instale el sitio web de forma que solo vaya a acceder desde un centro. Se debe poner el identificador que el centro tiene en la plataforma de facturación. o WDSDatabase: Conexión cifrada con TextCrypter de la base de datos del sistema. El valor de este parámetro tiene que modificarse siempre. Una vez instalada la base de datos, se ofusca la cadena de conexión con la herramienta TextCrypter. Hay que ponerse en contacto con el desarrollador del Sitio Web para obtener la clave de ofuscación. 140 Web Document Store and Printing o WS_AutoTicket.WebService: Dirección URL del servicio web del sistema de facturación. El valor de este parámetro tiene que modificarse y tiene que contener la dirección URL del servicio web. Parámetros de la sección log4net Para esta sección se comentarán los parámetros más significativos y sujetos a modificaciones. Consultar la referencia de log4net para más detalles sobre estos parámetros y otros. o File: Ruta absoluta del fichero de trazas (incluyendo el nombre del fichero). En caso de no existir, se creará automáticamente. Se puede modificar con la nueva ruta donde se quiera crear el fichero de trazas. o appendToFile: Indica si las nuevas trazas son añadidas al fichero (true) o sobrescribirán las existentes dentro del fichero (false). No se debe modificar. o maxSizeRollBackups: Número máximo de ficheros adicionales al de trazas que se almacenarán. Éstos se llamarán como el original y se les irá añadiendo el sufijo 0, 2, etc. Cuando se alcance este número, se empezaran a borrar los ficheros de trazas más antiguos. Se puede modificar. o maximumFileSize: Tamaño máximo de cada uno de los ficheros de trazas. Se expresa en MB. Se puede modificar, cambiando la parte numérica. o conversionPattern: Patrón de conversión para la escritura de trazas. No se debe modificar. 141 Web Document Store and Printing o level: nivel de log del sitio web. Posibles valores, de mayor a menor información de log: DEBUG, INFO, WARN, ERROR, FATAL. El modo DEBUG nos será útil para depurar el servicio. Una vez comprobada la validez del mismo, podemos pasar a un modo más silencioso, recomendándose INFO. Se puede modificar. Parámetros de la sección system.web Tiene varios parámetros pero solo uno se debe modificar en el caso de que se cambie el parámetro MaxFileSize de la sección de appSetting. <httpRuntime executionTimeout="90" maxRequestLength="102400" useFullyQualifiedRedirectUrl="true" requestLengthDiskThreshold="20480"/> Si esto ocurre se debe requestLengthDiskThreshold dar un nuevo dentro de valor a httpRuntime. la para la variable Este valor se obtiene multiplicando los MB del tamaño máximo de los archivos por 1024 para obtener los KB. RequestLengthDiskThreshold especifica, en bytes, el límite del umbral del almacenamiento en búfer de las secuencias de entrada. Este valor no debe sobrepasar el valor del atributo maxRequestLength. 3.2.5. Comprobaciones Se puede comprobar que el Sitio Web ha sido instalado correctamente accediendo desde un navegador web a la página Default.aspx (a partir de la ruta completa que proporciona IIS). 3.2.6. Procedimientos de marcha atrás El instalador del Sitio Web dispone de una opción de desinstalación (además de reparación) que permite eliminar el directorio virtual del Sitio Web dentro del IIS. Se puede realizar la desinstalación desde “panel de control -> agregar o quitar programas” seleccionando la opción “quitar”, o bien volviendo a ejecutar el instalador seleccionando la opción correspondiente a eliminar el Sitio Web. 142 Web Document Store and Printing 3.3. Servicio Web 3.3.1. Requisitos previos .Net Framework 2.0 Microsoft Internet Information Server con Microsoft .NET Framework 2.0 registrado. Tener instalada la base de datos del sistema y poder acceder a ella desde el ordenador donde se instale el Servicio Web. 3.3.2. Detalles del paquete El paquete de instalación del Servicio Web consiste en un fichero autoinstalable (.msi), y cuyo nombre es “WDS Web Service”. 3.3.3. Instalación La instalación se realiza ejecutando el fichero autoinstalable. Durante el proceso de instalación se especificará el destino del directorio virtual dentro del IIS y su nombre. Finalizada la instalación, hay que asegurarse de que el directorio virtual esté configurado dentro del IIS para que ejecute con la versión 2.0 de ASP .NET, y configurar el servicio web mediante el fichero web.config ubicado dentro del directorio virtual creado en el IIS. 3.3.4. Configuración 3.3.4.1. Fichero de configuración “web.config” <?xml version="1.0"?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <appSettings> <!-- Connection strings, WDS database conexion string encrypt with textcrypter --> 143 Web Document Store and Printing <add key="WDSDataBase" value="***********************************************"/> <!-- WDSUser --> <add key="user" value="**********************" /> <!-- WDSpass --> <add key="password" value="***********************" /> </appSettings> <log4net> <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="C:\Temp\WDSws.log"/> <param name="AppendToFile" value="true"/> <appendToFile value="true"/> <rollingStyle value="Size"/> <maxSizeRollBackups value="10"/> <maximumFileSize value="3MB"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value=" %d{dd-MM-yyyy HH:mm:ss} %-5p - %l - %m%n "/> </layout> </appender> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="[Header]\r\n"/> <param name="Footer" value="[Footer]\r\n"/> <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/> </layout> </appender> <root> <level value="debug"/> <appender-ref ref="RollingFileAppender"/> <appender-ref ref="ConsoleAppender"/> </root> </log4net> <system.web> <compilation debug="true"/> <authentication mode="Windows"/> </system.web> </configuration> 3.3.4.2. Explicación de los parámetros El fichero de configuración contiene tres secciones. La sección appSettings que contiene la configuración personalizada, la sección log4net contiene la configuración de las trazas y la sección system.web contiene la configuración de las aplicaciones Web ASP .NET. Esta última sección no se no se debe modificar, por lo que detallamos los parámetros de las otras dos. 144 Web Document Store and Printing Parámetros de la sección appSettings o WDSDatabase: Conexión cifrada con TextCrypter de la base de datos del sistema. El valor de este parámetro tiene que modificarse siempre. Una vez instalada la base de datos, se ofusca la cadena de conexión con la herramienta TextCrypter. Hay que ponerse en contacto con el desarrollador del Sitio Web para obtener la clave de ofuscación. o user: identificador de usuario ofuscado que sirve para autenticar las aplicaciones que llamen a los métodos del WebService, usando la cabecera SOAP. Por este motivo, no se debe modificar a no que tras realizar el cambio, se informe a todos los responsables de las aplicaciones que lo usen, para que cambien el valor de usuario para autenticarse. o password: contraseña ofuscada asociada al identificador de usuario que sirve para autenticar las aplicaciones que llaman a los métodos del webservice, usando la cabecera SOAP. Por este motivo, no se debe modificar a no ser que tras realizar el cambio, se informe a todos los responsables de las aplicaciones que lo usen, para que cambien el valor de usuario para autenticarse. Parámetros de la sección log4net Para esta sección se comentarán los parámetros más significativos y sujetos a modificaciones. Consultar la referencia de log4net para más detalles sobre estos parámetros y otros. o File: Ruta absoluta del fichero de trazas (incluyendo el nombre del fichero). En caso de no existir, se creará automáticamente. Se puede modificar con la nueva ruta donde se quiera crear el fichero de trazas. 145 Web Document Store and Printing o appendToFile: Indica si las nuevas trazas son añadidas al fichero (true) o sobrescribirán las existentes dentro del fichero (false). No se debe modificar. o maxSizeRollBackups: Número máximo de ficheros adicionales al de trazas que se almacenarán. Éstos se llamarán como el original y se les irá añadiendo el sufijo 0, 1, 2, etc. Cuando se alcance este número, se empezarán a borrar los ficheros de trazas más antiguos. Se puede modificar. o maximumFileSize: Tamaño máximo de cada uno de los ficheros de trazas. Se expresa en MB. Se puede modificar, cambiando la parte numérica. o conversionPattern: Patrón de conversión para la escritura de trazas. No se debe modificar. o level: nivel de log del sitio web. Posibles valores, de mayor a menor información de log: DEBUG, INFO, WARN, ERROR, FATAL. El modo DEBUG nos será útil para depurar el servicio. Una vez comprobada la validez del mismo, podemos pasar a un modo más silencioso, recomendándose INFO. Se puede modificar. 3.3.5. Comprobaciones Se puede comprobar que el Servicio Web ha sido instalado correctamente accediendo desde un navegador web a la página WebService.asmx (a partir de la ruta completa que proporciona IIS). El servicio Web publicará cuatro métodos que serán visualizados desde dicha página, tal y como se muestra en la siguiente captura de pantalla. 146 Web Document Store and Printing Figura 8. Métodos publicados por el servicio web 3.3.6. Procedimientos de marcha atrás El instalador del Servicio Web dispone de una opción de desinstalación (además de reparación) que permite eliminar el directorio virtual del Sitio Web dentro del IIS. Se puede realizar la desinstalación desde “panel de control -> agregar o quitar programas” seleccionando la opción “quitar”, o bien volviendo a ejecutar el instalador seleccionando la opción correspondiente a eliminar el Servicio Web. 3.4. Servicio de monitorización de impresiones 3.4.1. Requisitos previos .Net Framework 2.0 Tener instalado el Servicio Web del sistema y poder acceder a él desde la ubicación en la que se va a instalar el Servicio Windows. El ordenador donde se instale ha de poder acceder a las URL del sistema “CajaWeb”. 147 Web Document Store and Printing 3.4.2. Detalles del paquete El paquete de instalación del Servicio Windows consiste en un fichero autoinstalable (.msi), y cuyo nombre es “WDS Monitor”. 3.4.3. Instalación La instalación se hace de forma asistida permitiendo elegir la ruta de destino del Servicio que, después de instalarse, habría que configurarlo debidamente mediante el fichero de configuración con extensión *.config, situado al mismo nivel que el ejecutable dentro de la ruta de destino. Al mismo nivel se encuentra también una carpeta “SpoolerHook” que contiene a su vez las librerías de las que hace uso el subcomponente SpoolerHook y una carpeta “Log” que contendrá el fichero de trazas (con su backup) de este subcomponente. Después de configurarlo, se debe iniciar el Servicio manualmente desde Panel de control > Tareas Administrativas > Servicios. El Servicio llevará el nombre: “WDSMonitorService”. Este inicio manual sólo se realiza la primera vez que se instala. En caso de querer cambiar posteriormente la configuración habría que parar el servicio antes de realizar los cambios y volver a iniciarlo una vez realizados los cambios. 3.4.4. Configuración 3.4.4.1. Fichero de configuración <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> <section name="PrintingRegExLabels" type="Fractalia.GIS.WDSMonitor.SectionConfigHander, Core" /> <section name="ObstructivePrinterStatus" type="Fractalia.GIS.WDSMonitor.SectionConfigHander, Core" /> </configSections> <log4net> <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="c:\temp\WDSMonitorService.log" /> <param name="AppendToFile" value="true" /> <appendToFile value="true" /> 148 Web Document Store and Printing <rollingStyle value="Size" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="1000KB" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%d{dd/MM/yyyy HH:mm:ss} [%t] %-5p - %l - %m%n" /> </layout> </appender> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="[Header]\r\n" /> <param name="Footer" value="[Footer]\r\n" /> <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" /> </layout> </appender> <root> <level value="info" /> <appender-ref ref="RollingFileAppender" /> <appender-ref ref="ConsoleAppender" /> </root> </log4net> <appSettings> <!-- The ID of the Center where the WDSMonitor is installed --> <add key="CenterID" value=""/> <!-- The URL of the WDS Webservice --> <add key="WDSwsURL" value="http://localhost/WDSws/WebService.asmx"/> <!-- The encrypted user name for validating against the WDS Webservice --> <add key="WDSwsEncrypted_user" value="***********************"/> <!-- The encrypted password associated to the user for validating against the WDS Webservice --> <add key="WDSwsEncrypted_pwd" value="**********************"/> <!-- The URL of the AutoTicket Webservice --> <add key="AutoTicketwsURL" value="http://localhost/facturacion/WebService.asmx"/> <!-- The time frequency of refreshing the status of printers in seconds --> <add key="PrinterStatusRefresh" value="3" /> <!-- The parametrized regular expression for printing documents without valid GUID.--> <add key="PrintingRegEx" value="regEx1%label1%regEx2%label2%regEx3%"/> </appSettings> <!-- A section that contains the values of the regular expression parameters --> <PrintingRegExLabels> <label1>Value of label1</label1> <label2>Value of label2</label2> </PrintingRegExLabels> <!-- A section that contains obstructive printer status --> <ObstructivePrinterStatus> <Status>PRINTER_STATUS_ERROR</Status> <Status>PRINTER_STATUS_NO_TONER</Status> <Status>PRINTER_STATUS_NOT_AVAILABLE</Status> <Status>PRINTER_STATUS_OFFLINE</Status> <Status>PRINTER_STATUS_PAPER_JAM</Status> <Status>PRINTER_STATUS_PENDING_DELETION</Status> 149 Web Document Store and Printing <Status>PRINTER_STATUS_SERVER_UNKNOWN</Status> </ObstructivePrinterStatus> </configuration> 3.4.4.2. Explicación de los parámetros Sección log4net: Para esta sección se comentarán los parámetros más significativos y sujetos a modificaciones. Consultar la referencia de log4net para más detalles sobre estos parámetros y otros. o File: Ruta absoluta del fichero de trazas (incluyendo el nombre del fichero). En caso de no existir, se creará automáticamente. o appendToFile: Indica si las nuevas trazas son añadidas al fichero (true) o sobrescribirán las existentes dentro del fichero (false). o maxSizeRollBackups: Número máximo de ficheros adicional al de trazas que se almacenarán. Éstos se llamarán como el original y se le irá añadiendo el sufijo .0, .1, etc. Cuando se alcance este número, se empezarán a borrar los ficheros de trazas más antiguos. o maximumFileSize: Tamaño máximo de cada uno de los ficheros de trazas. o conversionPattern: Patrón de conversión para la escritura de las trazas. o level: nivel de log del servicio. Posibles valores, de mayor a menor información de log: DEBUG, INFO, WARN, ERROR, FATAL. El modo DEBUG nos será útil para depurar el servicio. Una vez comprobada la validez del mismo, podremos pasar a un modo más silencio, recomendándose INFO. 150 Web Document Store and Printing Sección appSettings: CenterID: es el identificador numérico del Centro en el cual se instala el Servicio Windows. WDSwsURL: URL donde está alojado el Servicio Web del sistema. WDSwsEncrypted_user: identificador de usuario ofuscado que se usará para autenticarse contra el Servicio Web del sistema mediante cabecera SOAP. WDSwsEncrypted_pwd: contraseña ofuscada asociada al identificador de usuario para la autenticación contra el Servicio Web del sistema mediante cabecera SOAP. AutoTicketwsURL: URL donde está alojado el servicio web de la plataforma de facturación. PrinterStatusRefresh: Frecuencia, en segundos, de obtención del estado de una impresora durante la impresión de documentos. Es un parámetro común a todas las impresoras. PrintingRegEx: Expresión regular con parámetros que se usa para verificar el nombre de los documentos que se quieran imprimir y que no contengan un GUID que los identifica como documentos gestionados por el sistema. La construcción de la expresión regular se explica en la siguiente sección. 151 Web Document Store and Printing Los valores por defecto de los parámetros que figuran en esta sección, salvo los credenciales de autenticación contra el Servicio Web del sistema, no son válidos para la instalación. Por tanto, hay que modificarlos. Si se quiere modificar los credenciales de autenticación contra el Servicio Web del sistema WDS, estos parámetros deben estar ofuscados usando la herramienta TextCrypter. La clave de ofuscación se puede obtener contactando con el desarrollador del Servicio Windows. Por otro lado, dichos parámetros deben de coincidir (en claro) con los parámetros configurados en el lado del Servicio Web del sistema. Sección PrintingRegExLabels: Esta sección se emplea para construir la expresión regular que se usa como excepción que permite imprimir documentos cuyos nombres cumplen con dicha expresión regular. La sección contendrá tantas etiquetas como las que estén definidas dentro de la expresión regular. Una etiqueta se define de tal forma que esté precedida y pospuesta por el carácter „%‟. En la expresión regular final se sustituyen los parámetros de la expresión regular por los valores de las etiquetas con las que se corresponden. Si consideramos el ejemplo de la siguiente expresión regular: “regEx1%applicationName%regEx2%centerID%regEx3” Donde regEx1, regEx2 y regEx3 son expresiones regulares que son parte de la expresión regular con parámetros. applicationName y centerID son parámetros de la expresión regular. Por tanto, la sección tiene que estar definida de la siguiente forma: <PrintingRegExLabels> < applicationName>CajaWeb</applicationName> <centerID>147</centerID> </PrintingRegExLabels> 152 Web Document Store and Printing La expresión regular que se va tener en cuenta con este ejemplo de configuración es la siguiente: “regEx1CajaWebregEx2147regEx3” Sección ObstructivePrinterStatus: En esta sección se definen los estados obstructivos de una impresora. La validez de los estados definidos por defecto en el fichero de configuración dependerá de cada impresora. Seguidamente, se listan los posibles estados en los que se puede encontrar una impresora. PRINTER_STATUS_BUSY: la impresora está ocupada. PRINTER_STATUS_DOOR_OPEN: La puerta de la impresora está abierta. PRINTER_STATUS_ERROR: La impresora está en un estado de error. PRINTER_STATUS_INITIALIZING: La impresora se está iniciando. PRINTER_STATUS_IO_ACTIVE: la impresora está en un estado de entrada/salida activa. PRINTER_STATUS_MANUAL_FEED: la impresora está configurada en modo de alimentación manual de papel. PRINTER_STATUS_NO_TONER: la impresora se ha quedado sin tinta. PRINTER_STATUS_NOT_AVAILABLE: la impresora no está disponible para imprimir. PRINTER_STATUS_OFFLINE: la impresora está fuera de línea. 153 Web Document Store and Printing PRINTER_STATUS_OUT_OF_MEMORY: La impresora se ha quedado sin memoria. PRINTER_STATUS_OUTPUT_BIN_FULL: la bandeja de salida de la impresora está llena. PRINTER_STATUS_PAPER_JAM: la impresora tiene papel atascado. PRINTER_STATUS_PAPER_OUT: la impresora se ha quedado sin papel. PRINTER_STATUS_PAPER_PROBLEM: la impresora tiene un problema de papel. PRINTER_STATUS_PAUSED: la impresora está pausada. PRINTER_STATUS_PENDING_DELETION: la impresora se está eliminando. PRINTER_STATUS_POWER_SAVE: la impresora está en modo de ahorro de energía. PRINTER_STATUS_PRINTING: la impresora está imprimiendo. PRINTER_STATUS_PROCESSING: la impresora está procesando un trabajo de impresión. PRINTER_STATUS_SERVER_UNKNOWN: la impresora está en un estado desconocido. PRINTER_STATUS_TONER_LOW: La impresora tiene un nivel de tinta bajo. PRINTER_STATUS_USER_INTERVENTION: la impresora está en un estado que requiere la intervención del usuario. 154 Web Document Store and Printing PRINTER_STATUS_WAITING: la impresora está en estado de espera. PRINTER_STATUS_WARMING_UP: la impresora está en estado de alerta. En caso de que se quiera añadir a la sección un estado más considerado como obstructivo, este debe coincidir con el nombre con el que viene definido en el listado anterior y estar comprendido entre la apertura y cierra de la etiqueta Status. 3.4.5. Comprobaciones Para comprobar que el Servicio se ha instalado correctamente, habría que poner la configuración del log en modo INFO y verificar con la información que ofrece el fichero de log que el SpoolerHook está correctamente instalado y apuntando a la ruta correcta donde está la libraría que contiene su funcionalidad. 3.4.6. Procedimiento de marcha atrás El instalador del Servicio Windows dispone de una opción de desinstalación (además de reparación). Se puede realizar la desinstalación desde “panel de control -> agregar o quitar programas” seleccionando la opción “quitar”, o bien volviendo a ejecutar el instalador seleccionando la opción correspondiente a eliminar el Servicio. Al desinstalarlo, se deshabilita también el control que ejerce el subcomponente SpoolerHook sobre las impresiones que se mandan a la cola de impresión. 155 Web Document Store and Printing 3.5. Tarea Programada 3.5.1. Requisitos previos .Net Framework 2.0 Tener instalada la base de datos del sistema y poder acceder a ella desde el ordenador donde se instale la Tarea Programada. 3.5.2. Detalles del paquete El paquete de instalación de la Tarea Programada “WDSDatabaseCleaner” consiste en un fichero instalable (.msi), y cuyo nombre es “WDS Database Cleaner”. 3.5.3. Instalación La instalación se hace de forma asistida permitiendo elegir la ruta de destino de la tarea programada. También habrá que introducir la hora a la que se quiere que se ejecute la tarea programada diariamente para borrar los documentos. El formato tiene que ser HH:MM. Después de instalarse, habría que configurarlo debidamente mediante el fichero de configuración con extensión *.config, situado al mismo nivel que el ejecutable dentro de la ruta de destino. 3.5.4. Configuración 3.5.4.1. Fichero de configuración <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <appSettings> <!-- Connection strings, WDS database conexion string encrypt with textcrypter --> <add key="WDSDataBase" value="*************************************"/> <add key="MaxStoredDays" value="7"/> </appSettings> <log4net> 156 Web Document Store and Printing <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="c:\Temp\WDSDbCleaner.log" /> <param name="AppendToFile" value="true" /> <appendToFile value="true"/> <rollingStyle value="Size"/> <maxSizeRollBackups value="10" /> <maximumFileSize value="3MB"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%d{dd-MM-yyyy HH:mm:ss} %-5p - %l - %m%n"/> </layout> </appender> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="[Header]\r\n"/> <param name="Footer" value="[Footer]\r\n"/> <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/> </layout> </appender> <root> <level value="DEBUG"/> <appender-ref ref="RollingFileAppender"/> <appender-ref ref="ConsoleAppender"/> </root> </log4net> </configuration> 3.5.4.2. Explicación de los parámetros El fichero de configuración contiene dos secciones. La sección appSettings que contiene la configuración personalizada y la sección log4net contiene la configuración de las trazas. Parámetros de la sección appSettings o WDSDatabase: Conexión cifrada con TextCrypter de la base de datos del sistema. El valor de este parámetro tiene que modificarse siempre. Una vez instalada la base de datos, se ofusca la cadena de conexión con la herramienta TextCrypter. Hay que ponerse en contacto con el desarrollador de la tarea programada para obtener la clave de ofuscación. 157 Web Document Store and Printing o MaxStoredDays: número de días que permanecen los archivos que no se han pagados en la base de datos. Se puede modificar. Puede ser necesario disminuirlo si el número de archivos que se suben en el servidor es muy alto. Parámetros de la sección log4net Para esta sección se comentarán los parámetros más significativos y sujetos a modificaciones. Consultar la referencia de log4net para más detalles sobre estos parámetros y otros. o File: Ruta absoluta del fichero de trazas (incluyendo el nombre del fichero). En caso de no existir, se creará automáticamente. Se puede modificar con la nueva ruta donde se quiera crear el fichero de trazas. o appendToFile: Indica si las nuevas trazas son añadidas al fichero (true) o sobrescribirán las existentes dentro del fichero (false). No se debe modificar. o maxSizeRollBackups: Número máximo de ficheros adicionales al de trazas que se almacenarán. Éstos se llamarán como el original y se les irá añadiendo el sufijo 0, 2, etc. Cuando se alcance este número, se empezaran a borrar los ficheros de trazas más antiguos. Se puede modificar. o maximumFileSize: Tamaño máximo de cada uno de los ficheros de trazas. Se expresa en MB. Se puede modificar, cambiando la parte numérica. o conversionPattern: Patrón de conversión para la escritura de trazas. No se debe modificar. 158 Web Document Store and Printing o level: nivel de log del sitio web. Posibles valores, de mayor a menor información de log: DEBUG, INFO, WARN, ERROR, FATAL. El modo DEBUG nos será útil para depurar el servicio. Una vez comprobada la validez del mismo, podemos pasar a un modo más silencioso, recomendándose INFO. Se debe modificar a INFO cuando comprobemos que funciona correctamente. 3.5.5. Comprobaciones Se puede comprobar que la tarea programada ha sido creada correctamente accediendo a las tareas programadas de Windows. Se puede ver desde “panel de control -> Tareas programadas”. Se comprueba que se creó la tarea WDSDatabaseCleaner a la hora introducida. 3.5.6. Procedimientos de marcha atrás El instalador de la tarea programada de una opción de desinstalación (además de reparación) que permite eliminar la tarea programada. Se puede realizar la desinstalación desde “panel de control -> agregar o quitar programas” seleccionando la opción “quitar”, o bien volviendo a ejecutar el instalador seleccionando la opción correspondiente a eliminar la tarea programada. 159 Web Document Store and Printing 4. Mantenimiento 4.1. Base de datos Se prevé que las tablas “wds01_Document” y “wds02_Printing” tendrán un alto índice de crecimiento. Por tanto, se recomienda realizar backups de las mismas periódicamente, y un reprocesado y almacenamiento en un dispositivo secundario de las transacciones y eventos antiguos, a la vez que se eliminan de la base de datos principal con el fin de agilizar el acceso a las citadas tablas. 4.2. Página Web 4.2.1. Fichero de log La información que se muestra en el fichero de log durante un funcionamiento correcto, cuando está en modo INFO, consiste en las acciones realizadas en la página web a la hora de subir documentos, descargarlos y realizar el pago. También se refleja el resultado de la comunicación del sitio web con la base de datos. Mientras que en el modo DEBUG, se le añade a la información anterior los procedimientos almacenados ejecutados e información del constructor de las clases. En modo DEBUG se muestra una gran cantidad de información en los archivos de log y crecerán demasiado. Por esta razón es muy recomendable poner los log en modo INFO. 4.2.2. Detección de errores Cuando se produzcan errores durante el funcionamiento del Servicio Web, estos saldrán reflejados en el fichero de log con la etiqueta identificativa “ERROR” en cada línea de traza, y que puede estar seguida de un mensaje de excepción en caso de que se haya capturado. 160 Web Document Store and Printing Se pueden producir los siguientes errores: El parámetro de configuración WDSDataBase, no puede estar vacio. Error al desencriptar la cadena de conexión de la base de datos. Error al conectarse a la base de datos. Error, la pagina solo es accesible desde un centro. Error al leer el documento del servidor web. Error en la subida del documento al servidor web. Error al añadir el documento en la base de datos. Error al intentar borrar el documento del servidor web* El centro no tiene artículos impresión. Error al comprobar si una contraseña pertenece a algún documento. Error al obtener el documento de la base de datos. Error al copiar el documento de la base de datos al servidor web. Error al obtener las impresiones asociadas a un documento. Error al pagar un documento. Error al cancelar una impresión de un documento. 161 Web Document Store and Printing 4.2.3. Previsión de crecimiento El fichero de log crecerá de forma proporcional al volumen de peticiones de transacciones que se realicen, y dependerá también de si está en modo INFO o DEBUG. En la prueba realizada con todas las operaciones principales, subir documento, descargar documento, monitorizar una impresión y realizar el pago, obtuvimos el siguiente crecimiento del fichero de log. En modo DEBUG: 35KB En modo INFO: 8KB Se borraran automáticamente los ficheros más antiguos de log cuando se alcance el número máximo de ficheros configurado. El tamaño máximo que podrían ocupar los ficheros de log se calcula multiplicando el tamaño máximo de cada fragmento de log (maximumFileSize) por el numero de ficheros permitidos (maxSizeRollBackups). Ambos son parámetros de configuración. <maxSizeRollBackups value="10" /> <maximumFileSize value="3MB"/> En el ejemplo serian 30MB de tamaño maximo de archivos de log. 4.2.4. Indicadores de funcionamiento La carpeta virtual en la que está instalado el Servicio Web ocupa aproximadamente 372 KB en disco, sin contar con el tamaño que podrían ocupar los ficheros de log generados. 162 Web Document Store and Printing 4.3. Servicio Web 4.3.1. Fichero de log La información que se muestra en el fichero de log durante un funcionamiento correcto, cuando está en modo INFO, consiste en la inicialización del Servicio Web, las llamadas a sus webmethods y la inserción/actualización de impresiones en la base de datos del sistema. Mientras que en el modo DEBUG, se le añade a la información anterior los procedimientos almacenados ejecutados e información del constructor de las clases. 4.3.2. Detección de errores Cuando se produzcan errores durante el funcionamiento del Servicio Web, estos saldrán reflejados en el fichero de log con la etiqueta identificativa “ERROR” en cada línea de traza, y que puede estar seguida de un mensaje de excepción en caso de que se haya capturado. Se pueden producir los siguientes errores: Error al desencriptar los datos de la cadena de conexión. Error de Autenticación contra el servicio web. Error de comunicación con la base de datos. Error al obtener la contraseña del documento con el GUID. Error al insertar la impresión en la base de datos. Error al actualizar las impresiones. 163 Web Document Store and Printing 4.3.3. Previsión de crecimiento El fichero de log crecerá de forma proporcional al volumen de peticiones de transacciones que se realicen, y dependerá también de si está en modo INFO o DEBUG. Se borraran automáticamente los ficheros más antiguos de log cuando se alcance el número máximo de ficheros configurado. El tamaño máximo que podrían ocupar los ficheros de log se calcula multiplicando el tamaño máximo de cada fragmento de log (maximumFileSize) por el numero de ficheros permitidos (maxSizeRollBackups). Ambos son parámetros de configuración. <maxSizeRollBackups value="10" /> <maximumFileSize value="3MB"/> En el ejemplo serian 30MB de tamaño maximo de archivos de log. 4.3.4. Indicadores de funcionamiento La carpeta virtual en la que está instalado el Servicio Web ocupa aproximadamente 372 KB en disco, sin contar con el tamaño que podrían ocupar los ficheros de log generados. 4.4. Servicio de monitorización de impresiones 4.4.1. Ficheros de Log La información que se muestra en el fichero de log durante un funcionamiento correcto, cuando está en modo INFO, consiste primeramente en la inicialización del Servicio comprobando si está instalado el SpoolerHook mostrando la ruta donde se encuentra la librería correspondiente, creando las estancias de los Servicios Web de Web Document Store and Printing y del sistema de facturación a partir de los parámetro que figuran en el fichero de configuración. 164 Web Document Store and Printing Cuando llega una impresión gestionada por el sistema, se muestran los estados por los que pasa la impresión. Se muestra además la confirmación de generación correcta del ticket asociado a la impresión. En caso de que la impresión no esté gestionada por el sistema (ausencia de GUID que identifica al documento), también se registra la situación tanto si el nombre del documento cumple con la expresión regular como si no. Cuando la configuración de trazas está en modo DEBUG, además de la información anterior, se muestra también la inicialización del servicio de la cola de impresión por si estuviese parado, las llamadas a los webmethods de los Servicios Web de Web Document Store and Printing y del sistema de facturación, configuración del temporizador, inicio de la monitorización del estado de una impresora, acciones de monitorización, notificación de que si el estado de la impresora es obstructivo o no y cancelación de ticket e impresión cuando se trata de un estado obstructivo de la impresora. 4.4.2. Detección de errores Cuando se produzcan errores durante el funcionamiento del Servicio, estos saldrán reflejados en el fichero de log con la etiqueta identificativa “ERROR” en cada línea de traza, y que puede estar seguida de un mensaje de excepción en caso de que se haya capturado. Se pueden producir los siguientes errores: Errores durante la lectura del fichero de configuración del Servicio (parámetros inexistentes, malformados, etc.). Errores de comunicación con los Web Services. Error a la hora de crear un ticket. El SpoolerHook no está instalado. 165 Web Document Store and Printing Imposibilidad de extraer el GUID del nombre de un documento. Detección de estado obstructivo de la impresora. El nombre de un documento a imprimir no cumple con la expresión regular. 4.4.3. Previsión de crecimiento El fichero de log crecerá de forma proporcional al número de impresiones que procese el Servicio Windows. Dependerá también de la frecuencia en la que aparecerán estados obstructivos y de si las trazas están configuradas en modo INFO o DEBUG. Se borraran automáticamente los ficheros más antiguos de log cuando se alcance el número máximo de ficheros configurado. 4.4.4. Indicadores de funcionamiento La carpeta de instalación del Servicio ocupa 792 KB en disco. Cuando se inicia ocupa 18 MB de RAM y llega a hacer uso de un máximo de 24% de la CPU. En pleno funcionamiento, la ocupación de memoria permanece en 25 MB, hace uso de un 3% de la CPU y un 0.3 % de la red. Estos últimos indicadores de funcionamiento se han obtenido haciendo pruebas con un equipo de 1.88 GHz y con 8 impresiones simultaneas en un estado obstructivo de la impresora (cancelación de impresiones y tickets). 166 Web Document Store and Printing 4.5. Tarea Programada 4.5.1. Fichero de log La información que se muestra en el fichero de log durante la ejecución de la tarea programada es la información sobre el número de los archivos eliminados de la base de datos, si se han eliminado solo los documentos pagados o los pagados y los que tienen fecha expirada. 4.5.2. Detección de errores Se pueden producir los siguientes errores: Error al intentar leer el número de días a los que expiran los documentos. Error al desencriptar los datos de la cadena de conexión. Error al intentar abrir la conexión a la base de datos. Error al intentar borrar los archivos pagados Error al intentar borrar los archivos pagados o expirados. 4.5.3. Previsión de crecimiento Se borrarán automáticamente los ficheros más antiguos de log cuando se alcance el número máximo de ficheros configurado. El fichero de log crecerá diariamente 4KB si no se produce ningún error. Crecerá algo más si se produce algún error. El tamaño máximo que podrían ocupar los ficheros de log se calcula multiplicando el tamaño máximo de cada fragmento de log (maximumFileSize) por el numero de ficheros permitidos (maxSizeRollBackups). Ambos son parámetros de configuración. <maxSizeRollBackups value="10" /> <maximumFileSize value="3MB"/> 167 Web Document Store and Printing En el ejemplo serian 30MB de tamaño maximo de archivos de log. 4.5.4. Indicadores de funcionamiento La carpeta de instalación ocupa aproximadamente 312KB en disco. 168 Web Document Store and Printing Anexo B. Manual de usuario final Web Document Store and Printing 1. Introducción El objetivo de este documento es que sirva como manual de uso para los usuarios del servicio Web Document Store and Printing. Esta herramienta permite el almacén de documentos en nuestros servidores para su posterior descarga o impresión. Para subir archivos, el acceso es independiente de donde se encuentre el usuario y el PC o portátil utilizado. La descarga e impresión debe realizarse en PC gestionado. 2. Requisitos del sistema Para poder hacer uso de este sistema, necesitará cumplir los siguientes requisitos: PC u ordenador portátil con conexión a Internet para poder acceder a los servidores de Web Document Store and Printing. Un navegador web. Este servicio es disponible desde cualquier navegador existente: Internet Explorer, Mozilla Firefox, Opera, Chrome, Safari, etc. 170 Web Document Store and Printing 3. Modo de uso 3.1. Página de inicio Figura 1. Página de inicio Es la página principal, observada en la Figura 1, donde nos encontramos con dos opciones principales: “Subir Archivos”: Pulsando este enlace nos dirige a la página de la Figura 2, donde se podrá seleccionar el archivo que se quiere almacenar en nuestros servidores. Explicado más a fondo en el apartado 3.2. “Descargar e imprimir”: Nos redirecciona a la página de la Figura 5, donde nos pide el código del documento a descargar. 171 Web Document Store and Printing Además nos encontramos con una serie de opciones disponibles en todas las páginas del servicio como son: Banderas de países donde podremos seleccionar el idioma de los textos. Cómo se puede ver en la Figura 1, en la parte superior derecha, se dispone de cuatro idiomas diferentes: español, portugués, inglés y francés. Una serie de enlaces en la parte superior izquierda: o Inicio: Desde cualquier página del documento, seleccionando este enlace, aparece la página de inicio. o Ayuda: Pequeño documento de ayuda de manejo del servicio. o Política de privacidad: Se muestran las políticas de privacidad en el uso del servicio. o Asistencia técnica: información sobre la compañía que presta el servicio. o FRACTALIA: Enlace a la página web de Fractalia. o Mapa del sitio: Mapa web del sitio. 172 Web Document Store and Printing 3.2. Subida de archivos Figura 2. Página de subida de ficheros Desde esta página se puede seleccionar el archivo que se desea subir al servidor para almacenarlo temporalmente. Para seleccionar el archivo se debe pulsar el botón de búsqueda y una vez encontrado pulsar el botón “Subir archivo” para comenzar la transferencia. Antes de subir el archivo observe con atención los parámetros que aparecen en el recuadro: Tamaño máximo del archivo. Tamaño máximo recomendado. Tiempo de permanencia del archivo en el servidor. 173 Web Document Store and Printing Si el archivo se ha subido correctamente, aparecerá una página de confirmación indicándonoslo Figura 3. Además nos aparecerá un código que nos será necesario introducir a la hora de la descarga e impresión del archivo. Es muy importante apuntar este código para identificar el documento. Figura 3. Página de confirmación de subida de fichero, desde PC Fractalia 3.3. Descarga e impresión de archivos A la hora de descargar archivos, podemos encontrarnos con 2 posibilidades: 3.3.1. Descarga desde su propio PC Desde su PC o portátil no será posible la gestión de este apartado y como se indica en la Figura 4, se deberá dirigir a un ordenador de un centro gestionado por Fractalia para poder descargarlo o imprimirlo. 174 Web Document Store and Printing Figura 4. Mensaje de descarga de fichero, desde PC de usuario 3.3.2. Desde un PC gestionado Al acceder a la página de descarga desde un PC gestionado, se le mostrará una página como la que puede ver en la Figura 5, donde puede introducir el código del documento para iniciar la descarga e impresión. 175 Web Document Store and Printing Figura 5. Página de introducción de código Antes de imprimir fíjese en los tipos de impresión disponibles. En función de las propiedades elegidas a la hora de imprimir se aplicará uno de estos tipos, por lo tanto: Ponga atención a las propiedades de impresión al imprimir el documento. Para iniciar la descarga, introduzca el código que se le proporciona después de subir el archivo y pulse el botón “Iniciar proceso”. Si el código introducido es incorrecto le saldrá un mensaje de error. Si por el contrario es correcto nos redirigiremos a la página de la Figura 6, donde aparece un mensaje confirmándonos que el código es válido y se corresponde con un archivo almacenado. 176 Web Document Store and Printing Figura 6. Página de descarga de fichero Una vez realizado este paso existen tres opciones: Descargar el archivo: Pulse el botón para comenzar la descarga. El archivo descargado estará formado por el nombre de archivo original, más un código necesario para su identificación en el servidor. No modifique el nombre del archivo antes de la impresión, si no ésta no será posible. El archivo seguirá el protocolo de descarga de su navegador, como cualquier otro documento descargado de Internet. Cancelar la descarga: Cancela la opción de descarga de este archivo y se redirige, de nuevo, a la página de solicitud de introducción de código. Fin del temporizador: Cuando se acaba el tiempo del contador, aparece un mensaje que nos permite monitorizar las impresiones o volver a introducir un código de archivo. 177 Web Document Store and Printing Para descargar el archivo se deberá pulsar el botón “Descargar archivo”. Cuando finaliza el temporizador que aparece en la página, independientemente de si se ha descargado el archivo, nos saldrá el mensaje de la Figura 7. En él nos encontramos con dos opciones: Pulsar botón “Aceptar”: Nos dirigimos a la página de monitorización, como la mostrada en la Figura 8. Pulsar botón “Cancelar”: Volvemos a la página de la Figura 5 que nos vuelve a solicitar la introducción de código del documento. Figura 7. Mensaje con opción monitorización 178 Web Document Store and Printing 3.4. Página de monitorización Figura 8. Página de monitorización Como vemos en la Figura 8, la página de monitorización nos muestra todas las impresiones activas y su estado. Esta página es refrescada cada 5 segundos y actualiza el estado consultando a la impresora. En esta página existen dos opciones: Pulsar botón “Pausar monitorización”: Se pausa la monitorización, con lo cual la página deja de refrescarse y permanece en el estado que tuviera en el momento de pulsar este botón. En la Figura 9 se observa un ejemplo. Pulsar botón “Finalizar monitorización”: Aparece un mensaje de final de monitorización como el de la Figura 10. 179 Web Document Store and Printing Figura 9. Página de monitorización pausada Con la monitorización pausada tenemos también la opción de finalizar la monitorización o volver a reiniciarla. Si pulsamos “Finalizar monitorización” aparece el mensaje de la Figura 10. 180 Web Document Store and Printing Figura 10. Mensaje de fin de monitorización 181 Web Document Store and Printing Anexo C. Manual de usuario gestor Web Document Store and Printing 1. Introducción El objetivo de este documento es que sirva como manual de uso para los usuarios explotadores finales y encargados de la facturación del servicio Web Document Store and Printing. Esta herramienta permite ver el estado de las impresiones de un documento, así como confirmar o cancelar los pagos de éstas. 2. Modo de uso 2.1. Página de inicio Figura 1. Página de inicio Como se puede observar en la Figura 1, en la página de inicio nos aparece un formulario para introducir el código del documento del cual queremos observar los pagos. Este es el código mostrado en la confirmación de la subida de un fichero. 183 Web Document Store and Printing Al pulsar el botón “Aceptar”, si el código es correcto, se mostrará una página similar a la mostrada en la Figura 3, por el contrario si el código es incorrecto se añadirá la línea: “El código de descarga introducido tiene un formato incorrecto” y se dará la opción de volver a introducir el código. Otras opciones de la página: Banderas de países donde podremos seleccionar el idioma de los textos. Cómo se puede ver en la Figura 1, en la parte superior derecha, se dispone de dos idiomas: español e inglés. Enlace “Inicio”, nos dirige a la página principal de “Web Document Store and Printing”. Imagen “Fractalia”. Pulsando en la imagen de Fractalia, que se encuentra en la parte superior izquierda, redirige a la página Web de Fractalia. Si se ha introducido el código pero no se ha realizado ningún trabajo de impresión aparecerá el mensaje de la Figura 2: Figura 2. Documento sin trabajos de impresión 184 Web Document Store and Printing 2.2. Trabajos de impresión de un documento Figura 3. Trabajos de impresión Si ha sido introducido correctamente el código de impresión del documento y existen trabajos de impresión, nos saldrá un contenido como el ejemplo de la Figura 3. Como podemos ver en la figura, aparecen todos los trabajos de impresión y por cada uno de ellos se muestra la siguiente información: Páginas: Número de páginas del documento. Color: Con una imagen se puede observar si al imprimir el documento se seleccionó la opción en color o blanco y negro. Precio: Precio total que cuesta la impresión del documento. 185 Web Document Store and Printing Descripción del artículo: Muestra información del tipo artículo asociado. Estado: Estado de la impresión. Cancelar ticket: Sirve para cancelar el trabajo de impresión. Posibles acciones que se pueden realizar en esta página: Pulsar el botón “Introducir nuevo código de documento”: Vuelve a la página de inicio, donde se puede volver a introducir el código de cualquier documento. Pulsar botón “Actualizar tabla de impresiones”: Refresca la tabla donde se muestran los trabajos de impresión. Vuelve a consultar si hay algún trabajo de impresión más y actualiza la columna estado. Aceptar precio y pagar impresiones: Si marcamos la casilla “Aceptar Precio” y pulsamos el botón “Pagar impresiones”, se realizará el pago. Se explica más en detalle en el Apartado 2.3. Pulsar algunas de las casillas que se encuentran en la columna “Cancelar Ticket” de cualquier trabajo de impresión: Nos saldrá, automáticamente, la página de la Figura 5 para cancelar trabajos de impresión. Más en detalle en el Apartado 2.4. Como podemos ver en la Figura 3, encima de la tabla de trabajos de impresión, si algún trabajo está incompleto se avisa con un mensaje y se debe esperar a que esté finalizado. 2.3. Pago de trabajos de impresión Marcando la casilla “Aceptar Pago” y pulsando el botón “Pagar Impresiones”, se confirmará el pago y el documento será eliminado del sistema. Como se puede observar, el precio total a pagar por el cliente es el marcado en rojo como “Precio Total” 186 Web Document Store and Printing Si la operación de pago se completa correctamente, le aparecerá una página como la que se muestra en la Figura 4. Figura 4. Operación de pago completada 187 Web Document Store and Printing 2.4. Cancelación de trabajos de impresión Figura 5. Cancelación de trabajo de impresión Cuando pulsamos cualquier casilla de la columna “Cancelar Ticket” se redirige a una página como la de la Figura 5. Como se observa podremos introducir el motivo de la cancelación y pulsar “Cancelar Ticket”. Una vez cancelado saldrá un mensaje de confirmación como el de la Figura 6. En caso de arrepentimiento siempre se puede pulsar el botón “volver atrás”. 188 Web Document Store and Printing Figura 6. Mensaje de confirmación de cancelación de trabajo de impresión 189