0% encontró este documento útil (0 votos)
3 vistas7 páginas

Informacion API

El documento describe la implementación de tareas programadas utilizando la librería QUARTZ, donde se configuran trabajos y triggers para ejecutar tareas automáticamente. También se detalla el esquema de grupos de acceso que determina la visibilidad de registros en la base de datos según la asignación de grupos a los usuarios. Se explican los procedimientos y funciones necesarias para gestionar los accesos y cómo se relacionan los tipos de entidades en el sistema.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
3 vistas7 páginas

Informacion API

El documento describe la implementación de tareas programadas utilizando la librería QUARTZ, donde se configuran trabajos y triggers para ejecutar tareas automáticamente. También se detalla el esquema de grupos de acceso que determina la visibilidad de registros en la base de datos según la asignación de grupos a los usuarios. Se explican los procedimientos y funciones necesarias para gestionar los accesos y cómo se relacionan los tipos de entidades en el sistema.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Tareas Programadas:

Se ejecutan de manera automática, cada un tiempo determinado.

La librería utilizada para manejar tareas en segundo plano es “QUARTZ”. La URL para leer su
documentación es: [Link]

Dentro del archivo “[Link]”, el método “Application_Start” se ejecuta cuando


comienza a correr la aplicación. Ahí, se llama al método “Start” de la clase “Planificador”, el
cual va a definir la configuración de las tareas programadas.

Dentro del método “Start” de la clase “Planificador”, se crea el manejador para llevar a cabo
las tareas programadas deseadas. Luego, para cada tarea a realizar, se debe crear un “trabajo”
y el trigger correspondiente para que se ejecute. Finalmente, se debe asignar al manejador, el
trabajo y trigger correspondiente.

Creación y arranque del manejador:

El trabajo se crea de la siguiente manera:

Trigger asociado al trabajo anterior:


Asignación de trabajo y trigger al manejador:

El trigger indica cada cuanto tiempo se debe llevar a cabo la tarea correspondiente. Para
controlar dicho funcionamiento, se utilizan expresiones cron. Para leer documentación de las
mismas, se puede usar misma página de QUARTZ mencionada al comienzo, que contiene
documentación y ejemplos de expresiones cron. Además, también adjunto otra página, donde
se puede realizar pruebas para entender un poco mejor su funcionamiento. Para más
información, pueden buscar ejempos u otro tipo de documentación sobre el tema. URL de
prueba: [Link]

Como se indicó, cuando se define el trabajo “IJobDetail”, se crea un trabajo que indica la clase
que va a ser la encargada de realizar la funcionalidad de la tarea programada. En nuestro caso,
la tarea programada se encarga de procesar las cargas de descuentos o novedades, dentro de
un periodo determinado, que aún no han sido procesadas. Este proceso, se va a llevar a cabo
dentro del método “Execute(IJobExecutionContext context)”, de la clase “ProcesarCargas”, que
hereda de la interfaz “IJob”.

Básicamente, de esa manera es como se llevan a cabo las tareas programadas. Pueden revisar
el código de la API para ver como se desarrolló el método “Execute” mencionado.
Grupos de Accesos:

Determina que información (registros) puede ver un usuario, en una determinada tabla de la
base de datos. Se definen en base a un tipo de entidad.

Esquema de Grupos de Accesos:

Tablas del esquema:

• GRUPOACCESO: Contiene información de todos los grupos de accesos existentes. Para


cada grupo de acceso, se define un nombre y el tipo de entidad.
• GRPACCLST: Contiene todas las listas que forman parte de un grupo de acceso. Las
listas pueden ser de dos tipos, de acceso o restricciones. Cada lista indica el número de
grupo al que pertenece (GRPNRO), si es una lista de acceso o restricción (GRPLSTACC),
el tipo de lista que se va a definir (GRPLSTTIP) y, en caso de ser necesario, el tipo de
entidad asociado a la lista (ENTTIPNRO).
o GRPNRO: Id del grupo al que pertenece la lista.
o GRPLSTACC: Puede tomar 2 (dos) valores posibles, 1 o 2.
▪ 1: Es una lista de accesos.
▪ 2: Es una lista de restricciones.
o GRPLSTTIP: Puede tomar 3 (tres) valores posibles, 1, 2 o 3.
▪ 1: Todos: Representa a todos los registros del tipo de entidad del
grupo de acceso. Si se define en una lista de acceso (1) indica que se
puede ver todo, excepto lo definido en la lista de restricciones. Si se
define en la lista de restricciones (2) indica que no se va a poder ver
nada, aún si existen registros en las listas de acceso.
▪ 2: Del Tipo: Representa registros del mismo tipo de entidad que el
grupo de acceso. Por ejemplo, si el tipo de entidad del grupo de acceso
es “ORGANIGRAMA”, y se define una lista (de acceso o restricción) con
campo “GRPLSTTIP” = 2, se van a poder indicar solamente nombres de
organigramas para la lista.
▪ 3: Relacionados al Tipo: Representa registros que correspondan a la
relación entre el tipo de entidad del grupo de acceso y la relación con
otros tipos de entidad (más adelante se explica como relacionar tipos
de entidades). Cuando se define una lista con el campo “GRPLSTTIP” =
3, se debe indicar, si o si, un tipo de entidad para el campo
“ENTTIPNRO”. Un ejemplo de listas con este tipo, es cuando por
ejemplo existe una relación entre los tipos de entidades
“ORGANIGRAMA” y “SERVICIO”, y se desea que se puedan ver todos
los organigramas que pertenecen a un determinado servicio. En vez de
definir cada organigrama, se define una lista de este tipo, y se asigna el
nombre del servicio correspondiente. De esta manera, sólo se van a
ver los organigramas del servicio asignado.
o ENTTIPNRO: Contiene el Id del tipo de entidad correspondiente.
▪ Si el campo “GRPLSTTIP” = 1, “ENTTIPNRO” es null.
▪ Si el campo “GRPLSTTIP” = 2, “ENTTIPNRO” es igual al tipo de entidad
del grupo de acceso.
▪ Si el campo “GRPLSTTIP” = 3, “ENTTIPNRO” es igual a alguno de los
tipos de entidad con los que se relaciona el tipo de entidad del grupo
de acceso.
• GRPACCENT: Contiene el Id de cada registro con tipo de entidad igual al definido en las
listas del grupo de acceso.
o Si el campo “GRPLSTTIP” = 1, en la tabla “GRPACCLST”, ésta tabla no se utiliza.
o Si el campo “GRPLSTTIP” = 2 o 3, en la tabla “GRPACCLST”, cada registro en la
tabla va a corresponder al tipo de entidad definido en la tabla “GRPACCLST”.
• GRUPOACCESOUSUARIO: Contiene la relación entre los usuarios del sistema con los
grupos de acceso creados.

Consideraciones para el uso de grupos de acceso:

• Si el usuario tiene acceso libre sobre la aplicación, los grupos de acceso no impactan
sobre el usuario, esto quiere decir que puede ver toda la información.
• Si el usuario no tiene acceso libre sobre la aplicación, y no tiene asignado ningún grupo
de acceso, el usuario no va a poder ver la información correspondiente a los grupos de
acceso. Por ejemplo, si se define un grupo de acceso sobre el tipo de entidad
“ORGANIRAMA”, el usuario no va a poder ver ningún organigrama.
• Si el usuario no tiene acceso libre sobre la aplicación, y tiene asignado algún grupo de
acceso, va a poder ver determinada información de acuerdo a los grupos de acceso
que tenga asignados. Por ejemplo, si se definen 2 (dos) grupos de acceso, uno para el
tipo de entidad “ORGANIGRAMA” y otro para el tipo de entidad “EMPLEADO”, y al
usuario solo se le asigna el grupo de acceso de EMPLEADOS, va a poder ver los
empleados que le permita el grupo de acceso, pero no va a poder ver información
sobre ningún organigrama.
Pasos a tener en cuenta antes de crear un grupo de acceso:

• Agregar un registro, en caso de no existir, en la tabla “ENTIDADTIPO”, con el nombre


de entidad correspondiente.
• Agregar un registro en la tabla “CONFIGURACION” con los siguientes valores:
o CLAVE: “TipoEntidadNombre”, donde “Nombre” es el nombre del tipo de
entidad.
o VALOR: Es el valor del campo “ENTTIPNRO” de la tabla “ENTIDADTIPO”,
devuelto al crear el tipo de entidad.
o TABLA: “ENTIDADTIPO”
• En la tabla “CONFIGURACION”, para los registros con clave “TiposEntidadesOrigen” y
“TiposEntidadesRelacionadas” agregar en el campo “VALOR”, el valor del campo
“ENTTIPNRO” devuelto al crear el tipo de entidad (separado por coma de los valores
existentes).
• Si se desea que el tipo de entidad se relacione con otros tipos de entidades, se deben
agregar dichas relaciones manualmente desde la aplicación.

La relación se utiliza cuando quiero filtrar datos de un determinado tipo de entidad a


partir de otro tipo de entidad. Por ejemplo, se crea un grupo de acceso para filtrar
empleados. Como se observa en la imagen anterior, el tipo de entidad “EMPLEADO”
está relacionado con el tipo de entidad “SERVICIO”. Una posible forma de realizar el
filtro de empleados sería, “ver todos los empleados que pertenecen al servicio
‘CONSEJO PROVINCIAL DE EDUCACIÓN’”. De ésta forma, se evita ingresar los
empleados que pertenecen al servicio “CONSEJO PROVINCIAL DE EDUCACIÓN” de a
uno.

Es muy importante entender que, al momento de crear un grupo de acceso, el tipo de entidad
que se selecciona, indica sobre que tipo de entidad quiero filtrar datos. Nunca hay que perder
eso de vista y hay que tenerlo siempre muy presente. Por ejemplo, si un grupo de acceso
selecciona un tipo de entidad “ORGANIGRAMA”, el filtro se esta realizando sobre los
organigramas y no sobre otro tipo de entidad.
Procedimientos en grupos de acceso:

Un uso típico de grupos de acceso en la base de datos, se realiza de la siguiente manera: Se


utiliza como ejemplo el procedimiento “SP_ORGANIGRAMA_S”.

• En “DECLARE”, de declaran los parámetros necesarios a utilizar.


• Se obtiene el id del tipo de entidad sobre el que se está trabajando. En el ejemplo,
necesito saber el ID de el tipo de entidad “ORGANIGRAMA”. La clave, en la sentencia
“WHERE”, debe ser el tipo de entidad que necesito.
• Se llama a la función “F_GRUPOACCESO_ACCESOS”, que devuelve un numero entero
que puede ser ‘0’, ‘-1’, ‘-2’ o ‘-3’. Como se muestra en la imagen, según el valor
devuelto, es que va a poder ver el usuario.

Funciones utilizadas:

• F_GRUPOACCESO_ACCESOS (no se modifica)


• F_ENTIDADTIPO (no se modifica)
• F_GA_NOT
• F_GA_IN_NOT

Dentro de las funciones “F_GA_NOT” y “F_GA_IN_NOT”, se deben realizar modificaciones


a medida que se vayan agregando más tipos de entidades y relaciones. Observar el código
de dichas funciones. Notarán que se está obteniendo el valor para cada uno de los tipos de
entidades que se utilizan en grupos de accesos (‘ORGANIGRAMA’, ‘EMPLEADO’,
‘SERVICIO’). A medida que se agreguen nuevos tipos de entidades, se deben obtener los
valores correspondientes.

Se definen 2 (dos) tablas temporales para manejar los datos que pueden mostrarse o no:

• ENTIDAD_NOT_TEMPORAL: Contiene un solo campo “ENTNRO NUMBER(10)”. Se van a


insertar en la tabla, el ID de todos los registros que forman parte de la lista de
restricciones, del tipo de entidad del grupo de acceso.
• ENTIDAD_IN_NOT_TEMPORAL: Contiene un solo campo “ENTNRO NUMBER(10)”. Se
van a insertar en la tabla, el ID de todos los registros que forman parte de la lista de
accesos, del tipo de entidad del grupo de acceso.
Finalmente, para utilizar el grupo de acceso sobre un determinado procedimiento, se debe
utilizar de la siguiente manera:

Seguimos utilizando el procedimiento “SP_ORGANIGRAMA_S”, donde al comienzo de definió


como declarar el uso de grupos de acceso, y ahora muestra como llamarlo dentro de la
sentencia SELECT correspondiente.

Como se puede observar:

• Si p_acceso = -1, el usuario no va a poder ver nada.


• Si p_acceso = 0, el usuario puede ver toda la información.
• Si p_acceso = -2, el usuario puede ver todo, menos los registros indicados en la tabla
temporal “ENTIDAD_NOT_TEMPORAL”.
• Si p_acceso = -3, el usuario solo puede ver los registros indicados en la tabla temporal
“ENTIDAD_IN_NOT_TEMPORAL”.

También podría gustarte