76
Manual de Empweb Versión 0.6 Lunes, 14 de Septiembre de 2009

Manual de Empweb Versión 0modelo.bvsalud.org/download/abcd/manuais/Manual_Empweb... · 2012-10-15 · Instalación de MySql En el paquete de distribución de EmpWeb ... será fundamental

  • Upload
    buitruc

  • View
    216

  • Download
    0

Embed Size (px)

Citation preview

Manual de Empweb Versión 0.6

Lunes, 14 de Septiembre de 2009

Tabla de Contenido

Introducción.................................................................................................................... 3 Requisitos previos a la instalación de EmpWeb v0.9 .............................................................. 3 Instalación de MySql......................................................................................................... 3

Problemas de Instalación de MySql.................................................................................. 8 ErrorCode 0 – Error Number 0 - Problem 0................................................................... 8 ErrorCode 1045 – Error Number 1045 - Problem 1045. ................................................... 8

Instalación de ABCD – Leer y completar breve.....................................................................10 Instalación de Empweb ....................................................................................................11

Iniciando la aplicación EmpWeb. .................................................................................12 Problemas para inicializar la base datos. ......................................................................15 Configuración Manual de EmpWeb bajo MySql. .............................................................16

Transacciones.................................................................................................................16 Instrucciones para configurar las bibliotecas (v0.85) ............................................................21

1. Cambiar la definición de la biblioteca en el conf-getLibraries pipeline ...............................21 2. Cambiar los parámetros globales de la biblioteca en el globalenvironment pipeline. ...........22 3.Asignar derechos para los usuarios del sistema. ............................................................23

Administración de calendarios en EmpWeb..........................................................................28 Generación de nuevos operadores. ....................................................................................29

Crear un nuevo operador ...........................................................................................29 Pertenencia a grupo de operaciones y asignación de permisos.........................................32

Relación de las bases de datos (ABCD-EmpWeb). ................................................................35 Generar Nuevo Usuario.................................................................................................36 Objetos de Préstamos. BD LoanObjects...........................................................................39

Definición de Perfiles por tipo de usuarios y tipo de objetos...................................................41 Componentes de un perfil. ............................................................................................42 Creación de un nuevo perfil ...........................................................................................43

Reservas bajo EmpWeb...................................................................................................46 Anexo I . Pipelines y Groovy. (sin revisar) .........................................................................48

• Pipelines globales. (Configuration Pipelines List) .....................................................48 • Pipelines de transacciones (Transaction Pipelines List) .............................................48 • Pipelines de Informes. (Statistics Pipelines List)......................................................49

Introducción 1- Qué es EmpWeb, quién lo desarrolló (es parte de ABCD, es complementario a ABCD….) 2- Cómo funciona (en líneas generales…) 3- Tecnología que usa 4- Que solución aporta y como se implanta 5- Para qué tipo de bibliotecas se recomienda

Requisitos previos a la instalación de EmpWeb v0.9 Antes de proceder a la instalación de EmpWeb deberá disponer de los siguientes software´s que interactúan entre si y hacen posible el correcto funcionamiento de EmpWeb. MySql. Versión mysql-essential-5.1.35-win32 o posterior ABCD versión ABCD_full_20090702 o posterior Si este software ya esta instalado y funcionando correctamente en su computador, salte al apartado de Instalación de Empweb. Si tiene que instalar MySql salte al apartado Instalación de MySql. Si tiene que instalar ABCD vea el apartado Instalación de ABCD. Advertencia: Antes de proceder a instalar cualquier software realice las copias de seguridad (backup) necesarias de sus bases de datos y documentos personales.

Instalación de MySql En el paquete de distribución de EmpWeb (distro EmpWeb) no se incluye la carpeta Mysql que contiene la versión de Mysql 5.35 server for Wind32; deberá descargarlo de la Web. Ejecute el archivo mysql-essential-5.1.35-win32.msi para iniciar la instalación de MySql que lo guiará paso a paso en el proceso de instalación. Seleccione Typical cuando le requiera qué tipo de instalación desea realizar mediante la pantalla que sigue; luego haga clic en Next.

Se inicia así el proceso de instalación que dura unos minutos y luego le sigue un proceso de configuración. El proceso de configuración es guiado paso a paso y se inicia con la pantalla que sigue. Aquí debe seleccionar Standard Configuration; hacer clic en Next.

A continuación deberá seleccionar Install AS Windows Service; Service Name debe decir MySql; seleccione Include Bin directory in PATH (aunque no es necesario para el funcionamiento de EmpWeb, será fundamental para acceder a MySql en caso de errores). Hacer clic en Next.

El próximo paso requiere una root password.

Si es la primera vez que instala MySql no aparecerá el campo Current root password (marcado en la imagen que sigue con una elipse).

Si ya tenia instalada una versión previa de MySql, aparecerá el campo Current root password (marcado en la imagen que sigue con una elipse) y debe ingresar allí la password correspondiente.

Deberá ingresar en el campo New root password empweb como root password y confirmarla en el campo confirm. Ingresada esta password empweb no necesitará configurar nada más durante el resto del proceso. Este paquete de distribución (distro EmpWeb) de EmpWeb tiene predefinido como cuenta de conexión en MySql root/empweb.

A continuación verá una pantalla igual a la que se muestra en la que informa que está preparado para ejecutar la configuración definida en los pasos anteriores; debe hacer clic en Execute.

Si el paso de configuración se ejecuto con éxito, sin errores, debe aparecer una pantalla idéntica a la que sigue. En ella informa que el proceso de configuración se realizo satisfactoriamente, debe hacer clic sobre el botón Finísh para terminar.

Una vez que se ha concluido exitosamente la instalación y configuración del MySql, debe continuar con la instalación de ABCD y EmpWeb. Advertencia:

Si en su computadora se había realizado en alguna ocasión, una instalación de MySql es muy posible que el proceso de configuración no se realice según lo detallado en los pasos anteriores y se mostrarán mensajes de error; uno de ellos es igual al que sigue.

Este mensaje refiere a que la password ingresada en la pantalla de configuración Current root password (marcado en la imagen con una elipse) no es la correcta. Debe hacer clic sobre el botón Skip y luego consultar la sección Problemas de Instalación de MySql.

Problemas de Instalación de MySql Problemas más frecuentes en la instalación de MySql Los problemas más comunes que ocurren durante la instalación de MySql son relativos a instalaciones anteriores, versiones previas, etc. de Mysql; esto se debe a que mantiene almacenada las root/password aún después de haber desinstalado el producto. Si en su computadora tenia instalada una versión anterior de MySql y la desinstaló desde el Panel de Control/Agregar Quitar Programas es muy probable que el servicio MySql continué activado y eso genera conflictos en la instalación.

ErrorCode 0 – Error Number 0 - Problem 0. El código de error 0 es devuelto cuando se intenta iniciar el servicio MySql y existe una versión previa en funcionamiento. En este caso, el problema se resuelve deteniendo el servicio MySql (stopping the mysql service) que esta corriendo en la computadora, ó reiniciar la computadora para detener el servicio anterior e iniciar el nuevo servicio.

ErrorCode 1045 – Error Number 1045 - Problem 1045. Otro de los problemas más frecuentes en las computadoras que funcionan como Server MySql es que el usuario no recuerda la root password de instalaciones anteriores del producto. De allí que al intentar realizar una nueva instalación solicita la root password de la instalación anterior o versión previa y no hay modo de saltar este paso. Se recomienda el procedimiento que sigue a los fines de poder realizar una instalación exitosa de MySql.

6- Desinstale la versión de MySql que tenga instalada en su computadora 7- Borre la carpeta C:\Archivos de Programa\MySql 8- Instale la nueva versión o versión que va a utilizar

Seguramente obtendrá el mensaje de error 1045, presione Skip

Detenga el servicio MySql, accediendo en Inicio, Panel de Control, Herramientas Administrativas, Servicios (Start Menu - Control Panel - Administrative Tools - Services) Busque MySql en las lista de servicios, haga doble clic, presione Detener. Inicie la consola DOS. Inicio, Ejecutar, escriba cmd, presione enter En la ventana de la consola DOS, cambie a la carpeta C:\Archivos de Programa\MySQL\MySQL Server 5.1\bin digitando cd C:\Archivos de Programa\MySQL\MySQL Server 5.1\bin presione enter. Cree un archivo de texto con el nombre mysql-init.txt

9- Ingrese las siguientes líneas en el archivo mysql-init.txt UPDATE mysql.user SET Password=PASSWORD('empweb') WHERE User='root'; FLUSH PRIVILEGES;

10- Cierre el archivo. Volverá al cursor de la consola DOS 11- Ejecute el siguiente comando

mysqld --init-file=mysql-init.txt –-console 12- Recibirá un mensaje que mysql se ha iniciado y el root/password ha sido cambiado 13- Cierre la consola DOS

Reinicie el servicio accediendo en Inicio, Panel de Control, Herramientas Administrativas, Servicios (Start Menu - Control Panel - Administrative Tools - Services) Busque MySql en las lista de servicios, haga doble clic, presione Iniciar. Más información sobre reseteo de contraseñas en MySql, puede encontrar en el sitio http://dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html

Error_getting_conecction_from_pool? Back to police. La primera vez que accedemos al software EmpWeb, al momento de realizar una transacción nos devuelve el siguiente mensaje de error:

¿???error_getting_conecction_from_pool???? Back to police. Debemos comprobar que el servicio Mysql esta activado y que la Base de datos ha sido reinicializada. Ver más información en el apartado Configuración principal de EmpWeb.

Instalación de ABCD – ABCD es el acrónimo de una suite de software para la automatización de las bibliotecas y centros de documentación. En español esto es: "Automatisación de Bibliotecas y Centros de Documentación", mantiene las mismas siglas válida también para el francés (Bibliothèques et des Automatización de Centros de Documentación) o portugués (Automatización das Bibliotecas e dos Centros de Documentación). ABCD es desarrollado, promovido y coordinado por BIREME (http://www.bireme.br/php/index.php?lang=es) con el soporte de VLIR (http://www.vliruos.be/intro.php) El nombre expresas lo ambicioso de esta suite de no solo proveer funciones de automatización para las bibliotecas “clasicas” sino tambien a otro proveedores de información tales como centros de documentación. Flexibilidad y versatilidad son los criterios de vanguardia que motivan el desarrollo de este software. La flexibilidad se pone en evidencia por ejemplo en el hecho de que prácticamente cualquier estructura bibliografica puede ser administrada o creada con este software. Pueden también ser creadas estructuras no bibliograficas de bases de datos para el manejo de información textual, esta restricción es impuesta por la tecnología subyacente de base de datos CDS/ISIS. ABCD es llamado “suite” de software para la automatización de bibliotecas y centros de documentación porque esta constituido por módulos relativamente independientes que trabajan plenamente integrados ó en forma separada sin depender unos de otros. De hecho algunos de los software´s avanzados, la mayoría ya han demostrado su potencia en aplicaciones de BIREME en ambientes de alta demanda como la Biblioteca Virtual en Salud, fueron adoptados y adaptados en ABCD manteniendo sus nombres originales iAH, SeCS, etc. y otros como EmpWeb (empréstito web) originalmente desarrollado por la Kalio Ltda. de Uruguay e implantado en la Pontificia Universidad Católica de Valparaíso (http://www.ucv.cl). La estructura general de la suite ABCD se muestra en el diagrama que sigue.

Para la correcta instalación de ABCD consulte el Manual de ABCD

Instalación de Empweb Antes de proceder a la instalación de EmpWeb deberá disponer de los siguientes software´s que interactúan entre si y hacen posible el correcto funcionamiento de EmpWeb. MySql. Versión mysql-essential-5.1.35-win32 o posterior, configurado de acuerdo a las especificaciones dadas en el apartado Instalación MySql en este Manual. ABCD versión ABCD_full_20090702 o posterior. Para su instalación vea el apartado Instalación de ABCD en este Manual. Advertencia: Si en su computadora ya estaba instalado (previo a la instalación de ABCD y EmpWeb) MySql (v. 4.01 o superior) deberá crear una nueva base de datos llamada transa asignando un nombre de usuario y password de acuerdo a la configuración de EmpWeb. Vea el apartado Configuración Manual de EmpWeb bajo MySql. Para proceder a la instalación de EmpWeb deberá descomprimir este paquete de distribución (distro EmpWeb) en una carpeta temporal creada ad-hoc. Seguidamente deberá copiar las carpetas creadas durante el proceso de descompresión en la carpeta principal de ABCD.

Haga clic en Aceptar cuando el sistema intenta sobrescribir carpetas y archivos; este proceso no interfiere ni daña los archivos preexistentes de ABCD ni sus funcionalidades. La carpeta principal de ABCD se verá con el contenido que se muestra en la imagen que sigue.

Cuando inicie ABCD haciendo doble clic sobre ABCD_Start se abrirán dos ventanas de consola DOS, una por la iniciación del servicio Apache y otra por el servicio Jetty_Java_server que necesita EmpWeb. Luego de unos minutos solo permanece abierta la ventada de consola DOS que corresponde al Java_server. Durante el funcionamiento de EmpWeb no cierre esta ventana pues ocasionara el malfuncionamiento de la aplicación. Ejecute ABCD_exit para cerrar las aplicaciones, ese programa detiene los servicios iniciados por ABCD y cierra la ventana de la consola DOS de Java_server.

Iniciando la aplicación EmpWeb. Para iniciar la aplicación EmpWeb deberá ejecutar ABCD_start, se abriran 2 ventanas de consola Dos, luego de una minutos se cierra una de las ventana de consola Dos y permance abierta la ventana de consola Dos de Java_server. En su navegador ingrese la dirección http://localhost:8080/empweb/ y luego de unos segundos se abrirá la ventana del primer login de EmpWeb. Es necesario, al ingresar la dirección en el navegador, colocar la ultima barra inclinada / para el correcto funcionamiento de EmpWeb.

En esta pagina de login, use los mismos datos de la cuenta admin usada en ABCD (abcd/adm) luego presione Enviar (Submit) Luego se desplegará una segunda página de login relativa a la selección de la biblioteca; este paso es necesario para los usuarios con derechos de acceso a más de una biblioteca.

Seleccione la biblioteca que usted utilizar y luego presione Enviar (Send/Submit) completado estos procedimientos se encontrará en la aplicación EmpWeb. Configuración principal de EmpWeb. Luego acceder, previo login, se abrirá una página como la que sigue; aún deberá realizar un paso muy importante antes de comenzar a utilizar EmpWeb.

En la parte inferior de la pantalla, antes de las menciones de responsabilidad, se encuentra información relativa al estado actual de la biblioteca seleccionada en cuanto a transacciones. (Señalado en la imagen por el recuadro rojo). Esta información es relativa al estado de la base de datos transacciones que hasta el momento deberá estar vacía pues no hemos realizado ninguna transacción. Debería mostrar un valor 0 (cero) al lado derecho de cada operación; pero esto ocurrirá cuando inicialicemos la base de datos desde EmpWeb. Para ello debemos acceder al menú Administración, submenú Bases y allí se despliega una pantalla de Confirmación y advertencia sobre la operación que estamos por realizar.

Deberemos confirmar la operación haciendo clic en YES (SI) para la inicialización de las bases de datos para EmpWeb. Si todo el proceso se realiza con éxito, nos devuelve esa información mediante un mensaje de que la base de datos se a inicializado. Esta información se verá reflejada en la página de Inicio de EmpWeb mostrando un valor 0(Cero) a la derecha de cada tipo de transacción. Deberá verse como en la imagen que sigue.

Nota: esto refiere a que la conexión entre EmpWeb y MySql es la correcta.

Problemas para inicializar la base datos.

Cuando que haya desinstalado completamente MySql, siempre queda información remanente en la computadora. Aunque haya borrado la carpeta MySql dentro de Archivos de Programa. Esta información remanente, de hecho, genera problemas de inicialización de la base de datos de EmpWeb desde la misma aplicación. La solución a este problema debe realizarse desde la consola de DOS invocando MySql y aplicando el comando drop sobre la base datos. Abra la consola DOS

Ejecute el comando mysql –uroot –p (presione enter) *** insert the password *** (digite la contraseña) mysql> DROP DATABASE transa; mysql> quit;

Posteriormente podrá incializar la base de datos desde EmpWeb. The solution to this problem is to open a console, invoke mysql and manually drop the database:

Configuración Manual de EmpWeb bajo MySql. El camino para configurar el cuenta de usuario root manualmente, consiste en editar el archivo /ABCD/empweb/engine/WEB-INF/conf/engineconf.xml. Utilice un editor de texto como el Notepad. Deberá localizar la linea 150 y a partir de allí encontrará el siguiente contenido: <base name="TRANSA" type="transa"> <uri>jdbc:mysql://localhost/transa</uri> <user>root</user> <password>empweb</password> <schema>ew15db-schema.sql</schema> <!-- It's a resource inside ew15db.jar --> <backupDir>C:/ABCD/empweb/db</backupDir> <poolSettings> <driverClassName>com.mysql.jdbc.Driver</driverClassName> <minPoolSize>3</minPoolSize> <maxPoolSize>20</maxPoolSize> <initialPoolSize>3</initialPoolSize> <acquireIncrement>2</acquireIncrement> <idleConnectionTestPeriod>30</idleConnectionTestPeriod> <testConnectionOnCheckin>false</testConnectionOnCheckin> <automaticTestTable>ew_test_table</automaticTestTable> <maxIdleTime>30</maxIdleTime> </poolSettings> <collation></collation> </base> Antes de grabar el archivo, deberá el nombre de usuario y la contraseña. Para trabajar en modo de producción se recomiendo no usar el usuario root. Para que surtan efecto los cambios realizados deberá cerrar ABCD y ejecutar el ABCD_exit.

Transacciones. En el paquete de distribución de EmpWeb (distro EmpWeb) la base de datos predefinida para las transacciones es la base de datos Marc. Ingresando al MySite localhost:9090/site, accedemos desde el acceso directo a la base de datos Marc cuando realizamos una búsqueda desplegara al lado de cada resultado un botón de disponibilidad (avaibility) en aquellos registros que se encuentren registrados como objetos de prestamos (asociado mediante el campo Control Number). Si hacemos clic sobre ese botón disponibilidad (avaibility) se abre una ventana nueva desplegando los ejemplares con que cuenta el registro seleccionado. En el paquete de distribución de EmpWeb (distro EmpWeb) existen objetos de prestamos (loanobjects items) para un grupo de registros, podemos acceder a ellos haciendo una búsqueda genérica ($) y obtendremos una pantalla como la que sigue.

Y al hacer clic sobre el botón disponibilidad (avaibility) mostrará las existencias para ese título tal como sigue.

Como podemos observar a través de esta pantalla podremos realizar una reserva sobre este item haciendo clic sobre el botón Place Reservation (hacer reserva) que abrirá MySite para realizar la reserva. Esta operación hace uso de la base de datos Usuarios solicitando login/password para identificar al usuario. Para tener acceso a la base de datos de usuarios deberá hacerlo desde la aplicación principal de ABCD (localhost:9090/) e ingresar como administrador de prestamos. Allí podrá Editar/Crear/Modificar usuarios otorgando los permisos necesarios para acceder a MySite.

Los objetos de prestamos Loanobjects son automáticamente cargados en las base de datos y se supone que no pueden ser editados por los usuarios a los fines de evitar inconsistencias en el sistemas. A modo de prueba en este paquete de distribución de EmpWeb (distro EmpWeb) se ha incluido la posibilidad de editarlos ingresando como Administrador del Sistema (System Administrador) desde la aplicación principal de ABCD. Editando los registros podremos cargar los datos en los distintos campos. El campo 001 es el ID=identificador único de registro; el campo 10 el nombre de la base de datos (para nuestro caso de estudio Marc) y el campo repetible 959 es el que contienen la información única de cada item.

Instrucciones para configurar las bibliotecas (v0.85) Los pasos para configurar las bibliotecas en EmpWeb son los siguientes:

1. Cambiar la definición de la biblioteca en el conf-getLibraries pipeline 2. Cambiar los parámetros globales de la biblioteca en el globalenvironment pipeline. 3. Asignar derechos para los usuarios del sistema.

1. Cambiar la definición de la biblioteca en el conf-getLibraries pipeline Habiendo iniciado la aplicación EmpWeb selecciones Administración, Pipelines y allí se mostrará una pantalla titulada Trasaction Pipeliens Administration (similar a la figura que sigue) y allí podrá ver las dos primeras opciones.

Para realizar los cambios deberá presionar sobre Edit y se mostrará la ventana que sigue a continuación.

Los parámetros en leguaje XML a modificar se encuentran señalados con el recuadro rojo. En el ejemplo que mostramos arriba podemos observar que se encuentran configuradas las bibliotecas ING. ARQ, AGR y VET. En esa primera lista de parámetros (recuadro verde) se definieron los nombres de las bibliotecas. En ese parámetro es posible ingresar direcciones IP (ej. 192.168.0.123) o las máscaras de IP de cada biblioteca. El segundo grupo de parámetros (recuadro amarillo) define el horario de atención de cada una de las bibliotecas definidas en el parámetro anterior.

2. Cambiar los parámetros globales de la biblioteca en el globalenvironment pipeline. Editando los parámetros definidos en la línea globalenvironment (recuadro rojo en la imagen que sigue) podremos definir varios parámetros que afectan a todo EmpWeb.

Editando estos parámetros podemos accedemos a una pantalla similar a la que sigue, siempre en lenguaje XML, en donde aparecen dos grupos de parámetros.

El prime grupo de parametros define el Nombre de la Biblioteca tal como se presentara en la interface Web y el segundo grupo de parámetros posibilita definir el horario de préstamos para cada biblioteca del sistema.

3.Asignar derechos para los usuarios del sistema. Definido el nuevo esquema de bibliotecas dentro de sistema (EmpWeb), deberemos asignar los permisos necesarios al o los usuario/s para que pueda acceder a EmpWeb una vez finalizada la sesión actual. Para ello accedemos desde el menú Administración de EmpWeb, operadores. Allí deberemos seleccionar el usuario que tiene acceso a todas las aplicaciones, en nuestro caso usuario abcd con privilegios de administrador. A través de este acceso se puede Crear nuevos usuarios y asignar los permisos que correspondan; también es posible Editar, Modificar o Eliminar los usuarios existentes, tal como se muestra en la imagen que sigue.

Al Editar el superusuario (porque tiene todos los privilegios) abcd, accedemos al esquema de los bibliotecas definidas en el sistema y asignaremos allí los nuevos accesos permisos de acceso.

Advertencia: No olvide grabar cada uno de los cambios (Submit/Enviar) ya que los permisos asignados permanecen inalterables porque el usuario abcd tiene privilegios sobre todas las operaciones. Una vez que hemos asignado los nuevos permisos de acceso a las bibliotecas, debemos hacer un logout o salida del sistema sin reiniciar EmpWeb. Al hacer el nuevo login o ingreso podremos ver en la lista de bibliotecas con las nuevas incorporaciones y accediendo como el usuario y contraseña asignados.

Importante: Recuerde que las posibilidades de realizar transacciones (prestamos/devoluciones/reservas) con las nuevas bibliotecas dependerá de la base de datos objetos de prestamos (loanobjects). Es necesario definir los objetos de préstamos (loanobjects) como propiedad de las bibliotecas para poder realizar estas operaciones.

En el ejemplo de la ventana precedente, podemos ver los valores cargados en los respectivos subcampos ^i, ^l y ^d para el objeto 10010.

Administración de calendarios en EmpWeb. La administración de los calendarios para las transacciones de préstamo y devolución en EmpWeb es global a todo el aplicativo y a las bibliotecas, con lo cual podremos definir todos los años a los cuales se aplica cada uno de los calendarios. Debemos ingresar en la opción de administración, calendarios. Cuando editamos un calendario nos muestra una grilla en la que las filas corresponden a los meses y las columnas a los días. Activando y desactivando en la casilla correspondiente a cada día del mes podremos definir los no laborables que el sistema debe considerar. Por defecto en este paquete de distribución de EmpWeb (distro EmpWeb) esta configurada como hora limite para devoluciones las 3pm del día del vencimiento; si deseara ajustar este horario deberá hacerlo desde el menú Administración, Pipelines. Las devoluciones realizadas a partir de las 3:01 pm serán consideradas vencidas y objeto de sanciones (multas o suspensión) según corresponda al perfil del usuario. En el caso que fuera menester incorporar un día no laboral al calendario, es posible hacerlo y todos los vencimientos que ocurrían en esa fecha serán automáticamente trasladados al próximo día laboral.

Generación de nuevos operadores. Ingresaremos a EmpWeb con la dirección localhost:8080/empweb/; cabe recordar la necesidad de colocar el ultimo slash (/ barra inclinada) porque de lo contrario no encuentra la aplicación. Es fundamental analizar correctamente las operaciones que realiza cada operador desde EmpWeb para poder asignar los permisos necesarios que lo habiliten y den acceso a las distintas bases de datos y operaciones sobre las mismas. Ingresamos usando las mismas claves que se usan para el login en ABCD (abcd/adm): seguidamente nos presenta una segunda pantalla de acceso a EmpWeb seleccionando la biblioteca sobre la que deseamos trabajar. Advertencia: Para Generar ó Modificar Operadores deberá contar con los permisos suficientes para esas operaciones; en este caso el usuario abad/adm posee los permisos adecuados. Desde la función administración, tenemos acceso al menú operadores que despliega la lista de operadores definidos hasta el momento, habilitando las funciones de Editar/Copiar/Borrar los usuarios definidos y además generar nuevos operadores. Esta lista se muestra en la imagen que sigue a continuación.

Crear un nuevo operador Al momento de crear un nuevo operador, lo primero que solicita es el Id Operador que deberá utilizar el operador cuando haga el login a EmpWeb; y seguidamente desplegará una pantalla organizada en distintas secciones. Las secciones son

- información del operador; - IP de acceso;

- bibliotecas a las que puede acceder y horarios, - pertenencia a grupo de operaciones y permisos; - y finalmente las propiedades o permisos para búsqueda en las bases de datos de usuarios

y de objetos. Cada una de las secciones cuenta con un botón ENVIAR/SUBMIT que deberá utilizar cada vez que asigne permisos es esa sección.

Confirmada la creación del operador, debemos ingresar los detalles de la cuenta del operador, las cuentas o IP autorizadas para ingresar y los permisos asignados.

Definir las IP desde donde podrá acceder el operador otorga una seguridad adicional a la aplicada a través de los requisitos de ingreso (login/password) ya que al definir la IP o las IP de cada una de las bibliotecas y activamos esos permisos de acceso, el usuario solo podrá acceder desde ese biblioteca/IP particular. También es posible ingresar libremente una IP desde la que pueda ingresar este operador en el recuadro Lista de Direcciones IP; ó ingresar varias direcciones IP seguidas de punto y coma. El acceso Cualquier Lado/AnyWhere equivale a otorgar acceso desde cualquier computador conectado a Internet. En la sección que sigue deberemos definir sobre que biblioteca tiene derecho este operador que estamos creando, y si se ajusta el ingreso permitido a la franja horaria señalado o si puede ingresar en cualquier momento.

Pertenencia a grupo de operaciones y asignación de permisos En la siguiente sección deberemos indicar cuales son las acciones que tiene permitidas este operador. La operación de ingreso a la Home siempre tiene que estar permitida. En la imagen que sigue se muestran los permisos asignados a este operador. Transacciones, Regresar a la Home; Dentro de transacciones solo puede ingresar el menú reservas y dentro de este pueda crear nuevas reservas; y que pueda realizar devoluciones. La pantalla de permisos deberá verse como se muestra a continuación y no debe olvidar de presionar SUBMIT/ENVIAR para que se guarden las opciones seleccionadas.

En la última sección de la pantalla de permisos (ver imagen que sigue) se pueden definir la o las bases de datos de objetos y/o de usuarios sobre las cuales operar. Al momento de realizar una transacción tendrá acceso a la base de datos que le hayamos definido en este momento, una en particular ó a todas.

Finalmente, cuando el operador intente ingresar en transacciones para las cuales no se le hayan asignado los permisos necesarios, EmpWeb desplegará un mensaje de error informando que no posee el operador los permisos correspondientes.

Relación de las bases de datos (ABCD-EmpWeb). En el siguiente apartado consideraremos lo siguientes aspectos:

- relacionar los usuarios entre ABCD y EmpWeb; - generar nuevos usuarios y que se vean automáticamente en EmpWeb; - y cómo consultar los objetos potenciales de préstamos, (objetos que son

signatarios de préstamo). Las bases de datos de usuarios son compartidas por todas las bibliotecas para EmpWeb; accediendo como administrador del sistema podremos entre otras funciones consultar los usuarios existentes en la base de datos. Para ello accedemos desde la opción Préstamos y se despliega una pantalla similar a la imagen que sigue.

El sistema maneja las operaciones a través del ID usuario, de allí que si conocemos el ID del usuario lo ingresamos en el respectivo campo del formulario y no es necesario realizar una búsqueda. Este ingreso puede ser mediante la digitación o mediante un lector de código de barras u otro dispositivo de entrada similar. Si no conocemos el ID del usuario deberemos realizar una búsqueda tipo isis; para ello ingresaremos los primeros caracteres seguidos del signo pesos (ej. guilart$) y presionar en el

botón buscar usuario para que consulte la base de datos y recupere los registros de usuarios que cumplan con la expresión de búsqueda.

Si algún registro cumple con la condición de la expresión de busqueda se despliegan tales registros; seleccionaremos el deseado haciendo clic sobre el campo ID usuario y ese dato será pasada al formulario de prestamos posibilitando continuar con la transacción.

Generar Nuevo Usuario. Para generar un nuevo usuario desde ABCD debemos acceder a la administración de las bases de datos y seleccionar la base Usuarios de Circulación (BD ejemplo incluida en este paquete de distribución de EmpWeb)

La opción Entrada de Datos permite ingresar al nuevo usuario a la base de datos con los siguientes campos:

• Tipo de usuario (de acuerdo a la lista de tipos definida en Usuarios.TAB carpeta DEF de la base de datos de usuarios)

• sexo masculino, • fecha limite de validez (refiere a la fecha hasta la cual el usuario seria considerado

valido/activo); • fecha limite de validez en formato ISO (automático) • Código de usuario; • Apellido y nombre; • Cedula de identidad; • Empresa/institución de trabajo • Ubicación • Nivel Adm. 1 • Nivel Adm. 2 • Dirección física • Dirección postal • Ciudad • Pais • Telefono • Fax • Correo electrónico • Login para acceder a Mysite • Password para acceder a Mysite • Fotografia 4x4

En este paquete de distribución (distro EmpWeb) extrae los datos de ID_usuario del campo 10 del registro de usuarios o de una tabla relacionada con usuarios, llamada user_type que está como ejemplo de conectividad con mysql. Es posible configurar la relación de la base de datos de usuarios desde cualquier otro campo o combinación de ellos de donde extraer esa información.

Editando el registro del usuario y pidiendo que haga upload de la foto podemos agregar al perfil la fotografía. Cuando accedemos desde EmpWeb a los datos del usuario, haciendo clic en ID veremos que el perfil completo incluida la foto y además los prestamos actuales y demás información sobre el mismo. Cuando procedemos a grabar el registro de usuario haciendo clic sobre le diskette que aparece al final del formulario, inmediatamente queda activo ese usuario para retirar materiales de la respectiva biblioteca.

Objetos de Préstamos. BD LoanObjects Los objetos de préstamo (loanobjects) en este paquete de distribución EmpWeb (distro empWeb) se hallan relacionados con la base de datos Marc y cuando procedamos al despliegue de registros podremos saber si tiene ejemplares disponibles haciendo clic sobre el botón que aparece a la izquierda de cada registro. Esta acción, consultar la disponibilidad de copias, permitirá hacer reservas sobre el ítem; y es aquí en donde el usuario debe ingresar su login y password para registrar la reserva.

; Esta base de datos, LOANOBJECTS, posee un campo llamado Control Number que lo relaciona con el registro en la base de datos de registros bibliográficos madre (marc); también tiene un campo Database en donde se carga la base de datos con la que se relaciona y el campo repetible Copies con los subcampos (abcefg) que posibilitan el ingreso de los datos de cada ejemplar o copia del item en cuestión. Hacer una operación de devolución es simple, podremos ingresar en Transacciones/Devolucion e ingresar el ID del item a devolver; al presionar sobre el botón procesar devolución nos devuelve información sobre el éxito de la transacción e inmediatamente se refleja esto en el estado del item en la biblioteca y en la información de Mysite.

Definición de Perfiles por tipo de usuarios y tipo de objetos. Para definir el tratamiento que EmpWeb debe darle a los distintos tipos de usuarios y de tipos objetos de préstamos, se debe acceder a los perfiles. Desde EmpWeb debemos acceder a Administración – políticas; se despliega una pantalla similar a la que sigue y en ella se nos informa sobre la política activa. Siempre encontraremos una política activa y es la que actualmente se está usando en EmpWeb que viene por defecto (default) con el paquete de instalación.

Una política involucra un conjunto de perfiles y cada uno de los perfiles son una combinación de tipo de usuario y tipo de objeto. Editando la política actual, veremos que en realidad, en este momento, tiene un solo perfil que aplica para cualquier tipo de objeto y cualquier tipo de usuario en este caso.

Si editamos un perfil, haciendo click en el enlace Editar de la Categoría de objetos (como se muestra en la imagen anterior), podremos ver todos los parámetros que se aplican en cada una de las transacciones.

Componentes de un perfil. Un perfil está constituido por cuatro columnas, la primera define el nombre del parámetro, la segunda columna es el valor del parámetro, la tercera corresponde a la descripción y la cuarta columna es la descripción de las transacciones en que se aplica este parámetro.

Imagen_005. Edición de los componentes de un perfil

En al perfil que estamos editando que se aplica a cualquier tipo de usuario y cualquier tipo de objetos y analizando las degfiniciones de las cuatro columnas; podemos observar que:

• no se activa la creación de una multa cuando un objeto es devuelto con atraso (False) • crea una multa en el caso que el usuario cancele una reserva confirmada (True) • no crea una multa si el usuario tiene una reserva expirada (False) • activa la creación de una suspensión cuando un objeto es devuelto con atraso (True) • no crea una suspensión si el usuario tiene una reserva expirada (False) • indica en 3 días la cantidad de días a esperar para que un usuario retire su reserva antes

de expirar • monto de multa para una reserva confirmada (5) • monto de la multa (multiplicador) cuando una reserva expira y el objeto no tenía

reservas(1) • monto de la multa cuando una reserva expira y habría usuarios con reserva para ese

objeto (2) En resumen, en esta sección, están todos los parámetros y todos los límites que se aplican en cada una de las distintas transacciones. Por ejemplo, por defecto se establece que la cantidad de días de préstamo definida para cualquier tipo de objeto y cualquier tipo de usuario es de 5 días.

Creación de un nuevo perfil Cuando necesitemos definir un nuevo perfil de una política, deberemos acceder al menú Administración – Políticas, Editar la política deseada (en este caso Activa Default, Editar, Crear Nuevo Perfil) y dentro de ella crear un nuevo perfil.

Por ejemplo; Si deseamos crear un nuevo perfil, para el tipo de usuario coordinadores, deberemos identificar la Clase de Usuario (coordinadores) y el tipo de objeto ó material (CDROM).

En la pantalla deberemos cargar cada uno de uno de los límites y cada uno de los parámetros, hasta completar la lista con los valores correspondientes (TRUE, FALSE, etc). Por ejemplo podemos definir:

• no se activa la creación de una multa cuando un objeto es devuelto con atraso. No trabajaremos con multas (False)

• activa la creación de una suspensión cuando un objeto es devuelto con atraso (True) • no crea una suspensión si el usuario tiene una reserva expirada (False) • cantidad de días a esperar para que el usuario retire su reserva (antes de expirar) 3 dias. • Monto de multa (multiplicador) cuando un objeto es devuelto con atraso y no posee

reservas. 0 de multa. • Monto de multa (multiplicador) cuando un objeto es devuelto con atraso y posee reservas.

0 de multa • La cantidad de días de préstamo para el objeto (pueden ser días absolutos, bibliotecas,

según defina la transacción). Se indica en este caso, 15 días para CDROM • Monto de multa total máximo que un usuario puede deber para poder realizar un

préstamo. El valor es 0 pues estamos trabajando sin multas. • Máximo número de multas que un usuario puede tener para realizar un préstamo.

Dejamos en 0 • Máximo número de multas que un usuario puede tener para realizar una reserva. 0 • Máximo número de préstamos si el usuario tiene multas. 0 • Si el usuario tiene objetos atrasados dejamos en 0, es decir que no se le va a permitir

realizar nuevos prestamos

• Máximo número de préstamos si el usuario tiene suspensiones, se deja en 0 lo que implica que si tiene suspensiones, el usuario no tendrá más prestamos

• Máximo número de préstamos para objetos de la misma categoría, establecemos en 2, es decir que puede tener dos CDROM de manera paralela

• Máximo número de préstamos para el mismo registro en el caso de tener volumen y tomo, indicamos como 1

• Máximo número de préstamos que este usuario puede tener en total marcamos con 7 • Máximo número de renovaciones, para este usuario, marcamos como 3, es decir que

puede renovar por tres veces. Pero a través del Mysite, solo puede realizar 2 renovaciones • Máximo número de reservas si el usuario tiene multas, vamos a decir que como no se

administra multas el valor será 0 • Máximo número de reservas si el usuario tiene objetos atrasados no se le permite realizar

reservas si tiene atrasos en devoluciones de algunos items • Máximo número de reservas si el usuario tiene suspensiones, en 0 que quiere decir que no

puede realizar reservar en caso de que tenga suspensión • Máximo número de reservas para objetos de esta misma categoría, en el mismo valor que

los préstamos. y se coloca el mismo valor del mismo tipo 2 reservas posibles para objetos de esta categoría

• Máximo número de reservas para el mismo registro es el mismo caso de 1 para préstamos seria el mismo caso que se aplica con volumen y tomo

• Máximo número de reservas que puede tener el usuario en total, es que puede tener en total 5,

• Días de suspensión cuando la reserva expira, no le aplicamos días de suspensión , en ningún caso, es decir 0 sin importar si tuviera o no reservas

• Cuando devuelve un objeto que está atrasado y no tenia reserva le aplicamos 4 días de suspensión

• Cuando devuelve un objeto que tenia reserva le aplicamos 5 días de suspensión •

Una vez llenados todos los parámetros se hace clic en el botón Enviar y con ello generamos un nuevo perfil con un nuevo comportamiento. Recordemos siempre que podemos ver la matriz de los perfiles como una lista en la que veremos como es que en cada una de las columnas y para que tipo de usuario y objeto es que aplica este perfil que se acaba de crear.

Imagen_009. Parámetros del perfil Coordinadores

Este nuevo perfil se aplica para el tipo de objeto CDR (CDROM) para los usuarios coordinadores. Podemos ver en la imagen_009b, que se ha creado el perfil para la Clase de Usuario Coordinadores, la categoría de objeto CDR.

Aplicación de Perfil. Una vez que hemos finalizado la edición del perfil hacemos clic en Enviar/Submit y se comienza a aplicar a las transacciones que se realicen. Debemos recordar que deben existir objetos de préstamos disponibles para el préstamo y también categoría de usuario de acuerdo a las definidas en los perfiles.

Reservas bajo EmpWeb. Las reservas se pueden hacer desde 2 puntos de acceso, Mysite ó desde la cuenta de operador de biblioteca como una transacción más. Consultando la disponibilidad de ítems para un determinado objeto de préstamo, puedo generar una reserva ingresando a Mysite; el sistema permitirá hacer la reserva cuando el titulo solicitado no tenga ejemplares disponibles y además el usuario cumpla con las condiciones definidas en el perfil de usuario (no tener sanciones, etc.). Al momento de hacer una reserva si existen ítems disponibles, el sistema no permite hacer la reserva e indica que habiendo disponibilidad debe pasar a retirarlo por la biblioteca. Si vamos al Mysite podremos ver que en estado se indica que esta reserva fue realizada el día de hoy y este es el título que se reservo. Desde EmpWeb haremos una devolución de un ítem con reserva, esta información se refleja inmediatamente en la pantalla principal de EmpWeb la cola de reservas disponibles para prestar.

Si intentamos realizar un préstamo de este item que posee reserva, a otro usuario EmpWeb nos informa que no alcanzan la cantidad de préstamos en curso y la cantidad de reservas confirmadas para a realizar esta transacción. Vale decir no prestará un item que posee reserva. Automáticamente en el Mysite del usuario se refleja la disponibilidad del item que había reservado y además informa cuantos días permanecerá en reserva para pasar a retirarlo. La cantidad de días que esta en reserva disponible para ser retirado por el interesado se fija a través de las políticas de EmpWeb. Al momento de realizar el préstamo o cancelar una reserva, se actualiza la información en la pantalla principal de EmpWeb cambiando el estado de las transacciones.

Anexo I . Pipelines y Groovy.

1. Concepto de Pipelines. Todas las operaciones que se realizan usando EmpWeb se corresponden con una pipeline. Definimos un pipeline como un conjunto de procesos ordenados, consecutivos ó simultáneos, en los que la salida de uno es la entrada de otro proceso. Groovy es un lenguaje de programación no declarativo, con una sintaxis muy similar a Java y con muchas facilidades de programación. Puede consultarse la especificación del lenguaje Groovy en: http://groovy.codehaus.org/ Los pipelines con que EmpWeb cuenta para este paquete de distribución (distro EmpWeb) se dividen en los siguientes grupos:

• Pipelines globales. (Configuration Pipelines List)

Estos pipelines definen valores que son usados luego en la interfaz gráfica tanto como en otros pipelines. Aquí se hallan valores globales como por ejemplo

- los horarios de apertura y cierre de cada biblioteca, - el tipo de material registrado para préstamo por hora, - el horario máximo admitido para circulación por hora, - etc.

• Pipelines de transacciones (Transaction Pipelines List)

Estos pipelines definen las transacciones que el servicio principal de EmpWeb atiende y estos, los pipelines, serán invocados por los correspondientes procesos de la interfaz gráfica.

• Pipelines de Informes. (Statistics Pipelines List)

Estos pipelines son usados al momento de presentar un reporte. Este reporte contabilizara la información solicitada pudiendo emitir la información solicitada en los formatos que los procesos del pipeline defina. 2. Detalle de un pipeline. Un pipeline es un conjunto de procesos, los cuales se ejecutan en forma secuencial o simultánea y ordenada compartiendo datos. Veamos uno de ellos:

Si bien bajo el concepto de pipeline, la entrada de un proceso es salida de otro proceso, pueden ocurrir excepciones: tal es el caso de la primer entrada que bien podría ser la entrada de datos por parte del usuario. En el caso de EmpWeb, se usa un espacio de objetos compartidos a partir del cual los procesos almacenan y consultan allí sus valores hasta conformar la transacción como tal. Existen dos tipos de procesos en EmpWeb, reglas y procesos propiamente dichos.

• Las reglas usan el “espacio común de intercambio de información” para comprobar determinados valores y en función de aquellos; y la regla de negocio, puede devolver como resultado “true” o “false”, indicando con esta devolución si es que el pipeline debe continuar o debe ser interrumpido.

• Los procesos propiamente dichos interactúan con el espacio común de memoria para almacenar en ellos valores con dos objetivos posibles. O bien conformar la transacción completa o bien facilitar valores a subsecuentes reglas para comprobar determinadas reglas de negocio.

Pr1 Pr2 Pr3 Rule 1 Pr4

Finalización transacción. Informe al usuario

Espacio común de memoria

Lectura / Escritura

3. Objetos accesibles cuando se realiza una transacción. Espacio común de memoria.

Resulta importante destacar que en el espacio común de memoria es posible recuperar y almacenar información que se corresponde con un par (identificación, valor). Así las identificaciones se hallan previamente definidas y sobre estos pares (identificación, valor) es que las reglas y los procesos pueden interactuar.

Uno de los espacios comunes de memoria mas usados por EmpWeb es el denominado TransactionContext o Contexto de la Transacción. En la definición de EmpWeb el mismo, al momento de realizar una transacción puede almacenar o recuperar valores. El concepto de TransactionContext se corresponde con un hash, el cual posee una clave y para esa clave devuelve un valor. Ese valor puede ser lineal tal como un String o un Empweb Object.

La siguiente es una tabla que resume las claves y los significados para el almacenamiento en el TransactionContext.

Clave Tipo de valor

LOCAL_ENV Entorno de parámetros locales al proceso. Lista de valores.

GLOBAL_ENV Entorno de parámetros globales al proceso. Lista de valores.

USER_DOM DOM del usuario. Objeto.

OBJECT_DOM DOM del objeto. Objeto.

USER_ID ID del usuario corriente. String.

USER_DB Base de datos del usuario corriente. String.

COPY_ID Identificación de la copia del objeto corriente. String.

VOLUME_ID Volúmen de copia corriente. String.

RECORD_ID Identificación del registro corriente. String.

OBJECT_DB Base de datos de objetos corriente. String.

OPERATOR_ID Identificación del operador que realiza la transacción. String.

DESK_OR_WS Solo para reservas. Si proviene la transacción desde empWeb o desde el mySite

OBJECT_LOCATION Identificación de la biblioteca de la copia corriente

OBS Observaciones ingresadas por el usuario en el formulario. Solo aplicable a transacciones tales como Suspensiones o multas.

FINE_AMOUNT Monto de multa corriente. Valor real.

PAID_AMOUNT Monto ingresado por el operador para el pago de la multa. Valor real.

DAYS_SUSPENDED

USER_CLASS Tipo del usuario sobre el cual se va a realizar la transacción.

OBJECT_CATEGORY Tipo de objeto sobre el cual se va a realizar la transacción.String.

USER_STATUS

USER_CLASS Tipo de usuario para la transacción corriente. String.

OBJECT_STATUS

PROFILE Contiene el objeto de la clase Profile de la transacción corriente. Define la categoría del usuario y el tipo de objeto para la transacción corriente.

4. Análisis detallado de algunas clases básicas de EmpWeb al momento de realizar

una transacción.

En muchos de los pipelines, nos hallaremos con los siguientes procesos invocados como procesos iniciales. Cabe destacar que estas clases se hallan compiladas en Java y no es posible modificarlas sin recompilar la aplicación. Los comentarios en inglés son la descripción del javadoc.

GetUser Clase: net.kalio.empWeb.engine.rules.GetUser

It gets the userCollection XML from the user database and does some validity checks. The Process expects to find the userId and userDb in the TransactionContext under TransactionContext.USER_ID ("userId") and TransactionContext.USER_DB ("userDb") keys, respectively. The userCollection DOM object will be stored in the TransactionContext with setUserDOM. If the userCollection does not contain at least one user, the Process fails. If it contains more than one, usually only the first one will be used by the following Processes. The Process accepts a boolean parameter checkValidity (default: true). If the parameter is "true" or missing then the user expirationDate and state (active/inactive) will be checked and the Process may fail with an appropriate ProcessResult message. (For the meaning of expirationDate and state, read the http://kalio.net/empWeb/schema/users/v1 schema)

Esquema de operaciones que realiza esta clase:

TransactionContext.USER_ID=01 TransactionContext.USER_DB=* TransactionContext.COPY_ID=10012 TransactionContext.OBJECT_DB=objetos TransactionContext.OPERATOR_ID=1

Parámetros Del proceso

TransactionContext.USER_ID=01 TransactionContext.USER_DB=isis TransactionContext.COPY_ID=10012 TransactionContext.OBJECT_DB=objetos TransactionContext.OPERATOR_ID=1 TransactionContext.USER_DOM=”…<user><name>Guilárte, Rosa…” TransactionContext.USER_CLASS=Directores

Invocación a GetUser

Webservice DB

Siguiente proceso en el pipeline

GetObject

Description: It gets a MODS modsCollection from the database representing the object MODS . The database is specified in the TransactionContext's objectDb. The object may be specified by copyId or recordId, depending on the mode in which this class is used. The mode is specified with a "mode" parameter in the params of the transaction pipeline XML. The value of "mode" can be "copyId" or "recordId". For "copyId" (the default behavior), it performs a searchObjectsById on the objectDB web service. For "recordId" it will perform a searchObjects with a recordId element. The MODS modsCollection DOM will be stored in the TransactionContext with setObjectDOM. For convenience, in the case of "copyId" mode, the mods:recordInfo/mods:recordIdentifier will be stored in the TransactionContext under the "recordId" key. The modsCollection will usually contain just one mods element. It MAY contain more than one but most transactions will use only the first mods. If modsCollection is empty, this Process will fail. If the mode is "copyId", you can use the boolean extractExtraCopyInfo parameter (default: false) which will extract the copyLocation and volumeId (if exists) and store them under TransactionContext.OBJECT_LOCATION and TransactionContext.VOLUME_ID respectively (if they do not exist already in the TransactionContext).

Webservice DB

TransactionContext.USER_ID=01 TransactionContext.USER_DB=isis TransactionContext.COPY_ID=10012 TransactionContext.OBJECT_DB=objetos TransactionContext.OPERATOR_ID=1 TransactionContext.USER_DOM=”…<user><name>Guilárte, Rosa…” TransactionContext.USER_CLASS=Directores ….

Invocación a GetObject

Parámetros Del proceso

Siguiente proceso en el pipeline

… TransactionContext.USER_DOM=”…<user><name>Guilárte, Rosa…” TransactionContext.USER_CLASS=Directores TransactionContext.OBJECT_DOM=”…<modsCollection><mods>…<recordId>01</recordId><title>The Java user interface…” TransactionContext.RECORD_ID=01

ExtractObjectCategory

Description: Extracts the objectCategory from the object's EmpWeb holdingsInfo and stores the value in the TransactionContext under the well-known key "objectCategory". This Process accepts three parameters:

• mode: It can have the value "copyId" or the value "recordId" (defaults to "copyId") • useDefault: it's a boolean and defaults to false • dontConsider: it's a list of object categories separated by comma or semicolon. These object

categories should be ignored when extracting an object's objectCategory

The algorithm works as follows: First, check whether the "mode" matches what is found in the TransactionContext. If the needed copyId or recordId isn't found, fail with an error message. Then: if (mode is recordId) then if (exists mods:mods for this recordId) then objectCategory:= "first objectCategory found in mods:mods that is not in the dontCondiser list" else Error: no_object_for_recordid end if else // mode copyId by default objectCategory:= "the objectCategory of the given copyId" end if // if objectCategory still null and useDefault is false if (objectCategory == null and not useDefault) then Error: record_with_no_object_category or copy_with_no_object_category according to mode end if store the objectCategory in the TransactionContext

Invocación a ExtractObjectCategory

… TransactionContext.USER_DOM=”…<user><name>Guilárte, Rosa…” TransactionContext.USER_CLASS=Directores TransactionContext.OBJECT_DOM=”…<modsCollection><mods>…<recordId>01</recordId><title>The Java user interface…” TransactionContext.RECORD_ID=01

… TransactionContext.USER_DOM=”…<user><name>Guilárte, Rosa…” TransactionContext.USER_CLASS=Directores TransactionContext.OBJECT_DOM=”…<modsCollection><mods>…<recordId>01</recordId><title>The Java user interface…” TransactionContext.RECORD_ID=01 TransactionContext.OBJECT_CATEGORY=L

Parámetros Del proceso

Como puede verse entonces, los procesos realizan operaciones que almacenan valores sobre el TransactionContext, bajo un key en particular y las reglas pueden comprobar algunos de estos valores para implementar las reglas de negocio. GetProfile Description: This Process obtains a Profile from the active Policy and stores it in the TransactionContext under the well-known name TransactionContext.PROFILE ("profile"). To select a Profile, it uses the "userClass" and "objectCategory" stored in the TransactionContext. A "priority" parameter with valid values of "userClass" or "objectCategory" may be passed to the Process. The behaviour is as follows:

• It attempts to get a Profile that matches (userClass, objectCategory) • If such a Profile does not exist in the currently active Policy then:

o If the "priority" parameter is set to "userClass", attempt to get a Profile in this order: 1. (TC.userClass, *) 2. (*, TC.objectCategory) 3. (*, *)

o If the "priority" parameter is set to "objectCategory", attempt to get a Profile in this order:

1. (*, TC.objectCategory) 2. (TC.userClass, *) 3. (*, *)

o If the "priority" parameter does not exist, return an error • If a Profile still couldn't be found, return an error TC.userClass represents the userClass in the TransactionContext (and similarly for TC.objectCategory)

Invocación a GetProfile

Parámetros Del proceso

Profile

… TransactionContext.USER_DOM=”…<user><name>Guilárte, Rosa…” TransactionContext.USER_CLASS=Directores TransactionContext.OBJECT_DOM=”…<modsCollection><mods>…<recordId>01</recordI

… TransactionContext.USER_DOM=”…<user><name>Guilárte, Rosa…” TransactionContext.USER_CLASS=Directores TransactionContext.OBJECT_DOM=”…<modsCollection><mods>…<recordId>01</recordId><title>The Java user interface…” TransactionContext.RECORD_ID=01 TransactionContext.OBJECT_CATEGORY=L

En el caso de GetProfile vemos mas claramente que en el TransactionContext se almacenan objetos, a los cuales luego se puede acceder por intermedio de sus propiedades o métodos.

5. Objetos definidos en EmpWeb. El siguiente es un diagrama básico con los objetos que son accesibles desde los scripts Groovy, al igual que sus métodos de acceso públicos.

6. Objetos especiales usados en EmpWeb

getLoans()

getWaits()

getLoans()

countLoans()

countWaits()

UserStatus

countWaits()

countLoans()

getLoans()

getWaits()

getLoans()

ObjectStatus

Métodos paralelos. En las reglas se usarán con repetida frecuencia, tanto como para conocer o recorrer la lista de préstamos y/o reservas que el usuario o el objeto tiene pendiente.

7. Estructura del proceso o una regla de un pipeline.

Como puede observarse los procesos o reglas poseen un primer entry-box dedicado a la documentación, un segundo en el cual se especifican los límites y un tercero en el cual se especifican los parámetros del proceso. Desglosaremos los relevantes.

8. Límites publicados por un proceso o regla. Cuando un proceso o una regla son dependiente de un perfil en particular, para ejemplificar, supongamos que precisamos un proceso el cual si la cantidad de préstamos actuales supera en cantidad los X le envíe un aviso al operador acerca de esta situación.

X es un límite que puede tener un valor instanciable x1 para el perfil (Estudiantes, Libros) y un valor x2 para el perfil (Directores, Libros). En este caso, se indica que X es un límite el cual será usado en el interior del proceso o la regla con el valor adecuado del perfil. La sintaxis para la carga de limits es como la que sigue: <limits> <limit name="nombre">valor por defecto</limit> </limits> Supongamos entonces que se crea un nuevo límite para una regla o un proceso en particular. Esto implicará que ese valor deberá ser completado en todos los perfiles que actualmente empWeb registra para su política activa. En caso que el perfil a usarse no posea un valor completado para el perfil adecuado, se usará el valor por defecto. Es importante destacar que previo al uso de cualquier process o rule que use limits, debe hallarse invocada la clase básica GetProfile, dado que en caso contrario se usará siempre el valor por defecto del limit.

9. Parámetros para una regla o un proceso. Los parámetros de una regla o de un proceso en particular pueden especificar comportamientos distintos a través de la aplicación del mismo proceso o regla en los diferentes pipelines. La sintaxis de los parámetros es: <params>

<param name="atributo">valor</param> </params> Un caso de ejemplo podría resultar la clase básica UpdateDb, la cual es usada en diferentes pipelines, la cual se halla instanciada con diferentes parámetros en cada uso de ella. Ejemplo: <params>

<param name="transactionKeys">paymentFine,pendingFine</param> <param name="ignoreTransactionNotFound">true</param> <param name="storeUserStatus">true</param> <param name="storeObjectStatus">false</param>

</params>

10. Tipos de Reglas o procesos scripted. Groovy. Los procesos o reglas scripted son procesos o reglas especiales que no precisan la compilación completa de los archivos de la aplicación y que permiten interactuar con los empWeb Objects como para implementar reglas de negocio particulares. La estructura de un proceso o regla scripted que se puede usar consiste en:

Se cuenta con los mismos campos que una regla o proceso básico de empWeb solo que en los parámetros se vuelca el script groovy. La estructura del mismo es similar a la de cualquier otro parámetro de una regla o proceso. <params> <param name="script">

<![CDATA[ …. Desarrollo del script. ]]>

</param> </params> Un script de Groovy cuenta con un conjunto de variables que podemos denominar “variables mágicas” con las que puede interactuar en forma libre:

11. Primer ejemplo de un script de Groovy.

El primer paso para el agregado de un script Groovy consiste en crear la regla o el proceso en el pipeline adecuado. Continuando el ejemplo anterior, vamos a crear en el pipeline de Loans un nuevo proceso scripted, el cual enviará un mensaje al operador. Haciendo click sobre la opción de Create Process aparecerá la siguiente pantalla:

Elegimos el nombre para el proceso o regla e indicamos que la clase que deberá interpretar nuestro script será net.kalio.empWeb.engine.rules.GroovyInterpreter Una vez completada la pantalla anterior aparecerá en el pipeline el proceso que acabamos de crear, inactivo y al final de toda la lista. Resulta importante, dado que el pipeline es una secuencia ordenada, ordenar el mismo entre la secuencia de procesos del mismo pipeline. Esto implicará, dado que pretendemos crear una regla de validación, que dicha regla se ejecute en forma previa al registro de la transacción. Por esto, usando las opciones de Up que permiten reposicionar el proceso, es que se puede ubicar el proceso en el lugar que resulta apropiado para su ejecución:

Oprimiendo en forma sucesiva sobre el link Up dejamos la nueva regla que deseamos crear antes de la ejecución de la creación de la entidad Loan. Quedando en la posición que se puede observar en la siguiente pantalla.

Con esto oprimimos el link Editar y ya estamos en condiciones de crear nuestro primer script de Groovy que valide un caso de negocio en particular. Todo script de Groovy tendrá la sintaxis referida anteriormente en los parámetros del mismo:

Advertencia: Resulta muy importante, si es que queremos incluir nuestra regla en el proceso de ejecución básico, recordar habilitar el mismo luego de haberlo editado, es decir:

Debe quedar marcado así para que la regla o proceso se ejecute. Con esto podemos comenzar nuestro primer script. El caso de negocio que plantearemos será: “…Los usuarios de tipo Coordinadores no podrán tener concurrentemente más de 2 libros en préstamo por sala u horario al mismo tiempo…” Si lo expresamos en un pseudo-código interactuando con los objetos de Groovy, tendríamos:

Obtener el tipo de usuario; If el tipo de usuario es Coordinadores entonces For (préstamos que este usuario posee) If el préstamo es de un objeto por hora entonces Contar Fin For If numero contado > 1 entonces Emitir mensaje Devolver que la regla falló Fin If Fin If Devolver que la regla se cumple. Groovy es un lenguaje de programación no declarativo, con una sintaxis muy similar a Java y con muchas facilidades de programación. Puede consultarse la especificación del lenguaje Groovy en: http://groovy.codehaus.org/ En este paso será importante documentar que en todo script Groovy se cuenta con un conjunto de “variables mágicas” que podremos usar:

• Variable tc (TransactionContext) • Variable params (los parametros de la presente regla o proceso) • Variable msg (mensajes que puede emitir el presente script)

Por tanto y revisando los objetos de los que disponemos en el universo de los EmpWeb Objects, podríamos analizar como es que obtenemos el tipo de usuario actual. Si vemos en la lista de procesos actualmente existentes en el pipeline, veríamos que hay un proceso ya en ejecución actualmente que se llama ExtractUserClass. El mismo completa el valor TransactionContext. USER_CLASS

Por tanto podríamos comenzar el script de Groovy, analizando este valor: tipousuario = tc.get(TransactionContext.USER_CLASS);

If (tipousuario==’Students’) { } return true; Con esto implementaríamos la primer parte, relacionada con el área de control del tipo de usuario. Ahora analizaremos como contabilizar los préstamos corrientes que el usuario posee. Para ello, usaremos el tipo de objeto especial indicado anteriormente, en este caso el UserStatus. Usando el mismo, podremos obtener una lista con los objetos que corresponden a los préstamos del usuario corriente. Pero, cómo obtenemos el UserStatus en el script actual? De igual forma que en la ocasión anterior, revisando el pipeline actual, veremos que hay otro proceso facilitador, que ya ha incluído en el TransactionContext, el objeto userStatus correspondiente.

Por tanto, podremos acceder a una clave del TransactionContext, la cual nos devolverá el userStatus del usuario corriente. Usando este objeto userStatus, podremos recorrer los préstamos que el mismo posee. uStatus = tc.get(TransactionContext.USER_STATUS); Qué métodos admite userStatus? Uno de ellos es getLoans(), el cual nos devolverá los préstamos que el usuario corriente posee:

loans = uStatus.getLoans(); Intentaremos recorrer esta lista que devuelve el objeto userStatus y contabilizar aquellos préstamos que nos interesan. Para ello usamos un iterador de Groovy. for (loan in loansList) { // Aquí analizaremos cada préstamo en particular.}

Si analizamos el tipo de objecto Loan, comprobamos que no hay un método que nos devuelva el tipo de objeto prestado. Esto es así debido a que el objeto Loan posee una referencia al perfil (tipo de objeto, tipo de usuario) al cual resultó prestado.

LoanImpl

+populate(e: Element)+getNamespace(): String+getNamespacePrefix(): String+getId(): String+setId(id: String)+getUserId(): String+setUserId(id: String)+getUserDb(): String+setUserDb(id: String)+getRecordId(): String+setRecordId(id: String)+getCopyId(): String+setCopyId(id: String)+getObjectDb(): String+setObjectDb(id: String)+getProfile(): Profile+setProfile(p: Profile)+getStartDate(): String+setStartDate(date: String)+getEndDate(): String+setEndDate(date: String)+getRenewId(): String+setRenewId(id: String)+getOrdinalRenewal(): String+setOrdinalRenewal(number: String)+getOrdinalRenewalFromDesk(): String+setOrdinalRenewalFromDesk(number: String)+getOrdinalRenewalFromWS(): String+setOrdinalRenewalFromWS(number: String)+getReservationId(): String+setReservationId(id: String)+getOperatorId(): String+setOperatorId(id: String)+getLocation(): String+setLocation(id: String)+main(args: String)+setTypeOfTransaction(myType: String)+getTypeOfTransaction(): String

Lo que podemos hacer es obtener el profile, del cual si podremos obtener el string que representa al tipo de objeto a prestar:

ProfileImpl

~debug: boolean = false~NS: String = "http://kalio.net/empweb/schema/profile/v1"~NS_PREFIX: String = "prof"~TABLE_NAME: String = "profiles"~DEFAULT_HISTORIC: String = "false"~PROFILE_ID_COL: String = "profile_id"~USER_CLASS_COL: String = "user_class"~OBJECT_CATEGORY_COL: String = "object_category"~POLICY_ID_COL: String = "policy_id"~HISTORIC_COL: String = Empweb15DB.HISTORIC_COL~XML_COL: String = "xml"~dom: Element~jxdom: JXPathContext

<<create>>~ProfileImpl()<<create>>~ProfileImpl(e: Element)<<create>>~ProfileImpl(rs: ResultSet)+populate(e: Element)+getNamespace(): String+getNamespacePrefix(): String+toXMLString(): String+toDOMElement(): Element~getClone(): ProfileImpl+getId(): String+setId(id: String)+getUserClass(): String+setUserClass(uclass: String)+getObjectCategory(): String+setObjectCategory(ocategory: String)+getPolicyId(): String+setPolicyId(id: String)+getTimestamp(): String+setTimestamp(ts: String)+getLimitNames(): String+getLimitMap(): Map+getLimit(limitName: String): String+getLimit(limitName: String, defaultValue: String): String+setLimit(limitName: String, limitValue: String)~cleanupLimits()~isHistoric(): boolean~setHistoric(h: boolean)~getMockupDOM(): Element~getMockup(): Profile+main(args: String)

De alli que este parte del código en Groovy quedaría de la siguiente forma:

Profile prof = loan.getProfile(); If (prof.getObjectCategory=’LBH’) {

//contar }

Con lo que la versión final de nuestro código quedaría como sigue:

<![CDATA[ tipousuario = tc.get(TransactionContext.USER_CLASS); if (tipousuario=='Coordinadores') { uStat = tc.get(TransactionContext.USER_STATUS);

loans = uStat.getLoans(); contador = 0; for (loan in loans) { Profile prof = loan.getProfile(); objCateg = prof.getObjectCategory(); if (objCateg=='LBH') { contador++; } } if (contador>1) { msg.addText("en_CL_UCV","It's impossible to loan to Coordinators more than 2 concurrent by hour books"); msg.addText("es_CL_UCV","No es posible prestar mas de dos libros concurrentes por hora a Coordinadores"); return false; } } return true; ]]>

Si nos detenemos en el área de msg, la misma presenta un resultado de la transacción, siendo su sintaxis como sigue:

msg.add (“identificación del idioma”, “mensaje”); Resulta interesante en la evaluación del script ingresado dado que interrumpe la ejecución; esto se debe a que a tiene un préstamo a la hora de ejecución no cumpliendo la regla originalmente especificada. Podemos evaluar entonces que la lógica del pseudocódigo es la que fallaba; y proponemos la versión correcta de la forma en que sigue:

Obtener el tipo de usuario; Obtener el tipo de objeto que el usuario desea obtener; If el tipo de usuario es Coordinadores Y el tipo de objeto es para sala entonces For (préstamos que este usuario posee) If el préstamo es de un objeto por hora entonces Contar Fin For If numero contado > 1 entonces Emitir mensaje Devolver que la regla falló Fin If Fin If Devolver que la regla se cumple.

En la implementación del mismo vemos que resulta muy sencillo agregar esta operación: <![CDATA[ tipousuario = tc.get(TransactionContext.USER_CLASS); tipoobjetoactual = tc.get(TransactionContext.OBJECT_CATEGORY); if (tipousuario=='Coordinadores' && tipoobjetoactual=='LBH' ) { uStat = tc.get(TransactionContext.USER_STATUS); loans = uStat.getLoans(); contador = 0; for (loan in loans) { Profile prof = loan.getProfile(); objCateg = prof.getObjectCategory(); if (objCateg=='LBH') { contador++; } } if (contador>1) { msg.addText("en_CL_UCV","It's impossible to loan to Students more than 2 concurrent by hour books"); msg.addText("es_CL_UCV","No es posible prestar mas de dos libros concurrentes por hora a estudiantes"); return false; } } return true;

Cuando lo ejecutamos podremos observar, por ejemplo con el usuario 01 es Coordinadores y tiene en préstamo el item 10012 las siguientes pantallas

Ahora podemos ver el resultado de la misma transacción en inglés:

Con lo que podemos ver claramente el sentido de asociar a cada mensaje la identificación de su idioma correspondiente. Atención: En caso de enviar mensajes hacia el mysite los mismos deben replicarse con la identificación en y es (o pt, fr, etc) pero sin la identificación xx_CL_UCV.