432
UNIVERSIDAD DE GUAYAQUIL Facultad de Ciencias Matemáticas y Físicas Carrera de Ingeniería en Sistemas Computacionales “Motor de Workflow” TESIS DE GRADO Previo a la obtención del Título de: INGENIERO EN SISTEMAS COMPUTACIONALES Autores: Bone Conforme Samuel Santiago Dimitrakis Morocho Clara Elaine Montenegro Balarezo Carlos Luís GUAYAQUIL – ECUADOR Año: 2006

UNIVERSIDAD DE GUAYAQUILrepositorio.ug.edu.ec/bitstream/redug/12184/1/B-CISC-PTG.49 Bone... · Previo a la obtención del Título de: ... colaboración como Lotus Domino y viendo

Embed Size (px)

Citation preview

UNIVERSIDAD DE GUAYAQUIL

Facultad de Ciencias Matemáticas y Físicas

Carrera de Ingeniería en Sistemas

Computacionales

“Motor de Workflow”

TESIS DE GRADO

Previo a la obtención del Título de:

INGENIERO EN SISTEMAS COMPUTACIONALES

Autores:

Bone Conforme Samuel Santiago

Dimitrakis Morocho Clara Elaine

Montenegro Balarezo Carlos Luís

GUAYAQUIL – ECUADOR

Año: 2006

I

AGRADECIMIENTO

Mis más profundos agradecimientos al Ser más importante en mi vida, quien ha hecho de este sueño una realidad, a Jesús. A los seres mas especiales que me han acompañado en todo, mis padres Alfredo Bone Jama y Sara Conforme Chila. A mis hermanos amados porque siempre han estado a mi lado y me han sabido comprender en todo. A mi amada Narcisa S. A mis compañeros de proyecto que unimos nuestros esfuerzos para lograr juntos concluir este sueño. A nuestro instructor Ing. Pedro Moncada. A mis Profesores y Directivos de la carrera.

Samuel Santiago Bone Conforme Agradezco infinitamente a Dios por habernos dotado de todo lo necesario para cumplir nuestra meta. Agradezco a mi madre y hermano Rosaura Balarezo y Francisco Montenegro por su completo apoyo. Agradezco a mis amigos y compañeros de grupo por sus ganas y esfuerzo. Agradezco al Ing. Pedro Moncada por su paciencia y por compartir su conocimiento con nosotros. Agradezco a todos los que conforman la Carrera de Sistemas.

Carlos Luis Montenegro Balarezo Mi agradecimiento especial para el amigo que nunca falla, Jesús, a mi amiga, consejera y pilar de mi vida, mi mamá, a mi familia por su apoyo incondicional, a mis compañeros Carlos y Samuel por su amistad, compañerismo, ganas y esfuerzo y a nuestro instructor y profesores que colaboraron con el desarrollo de este proyecto. Clara Dimitrakis Morocho.

II

DEDICATORIA Dedico este trabajo y mi carrera a mi Señor Jesús, por todo lo que es y representa para mi y mi familia. Samuel Santiago Bone Conforme Dedico este trabajo a mi familia en especial a mi mamá por brindarme todo su apoyo de manera incondicional. A todos aquellos que de una u otra manera ayudaron en el transcurso de mi educación. Carlos Luis Montenegro Balarezo A Dios, a la memoria de mi papá Héctor Dimitrakis, estés donde estés, te amo y te extraño, a mi mamá Grecia Morocho siempre me apoyaste y me diste el valor para seguir adelante y a mi hermano Oscar recuerda no hay metas imposibles ni inalcanzables. Clara Dimitrakis Morocho.

III

TRIBUNAL DE GRADUACIÓN

Ing. Juan Sánchez Presidente del Tribunal

Ing. Pedro Moncada Primer Vocal

Ing Francisco Contreras Segundo Vocal

Ab. Juan Chávez A. Secretario

IV

DECLARACIÓN EXPRESA

“La autoría de la tesis de grado corresponde exclusivamente al suscrito(s),

perteneciendo a la Universidad de Guayaquil los derechos que generen la

aplicación de la misma”

(Reglamento de Graduación de la Carrera de Ingeniería en Sistemas

Computacionales, Art. 26).

V

RESUMEN Un proceso es un flujo ordenado de pasos a seguir para lograr un objetivo, partiendo de este concepto podemos afirmar que las organizaciones están llenas de procesos y es evidente que su éxito se basa en que tan competitivas y eficientes sean estas en ejecutar o realizar un flujo. El realizar los flujos de procesos en forma manual involucra costos en el uso de papel, tinta, impresiones, copias, tiempo de respuestas ineficientes, espacio físico para almacenamiento de documentos, posible pérdidas de los mismos, inexactitud sobre la etapa (estado) del proceso, etc. La automatización conlleva a hacer organizaciones ágiles y eficientes, detectar los cuellos de botella, disminuir errores en la ejecución de las políticas organizacionales (que en algunos casos viven en la mente de los empleados). Aprovechando la tecnología actual del Internet, las herramientas de colaboración como Lotus Domino y viendo las desventajas, problemas y costos que incurre llevar los procesos de forma manual, proponemos cubrir esas necesidades mediante un Motor de WorkFlow que lo hemos denominado “BMD Workflow Engine”. Este motor es el software que mediante un flujo ordenado y controlado permitirá automatizar y administrar las acciones y actividades usadas en la ejecución de un proceso, siempre basándose en el conjunto de reglas establecidas. La solución consta de tres módulos (bases de datos) estrechamente ligados que son: Organización, Definición de Procesos y Aplicaciones, en la primera podrá definir los departamentos y roles, en la segunda podrá armar el flujo con sus actividades (tareas) y acciones y en la tercera diseñar formularios y ejecutar los procesos.

VI

INDICE GENERAL

AGRADECIMIENTO............................................................ I

DEDICATORIA................................................................... II

TRIBUNAL DE GRADUACIÓN......................................... III

DECLARACIÓN EXPRESA .............................................. IV

RESUMEN..........................................................................V

CAPÍTULO 1

1. INTRODUCCIÓN............................................................ 1

1.1. Prefacio .............................................................................................. 1

1.2. Orígenes del Workflow....................................................................... 2

1.3. Objetivos ............................................................................................ 4

1.4. Alcances............................................................................................. 5

CAPÍTULO 2

2. FUNDAMENTOS TEÓRICOS ........................................ 7

2.1. Concepto y Definición de Flujo de Trabajo (WorkFlow) ..................... 7

2.2. Composición de un WorkFlow............................................................ 8

2.3. Modelo de Referencia de Workflow ................................................. 10

2.4. Características generales de los motores ........................................ 12

VII

CAPÍTULO 3

3. PLATAFORMA DE DESARROLLO............................. 14

3.1. La Arquitectura Domino.................................................................... 14

3.2. Las Bases de Datos Domino............................................................ 15

3.3. Las Bases de Datos Domino como modelos de contención. ........... 16

3.4. Los Servicios básicos de Domino. ................................................... 17

CAPÍTULO 4

4. ANALISIS Y DISEÑO................................................... 19

4.1. Requisitos ........................................................................................ 19

4.1.1. Software .................................................................................... 19

4.1.2. Hardware ................................................................................... 20

4.1.3. Humano ..................................................................................... 22

4.1.4. Tecnológico ............................................................................... 23

4.2. Estudio de Viabilidad........................................................................ 23

4.3. Costo................................................................................................ 26

4.4. Componentes Internos ..................................................................... 27

4.4.1. Base de datos de Organización................................................. 27

4.4.2. Base de datos de Definición de Procesos. ................................ 28

4.4.3. Base de datos de Aplicación ..................................................... 29

4.5. Interacción Entre Componentes....................................................... 29

4.6. Arquitectura del Motor de WorkFlow ................................................ 30

4.6.1. Partes de la Arquitectura del Motor de WorkFlow...................... 32

4.6.2. Elementos necesarios para el modelado del Motor ................... 32

4.7. Actores en la Arquitectura de Workflow ........................................... 44

4.8. Caso De Uso Del Flujo Workflow ..................................................... 44

4.8.1. Antes del Workflow.................................................................... 46

4.8.2. Después del Workflow............................................................... 47

VIII

4.9. Diagrama de Secuencias ................................................................. 48

4.10. Definición Del Contenido de las Bases .......................................... 52

4.10.1. Definiciones comunes.............................................................. 53

4.10.2. Definición Base Organización.................................................. 54

4.10.3. Definición Base Definición de Procesos. ................................. 56

4.10.4. Definición Base Aplicación. ..................................................... 59

BIBLIOGRAFIA................................................................ 61

IX

INDICE DE FIGURAS

Figura 1. Orígenes .............................................................................................3

Figura 2. Cubo de Workflow...............................................................................9

Figura 3. Modelo de referencia ........................................................................10

Figura 4. Arquitectura Domino .........................................................................15

Figura 5. Modelo de Contención ......................................................................17

Figura 6. Componentes e Interacción ..............................................................27

Figura 7. Arquitectura del motor.......................................................................31

Figura 8. Ruta Fija............................................................................................35

Figura 9. Ruta Condicionada............................................................................35

Figura 10. Ruta Fija y Condicionada ................................................................37

Figura 11. Regla de Transición ........................................................................39

Figura 12. Ejemplo Caso de Uso .....................................................................45

Figura 13. Antes del Workflow .........................................................................46

Figura 14. Después del Workflow ....................................................................47

Figura 15. Diagrama de Secuencia..................................................................49

1

CAPÍTULO 1

1. INTRODUCCIÓN

1.1. Prefacio

Los diferentes procesos que ejecutan las organizaciones involucran

personas con labores y funciones ya predeterminadas, estas manejan

la información, la misma que pasa por varios puestos de trabajo, cargos

u oficinas antes de llegar a su destino final.

Partiendo del hecho de que, para las organizaciones y sus directivos, el

manejo de información es sumamente importante y que siempre la han

utilizado en sus diversos procesos, en conjunto con lo antes

mencionado, se puede decir que el flujo de trabajo ha existido desde

hace mucho tiempo atrás.

2

Según la información que contengan los documentos, una de las

dificultades ha sido distribuirlos con un mismo formato a los

departamentos de la organización que los requieran. Además

involucran el manejo de papeles lo cual representa un riesgo de perdida

física, tiempos de respuesta pocos satisfactorios y costos para la

empresa.

Es evidente de que las organizaciones deben ser más competitivas y

eficientes, reducir costos y tiempos de respuesta, el éxito del

desempeño de las mismas se basa en la facilidad y rapidez que tengan

para adaptarse y evolucionar con la tecnología.

El workflow será la herramienta que ayudará a administrar y

automatizar los procesos del negocio.

1.2. Orígenes del Workflow

Al comienzo todos los procesos de la organización se los realizaban de

forma manual y por supuesto usando papel, el almacenamiento de

estos era en grandes contenedores de archivos y había la necesidad de

trasladar el papel físicamente de un sitio a otro. Luego llegaron los

computadores personales y con ello los primeros programas de

3

Gestión. En los años 60 con la aparición de los primeros Sistemas de

Información y las necesidades de compartir recursos de cómputo (como

la memoria, unidades de almacenamiento, etc.) aún no se podía

compartir la información debido a las diferentes barreras como eran las

distancias entre oficinas o los diferentes sistemas operativos (¡Error!

No se encuentra el origen de la referencia.).

Luego de casi dos décadas, surgió la tecnología de las redes creando

un medio donde se puede superar este obstáculo, haciendo que casi

cualquier información sobre la red este disponible en cualquier punto de

la empresa. Sin embargo, a pesar de compartir información, no se

podía realizar actividades colaborativas (1).

Figura 1. Orígenes

4

En los 90 nacen los primeros Sistemas de Gestión de Workflow, con su

principal objetivo, ser una herramienta colaborativa. Una definición dada

por la organización Workflow Management Coalition en el año 1994

dice:

“Un sistema que define, crea y gestiona automáticamente la ejecución de modelos workflow mediante el uso de uno o más motores workflow que se encargan de interpretar la definición de procesos (mapa workflow), interactuar con los agentes y, cuando se requiera, invocar el uso de los sistemas de información implicados en el trabajo”

1.3. Objetivos

� Proporcionar una herramienta para reflejar, mecanizar y

automatizar los métodos o acciones que se realizan en un

proceso.

� Automatizar y Optimizar las secuencias de los procesos.

� Agilitar los procesos con el fin de reducir tiempo de respuesta.

� Establecer mecanismos de control y seguimiento de los

procedimientos de una organización.

� Reducir tiempo, dinero y esfuerzo en la ejecución de un proceso.

� Optimizar el recurso humano y técnico, alineándolos a la

estrategia de la empresa.

� Reducir el uso del papel, costos de transporte físico.

5

� Lograr obtener documentos disponibles, de tal forma que la

información solicitada este en el momento preciso en que se lo

necesite.

� Equilibrar cargas de trabajo.

� Lograr definir estándares en procesos y flujos de trabajos,

ayudando a la reducción de costos de las unidades de negocio.

� Interpretar y ejecutar flujos de trabajo definidos correctamente

por el personal pertinente de dicha unidad de negocio o

sociedad.

� Lograr definir y desarrollar flujos de trabajo para cualquier unidad

de negocio o sociedad, basados en estándares y políticas

internas de las mismas.

1.4. Alcances

En respuesta a la falta de procesos, lineamientos y flujos no

establecidos por un gran porcentaje de unidades de negocio y

sociedades, nos sentimos en la necesidad de brindar una poderosa

herramienta, la cual facilitará y brindará un fuerte apoyo a las

actividades de las mismas. Con la implementación de este proyecto se

desea:

6

� Definición de una plantilla para la creación de formularios, en

que el usuario administrador podrá a partir de esta diseñar

formularios para el uso de cada proceso.

� Creación de procesos lineales e independientes.

� Registro de eventos por solicitud realizada.

� Cada proceso se ejecuta de forma independiente, la

ejecución del proceso no depende, ni afecta a otro(s)

proceso(s).

� Mediante un modelo electrónico, podrá definir el proceso y

las actividades que forman parte de este.

� Generar varios reportes que servirán para tomar ciertas

decisiones administrativas o de control en el flujo.

� Creación de un módulo de organización para definir la

estructura jerárquica de la organización mediante perfiles.

7

CAPÍTULO 2

2. FUNDAMENTOS TEÓRICOS

2.1. Concepto y Definición de Flujo de Trabajo (WorkFlow)

Los procesos operacionales de las empresas son frecuentemente el

resultado de la combinación de eventos y flujos de actividades

contempladas por las operaciones diarias, las cuales se las considera

como regla del negocio. Estos procesos son poco estandarizados, no

son integrados, son lentos, costosos, vulnerables a quiebres y

dependientes de pocas personas en la organización denominadas

responsables de los procesos. La correcta implementación de un flujo

de trabajo automatizado, junto con las políticas y procesos del negocio,

ofrecen gran ventaja competitiva y ganancias.

8

La WfMC (WorkFlow Management Coalition), en su página oficial,

define al workflow como:

La automatización de un proceso de negocio, total o parcialmente, en el que información de cualquier tipología llega al usuario adecuado en el momento adecuado, sobre la base de un conjunto de reglas inteligentes, que permite que la mayoría del trabajo sea efectuado informáticamente, mientras que las personas se ocupan solamente de las excepciones (¡Error! No se encuentra el origen de la referencia.)

En una definición general, un Motor de WorkFlow es un Software que

mediante un flujo ordenado y controlado le permitirá automatizar y

administrar total o parcialmente las acciones o actividades que se usan

para la ejecución de un proceso basado en un conjunto de reglas

establecidas.

2.2. Composición de un WorkFlow

Podríamos decir que una forma fácil de deducir cuales son los

componentes de un workflow es basándonos en las siguientes

interrogantes: ¿Cómo?, ¿Quién? y ¿Qué?

El ¿Quién?: hace referencia al personal de organización, es decir los

participantes que se encargarán de realizar las actividades asignadas.

La Jerarquía organizacional ayuda a definir quien o quienes ejecutarán

9

cada proceso, aquí se aplica un concepto que en lo referente a un

WorkFlow es definido como los Roles.

El ¿Qué?: se refiere a la información sobre la cual cada miembro

involucrado en un proceso dentro de la organización trabaja. Esta

definición Involucra tanto los documentos como los estados por los

cuales estos pasarán durante su ciclo de vida.

El ¿Cómo?: Son las reglas inteligentes del negocio, es decir los pasos

de los procesos, sus reglas de ruteo y su secuencia para lograr que la

información fluya de la mejor manera posible de un punto a otro,

cumpliendo así el objetivo deseado de automatización de actividades.

Figura 2. Cubo de Workflow

Figura 2. Cubo de Workflow

10

Las tres incógnitas anteriormente citadas forman parte de las políticas,

y procedimientos de una organización.

En la gráfica del cubo (Figura 2. Cubo de Workflow) se puede apreciar

los componentes de un flujo de procesos y como están relacionados el

uno al otro.

2.3. Modelo de Referencia de Workflow

El modelo de referencia de workflow que se muestra en la grafica

(Figura 3), es una estructura genérica para el desarrollo de aplicaciones

workflow desarrollado por la WfMC (¡Error! No se encuentra el origen

de la referencia.).

Figura 3. Modelo de referencia

Figura 3. Modelo de referencia

11

Cabe recalcar que este es un modelo de referencia, cuyo fin es

establecer una base en la terminología, conectividad e interoperabilidad

para los que desarrollan sistemas de workflow.

A continuación detallaremos los componentes e interfaces que se

forman parte del modelo de referencia:

Motor de Workflow (Workflow Engine)

Es el software que proporciona el control del ambiente de ejecución de

una instancia de Workflow.

Servicio de Representación de Workflow

Interpreta los flujos de procesos, controla sus diferentes instancias y la

secuencia de las actividades.

Interfaz 1: Herramientas de definición de procesos

Es la herramienta que permite diseñar y automatizar el flujo(s) del

proceso de una organización.

Interfaz 2 y 3: Aplicaciones Clientes e Invocadas

Esta interfaz brinda el front-end que acceden al motor de workflow, es

decir permite la interacción entre este y la aplicación cliente y también la

interacción con los agentes.

12

Interfaz 4: Otros servicios de representación de Workflow

Mecanismo que permite al motor de Workflow interactuar con otros

motores, es decir intercambiar diferentes tipos de información de control

y transferencia de datos relevantes entre los servicios de

representación

Interfaz 5: Herramientas de Administración y Monitoreo

Durante la inicialización y ejecución de la instancia de un proceso

ocurren muchos eventos, esta interfaz le permitir visualizar el estado de

dicho proceso.

2.4. Características generales de los motores

Mediante una tabla de chequeo detallaremos las cualidades que

manejan los motores de workflow del mercado (¡Error! No se

encuentra el origen de la referencia.), y con un visto indicaremos cual

de ellas contempla nuestro motor a desarrollar. Además después de la

tabla se da una breve aclaración del porque no se manejan ciertas

características.

Cualidades Check Administración de documentos, administración del ciclo de vida de los documentos Correo electrónico, facilidad para distribuir información

13

Bases de datos relacionales, RDBMS

Interfaz para el ingreso de los datos del flujo

Constructor de formularios

Monitoreo de estados, consultar el estado de los documentos

Asignación de tareas a la gente, mediante roles se asignan responsables de las tareas Delegar responsabilidad de una tarea a otra persona

Ejecución de tareas paralelas, ejecutar más de una tarea al mismo tiempo

Tareas paralelas ocurren cuando una actividad genera mas de una

salida, ya sea porque el documento es copiado y enviado a diferentes

responsables o cuando es necesario realizar más de una actividad al

mismo tiempo además también se maneja el concepto Fusión, que es

cuando una actividad tiene mas de una entrada y para realizarse deben

cumplirse todas o parte de las actividades que le anteceden. Un

ejemplo de esto seria: si un trabajo requiere que un documento sea

aprobado por tres jefes de diferentes departamentos, entonces se

debería enviar una copia a cada rol y pasaría a la siguiente fase

siempre y cuando todos los responsables hallan aprobado dicho

documento. Por ello estimamos que realizar esta funcionalidad conlleva

un mayor control, algo más de complejidad y por lo tanto mayor tiempo

de desarrollo.

14

CAPÍTULO 3

3. PLATAFORMA DE DESARROLLO

3.1. La Arquitectura Domino

Lotus Domino trabaja dentro de un ambiente integrado cliente –

servidor, lo que permite la interacción entre el servidor domino y el

cliente (el cliente puede ser notes u otro). La arquitectura domino

permite ejecutar tareas como son el almacenamiento, comunicación e

intercambio de información.

Un ambiente Domino completo incluye de manera general el cliente

Notes y el servidor Domino, sin embargo el propio servidor Domino

permite el acceso a clientes que no sean propios de Lotus como son los

navegadores de Internet u otros clientes de correo electrónico. Esto es

15

posible ya que dentro de la estructura del servidor están incluidos los

servicios para ejecutar los servicios Web y de correo electrónico.

3.2. Las Bases de Datos Domino

Las bases de datos Domino son conocidas como almacenes de objetos

y tienen por extensión el .nsf. Este tipo de base de datos es

categorizada como documental ya que dentro de ella se almacena

mucho mas que información.

Cada una de las bases de datos Domino NSF (Notes Storage Facility)

puede incluir archivos como aplicaciones, mail, directorio, gráficos,

videos y sonidos.

Figura 4. Arquitectura Domino

Figura 4. Arquitectura Domino

16

Los elementos que conforman una base de datos Domino son los

siguientes:

� Documentos.- estos contienen datos como texto, gráficos o

cualquier tipo de archivo adjunto.

� Formularios.- son plantillas usadas para crear documentos

y para mostrar el contenido de estos. Estos pueden ser

visualizados dentro del mismo cliente Notes como a través

de una navegador de Internet.

� Vistas.- son usadas también para mostrar los documentos

pero a manera de una tabla dinámica.

� Agentes.- son programas que se ejecutan en un horario

determinado o bajo una acción realizada.

3.3. Las Bases de Datos Domino como modelos de contención.

Las bases de datos Domino son contenedores de una serie de

elementos, pero estos contenedores son archivos que se sitúan dentro

del sistema de archivos del sistema Operativo. Domino accede a las

bases de datos por medio del sistema de archivos y el nombre del

archivo contenedor. Una vez abierto este contenedor de información se

podrá acceder a la información a través de las notas.

17

Esta relación es llamada modelo de contención y se ilustra mejor en el

siguiente gráfico:

3.4. Los Servicios básicos de Domino.

La infraestructura de Domino ofrece varios servicios que resultan de

mucha ayuda para su administrador. Entre los servicios que Domino

ofrece están los siguientes:

� Servicio de Directorio.- ayuda a categorizar a todos los

recursos humanos (usuarios) y tecnológicos (servidores)

dentro del ambiente Domino.

� Servicio de Seguridad.- Domino ofrece algunas

herramientas y opciones para controlar el acceso a los

servidores y a las bases de datos. Cabe señalar que las

Figura 5. Modelo de

Figura 5. Modelo de Contención

18

seguridades para bases de datos y para servidores se

manejan de forma separada.

� Servicio de Mensajería.- Domino provee de varias

herramientas para soporte de mensajería, sea desde cliente

Notes o Web.

� Servicio de Replicación.- el Core de servicios de Domino

ayuda a mantener redundancia de bases de datos entre

servidores mediante tareas programadas y ayudadas de

varios esquemas de replicación para implementar el que

mejor se ajuste a su negocio.

� Servicio de Mantenimiento.- existen herramientas y

servicios en Domino que proveen de soporte y monitoreo

tanto al servidor como a sus bases de datos.

19

CAPÍTULO 4

4. ANALISIS Y DISEÑO

4.1. Requisitos

Para el desarrollo del motor de flujo de procesos (Workflow) hemos

usado los recursos que se detallan a continuación:

4.1.1. Software

� Lotus Domino Server 6.5.2

� Lotus Domino Administrator 6.5.2

� Lotus Domino Developer 6.5.2

� Lotus Notes 6.5.2

� Browser Navigator (indispensable con JVM)

20

4.1.2. Hardware

Requerimientos para el correcto funcionamiento de Notes

Client, Domino Administrator Client y Domino Designer1.

Plataforma Windows 95/98

Windows 2000/ Windows XP

Macintosh Windows NT

Versiones de Sistemas Operativos Soportados

Windows 95 (2nd edition installer minimum); Windows 98

Windows 2000 Professional; Windows XP Professional

Macintosh OS 10.1.x; Macintosh OS 10.2.x; Macintosh OS 10.3.x

Windows NT4

RAM 64 MB mínimo 256 MB o mas es recomendable

128 MB mínimo 256 MB o mas es recomendable

128 MB mínimo 256 MB o mas es recomendable

64 MB mínimo 256 MB o mas es recomendable

Espacio en Disco (La mínima cantidad de espacio en disco es requerida solo para la instalación predeterminada. Más espacio se requerirá si las bases de datos serán replicadas localmente o se crean copias locales)

275 MB requerido

275 MB requerido

(OS 10) 250 MB requerido

275 MB requerido

1 Los requerimientos que se describen para la plataforma Macintosh son tan solo para el cliente Notes. Por parte del proveedor solo se especifica la plataforma Windows con los clientes Administrador y Designer.

21

Requerimientos para el correcto funcionamiento del Domino

Server

Platform Windows 2000 Windows NT Windows 2003 Supported operating system versions

Windows 2000 Server; Windows 2000 Advanced Server6

Windows NT4 Intel(1)

Windows 2003 Server Standard Edition; Windows 2003 Server Enterprise Edition6

RAM 128 MB minimum 192 MB or more recommended

128 MB minimum 192 MB or more recommended

256 MB minimum

Disk space 1 GB minimum 1.5 GB or more recommended

1 GB minimum 1.5 GB or more recommended

1 GB minimum 1.5 GB or more recommended

Platform AIX Linux Solaris Supported operating system versions

AIX 5.1; AIX 5.2

Red Hat Enterprise Linux 2.1; Red Hat Enterprise Linux 3.0; SuSE Linux Enterprise Server (SLES) 8.0; UnitedLinux 1.0; Powered by UnitedLinux 1.0

Solaris 8 Solaris 9

RAM 192 MB minimum; 256 MB or more recommended

128 MB minimum; 192 MB or more recommended

192 MB minimum 256 MB or more recommended

Disk space 1 GB minimum 1.5 GB or more recommended

1 GB minimum 1.5 GB or more recommended

1 GB minimum 1.5 GB or more recommended

22

Platform iSeries z/OS Linux on zSeries Supported operating system versions

OS/400 Version 5, Release 1 or later

z/OS Version 1, Release 2 or later - or - z/OSe Version 1, Release 3 or later

UnitedLinux 1.0 for IBM S/390

RAM 288 MB minimum; 512 MB or more recommended

1 GB minimum; 2 GB or more recommended

1 GB minimum 2 GB or more recommended

Disk space 1 GB minimum 1.5 GB or more recommended

3 3390-3 volumes minimum

2.5 GB minimum 2.5 GB or more recommended

4.1.3. Humano

� Perfil:

� Analista – Programador

� Conocimientos requeridos

� Lotus Domino Server

� Lotus Notes

� Lotus Domino Designer

� Lotus Script

� Java Script

� Integrantes:

� Bone Samuel

� Dimitrakis Clara

� Motenegro Carlos

23

4.1.4. Tecnológico

Para el desarrollo del proyecto nos hemos provisto de los equipos

con las siguientes características:

Además usamos otros Recursos:

� USB flash memories (128Mb y 512 Mb)

� Internet (LAN y Dial up)

� Scanner.

4.2. Estudio de Viabilidad

El análisis planteado a continuación abarcará estudios referentes a

funcionalidades y alcances del sistema, planteando una problemática

general; además se refrescará ciertos puntos ya topados con

anterioridad como son los alcances del proyecto y estadísticas

generales de procesos en una organización.

Sistema Operativo

ProcesadorMemoria

RAMDisco Duro

Monitor Perifericos Impresoras

Windows XP

Pentium IV 266Mhz 256 GB 60 GB LG 15''

mouse, teclado, unidad de CD-RW Lexmark Z615

XP Profesional y Windows 98

AMD - Semprom 2.8 788 MB

120 GB y 40 GB

Samsung 14''

Mouse óptico, teclado, unidad de CD-RW

Lexmark Z65

Windows XP Pentium IV 256 MB 40 GB

Daewoo 14''

mouse, teclado, unidad de CD-ROM

24

Como primer punto hablaremos un poco de los alcances del sistema.

Nuestro motor de WorkFlow ofrece una definición de procesos ajustable

a la que tiene definida una organización, rigiéndose a las políticas de

procesos ya definidas por esta. Esto no implica, que dichas políticas

estén correctamente definidas para el flujo o proceso a automatizar. Es

parte fundamental llevar a cabo una revisión de políticas de procesos

para el ajuste correcto con el motor de WorkFlow. Esto forma parte

previa a la implementación del sistema.

La siguiente estadística (¡Error! No se encuentra el origen de la

referencia.) nos demuestra que los procesos internos de oficina,

pueden ser flujos ya definidos, pero que no optimizan tiempos ni

generan muchas ganancias:

� 10-15% de los ingresos de una organización se gastan en

crear, administrar y distribuir documentos

� 60% del tiempo de las personas se gasta trabajando con

documentos

� 75%-85% de los documentos de negocios están en papel

� Un documento en promedio es copiado 5 veces.

25

� Un trabajador pierde en promedio 50%-80% de su tiempo

buscando información.

La automatización de procesos por medio de nuestro motor de

WorkFlow es precisamente para lograr que la funcionalidad operativa

de oficina sea eficiente, evitando frecuentes pérdidas de tiempo, mayor

fluidez en cuanto a información, y el resto de puntos expuestos en los

objetivos del proyecto.

Lo expuesto antes lleva a preguntar “¿Con qué plataforma o de qué

manera se implementará dicha posible solución?”. La respuesta: IBM

Lotus Domino & Notes, los motivos o el ¿por qué?, IBM Lotus con su

ambiente Domino & Notes es líder mundial en lo que a herramientas de

mensajería y colaboración se refieren para la optimización de procesos

de negocio, haciendo que el rendimiento del personal sea eficiente al

máximo, pues cuentan con herramientas de fácil uso y potentes para

almacenaje de cualquier tipo de documentación.

Nuestro motor de Workflow, apoyado en este máximo exponente de

automatización de procesos de negocio, nos permite definir las políticas

dentro de los flujos a crear, tomando en cuenta responsables de cada

26

tarea o actividad, y definiendo un nivel de jerarquía acoplable al

existente dentro de la organización.

4.3. Costo

El costo de la realización del motor de workflow esta estimado en un

valor aproximado de $8818.30, para lo cual nos basamos en valorar

todos los valores invertidos en la realización del mismo, que a

continuación detallamos:

Sueldo, 3 personas 17horas/semanal = 68 horas/mensual $3 x hora 204 * 3 = 612 Insumos Cuaderno 0.8 2.4 Lápiz 0.5 1.5 Rema 5 5 PenDrive 20 60 Cartucho color 35 35 Cartucho bn 20 20 123.9 * Para 8 meses 8 Sueldos 8 meses 612 4896.0 Capacitación 1200/persona 1200 3600.0 Luz 8 meses 0,8 6.4 Internet 8 meses 6 48.0 Comunicación (teléfono) 6/persona 18 144.0 Insumos 8 meses 123.9

8818.3 Inversión

27

4.4. Componentes Internos

En el análisis del motor de workflow vimos la necesidad de manejar

algunos repositorios con la finalidad de controlar adecuadamente

diferentes ambientes y datos como son: la definición de la organización,

el diseño del motor y un contenedor de documentos y aplicaciones; por

ello optamos por usar tres bases de datos:

� Base de datos de Organización.

� Base de datos de Definición de Procesos.

� Base de datos de Aplicación.

4.4.1. Base de datos de Organización.

En este repositorio se almacenará información acerca de la

organización, su estructura jerárquica, es decir: departamentos,

Figura 6.

Figura 6. Componentes e Interacción

Organización

Aplicación Definición de

Procesos

Administrador

28

personas y los roles, así como también la relación que existen

entre estos datos, por ejemplo: en el departamento financiero

contiene los roles gerente, secretaria y estos a su vez están

asignados a personas.

4.4.2. Base de datos de Definición de Procesos.

Esta base de datos contendrá el template o plantilla para la

definición de flujos y almacenará los flujos de procesos que se

creen.

Con la ayuda de una herramienta de configuración electrónica de

documentos, permitirá definir un flujo de trabajo mediante

actividades a realizar, para esto, se realiza la transformación del

proceso desde su forma real, a un formato susceptible de ser

procesado por ordenador; se abstrae el proceso, se crea una

definición informática del mismo compuesta por una serie de

entidades que representan las actividades. La definición del

proceso contiene la información de todas las actividades que lo

componen (características, requisitos de realización, personal

asignado, etcétera), que se encuentran asociadas a una serie de

reglas predefinidas acerca de cómo han de efectuarse.

29

4.4.3. Base de datos de Aplicación

Se encarga de interpretar la definición del proceso y de ejecutarla

mediante el engine o motor de workflow, componente que

proporciona el entorno de ejecución necesario para el flujo de

trabajo que se ha definido, interactuando con el documento que

se le asigno al proceso y garantizando además la integración de

todos los componentes del proceso. Además aquí estará un

pequeño programa que trabajará en un segundo plano con el fin

de controlar la secuencia del flujo y verificar si el proceso se está

ejecutando de la forma prevista.

4.5. Interacción Entre Componentes

Básicamente la base central es la de Definición de Procesos, ya que

esta es la que interactúa con la base Organización y Aplicación (Figura

6.).

En los flujos que se diseñan dentro de la base Definición de Procesos

hay la necesidad de asignar responsables a las actividades, estos

pueden ser personas, roles o departamento, esta información se

encuentra almacenada en nuestra base Organización.

30

En la base Aplicación se encuentra el programa que dará inicio al flujo,

el documento que viajará por él y otro programa que trabaja en segundo

plano que es el que se encarga de consultar constantemente a la base

Definición cuál es la tarea que se debe realizar, cual es el estado que

tendrá el documento y quien es el responsable del mismo, para la

ultima parte se consulta a la base Organización.

4.6. Arquitectura del Motor de WorkFlow

A continuación representaremos por medio de un gráfico la arquitectura

de nuestro Motor de Workflow, para el cual nos hemos basado en el

modelo creado por la WfMC, quienes son responsables de la creación

de estándares de arquitecturas para el diseño de Workflow.

Los principales componentes de este sistema genérico de WorkFlow se

muestran en la figura 7.

31

Figura 7. Arquitectura del motor

Elementos

Parte A

Parte B

Figura 7. Arquitectura del motor

32

4.6.1. Partes de la Arquitectura del Motor de WorkFlow

En este modelo podremos encontrar dos componentes:

� Software

� Datos y Definición de Procesos

El Software

Provee la gran cantidad de las funciones para nuestro sistema de

Workflow. También conocido como soporte lógico para el

funcionamiento global de todo el worklflow.

Los Datos y Definición de Procesos

Dentro de nuestro análisis son usados por los componentes de

Software. Los datos prácticamente son los parámetros necesarios

que hay que reunir para lograr la definición de procesos.

A continuación describiremos los elementos más importantes

mostrados en nuestro modelo de arquitectura:

4.6.2. Elementos necesarios para el modelado del Motor

Dentro de esta parte de nuestro diseño arquitectónico podremos

encontrar algunas definiciones empleadas para el modelado de

nuestro motor de Workflow, estos son los elementos necesarios

33

para darle la funcionalidad u operabilidad a los distintos procesos

internos de cualquier organización. Se ha tratado de reunir la

mayor parte de los elementos comúnmente usados en la

definición manual de procesos, con la finalidad acoparlos a datos

entendibles por las computadoras mediante la lógica de

programación y darle la automatización que se desea alcanzar al

crear un motor de flujos (¡Error! No se encuentra el origen de la

referencia.). A continuación listamos estos elementos, con su

respectiva descripción:

� Actividades

� Personas

� Roles

� Rutas

� Reglas de Transacción

� Datos

� Eventos

� Plazos

� Políticas, etc.

Las Actividades:

34

Cada tarea es un conjunto de acciones o actividades manejadas

como una sola, puede decirse que es la unidad mínima de trabajo,

que combinada con otras actividades constituye lo que

conocemos como procesos organizacionales. Las actividades

surgen del análisis del flujo de los procesos que realiza la

organización

Personas (Usuarios):

Es el responsable que tiene asignado realizar una determinada

tarea dentro del flujo definido por la organización. En nuestro

análisis acerca de los responsables de las actividades de un

proceso podemos determinar que un sujeto puede ejecutar varias

de las actividades definidas en un flujo de la organización.

Roles:

El rol encapsula las funciones, cargos u oficio definidas en la

jerarquía organizacional independientemente de las personas, por

ejemplo el Rol secretaria, gerente general, jefe de ventas,

programador, etc..

35

Es indispensable que el administrador del motor asigne

correctamente las personas correspondientes al rol, y a su vez

que el rol asignado a la tarea sea el adecuado,

Rutas:

Una ruta define la secuencia de pasos o camino lógicos a seguir,

por donde van ha “viajar” los documentos, mediante esto

podemos definir la ruta que seguirá el documento, en nuestro

análisis pudimos definir dos tipos de rutas.

Rutas Fijas: En este caso los documentos siguen un

camino lineal, como se ve en el gráfico de ejemplo.

Rutas Condicionales: El camino o ruta a definir en nuestro

análisis incluye también condiciones que definirán cual es

el siguiente punto que el documento debe “viajar”, en la

gráfica se detalla un ejemplo:

Figura 8. Ruta Fija

Figura 9. Ruta

Actividad 1 Actividad 2 Actividad n Fin Inicio

Figura 8. Ruta Fija

36

La definición de rutas para nuestro Motor de Workflow, puede

incluir los dos tipos de rutas indicadas anteriormente, es decir

rutas fijas y rutas condicionales. Como se nuestra en el gráfico

siguiente:

F V

Actividad 1

Actividad 2 Actividad 3

Fin

Inicio

F V Condición

Actividad 4 Condición

Figura 9. Ruta Condicionada

37

Como nota adicional cabe mencionar que para el diseño del flujo

se usara un modelo electrónico.

Reglas de Transición:

Son las reglas lógicas que determinan la navegación del

documento dentro del motor de Workflow. Estas reglas tienen

que ser previamente indicadas en los documentos de

Figura 10. Ruta Fija y Condicionada

Ruta Fija

Actividad 1

Actividad 2 Actividad 3

Inicio

V Condición

F V

Fin

Actividad 6 Condición

Actividad 4

Actividad 5

Figura 10. Ruta Fija y Condicionada

38

configuración de las rutas, para la realización de un proceso

específico.

Los procesos que se pueden configurar en nuestro motor pueden

incluir una o más bifurcaciones, dependiendo de las reglas que

siguen los procesos de la organización, donde se implemente

nuestro motor de Workflow.

Para una mejor comprensión de lo explicado anteriormente

presentamos el siguiente ejemplo que incluye una regla de

transición: Un Estudiante solicita el acceso a un curso de

graduación de la Universidad de Guayaquil, para que este pueda

tener acceso al curso de graduación tiene que haber solicitado su

certificado de haber egresado si no lo tiene aun, tendrá que

solicitar su certificado de egresado y entonces tendrá acceso al

curso de graduación.

Lo ya expresado puede ser considerado como una regla que

maneja la carrera. Entonces el ejemplo que se plantea puede ser

representado de la siguiente forma:

39

Para el ejemplo citado el contenido de las expresiones lógicas

determinaran por donde navegar el documento.

Datos:

Son los valores que identifican los atributos de los procesos y

actividades específicas que se definirán. Entre los datos

empleados en nuestro motor hemos identificado, Datos de Control

y Datos relevantes.

Figura 11. Regla de Transición

V

Solicitar Ingreso al Curso de

Inicio

¿Ya solicito certificado de

Solicitar certificado de haber egresado

Llenar solicitud

de ingreso

Pagar Curso

Fin

Regla de Transición

Figura 11. Regla de Transición

40

Datos de Control: Estos son los datos internos manejados

por la lógica de nuestro Motor de Workflow, es decir la

parte programada de nuestro motor que permite la creación

de documentos y definición de procesos.

Datos Relevantes: Son los datos empleados para

determinar el ruteo de las distintas actividades que podría

tener un proceso, en otras palabras funciona como relevo

entre una tarea en un punto y otra tarea en otro punto,

hasta cumplir su legado. Son prácticamente datos de

enlace entre actividades, para cumplir el proceso.

Eventos:

Para el análisis de nuestro motor hemos incluido un elemento

importante conocido como eventos, los cuales son interrupciones

que contienen información. Los eventos tienen un inicio y pueden

tener uno o más destinatarios. Estos pueden ser disparados

voluntaria por los usuarios o en forma automática.

De forma voluntaria por los usuarios: El proceso como tal

involucra aprobaciones y ciertos cambios de estado, los

cuales están sujetos a acciones del usuario. Este tipo de

41

acción es la que llamamos de forma voluntaria por el

usuario.

De forma automática: Es decir que se disparará de forma

implícita durante el transcurso del flujo, como por ejemplo:

Tiempos expedido en generar acciones.

Plazos:

A los plazos los podemos considerar como condiciones que

definen el tiempo en el que se realiza o debe realizarse una

determinada tarea. Mayormente son relacionados con los eventos

automáticos. Mediante la inclusión de este elemento podremos

darle mayor funcionabilidad a nuestro motor de Workflow.

Por Ejemplo:

A los empleados de una organización se les asignan actividades y

se les asigna un tiempo para que las cumplan, de no ser así,

según las definiciones de las actividades, el documento cambiará

de estado.

Políticas:

42

Las definimos como la manera formal de expresar sentencias de

cómo las organizaciones manejan ciertos procesos. Para nombrar

un ejemplo, las empresas tienen políticas de reclutamiento de

personal. Para ello se siguen procesos ya establecidos por las

organizaciones.

Siempre es bueno que las empresas cuenten con un manual de

definición de procesos que les permitan manejar estándares de

procedimientos para llevar un mejor control de las políticas que

tiene la organización.

En la Parte A de nuestra arquitectura para el motor de Workflow

podemos observar que los elementos y los procesos convergen

en un documento al que hemos llamado documento de

configuración de flujos. Este documento al que nos referimos es

aquel donde el Administrador del servidor de Lotus Domino podrá

realizar las siguientes actividades:

� Diseñara las rutas basándose en los procesos que haya

identificado.

� Aplicar las condiciones dependiendo de las actividades a

realizar.

43

� Definirá los tiempos límites para el cumplimiento de una

tarea.

� Definirá eventos y cuando deben dispararse.

� Establecerá las reglas de transición o condiciones.

� Definirá roles responsables de llevar a cabo una tarea

específica.

Una vez que el administrador haya definido el proceso en si, con

todas sus reglas y condiciones, se registrará cada proceso en la

base de proceso, donde nuestro motor de Workflow podrá

manejar el flujo del proceso definido.

En la Parte B de la arquitectura de nuestro motor, se presenta de

manera conceptual la creación de los documentos en si que

“navegarán” o “viajarán” por el proceso o flujo previamente

definido.

En la parte de Creación de Documento se incluirán recursos

prefabricados y que a su vez nos permitirán la interacción entre

los documentos diseñados por el Administrador del Workflow y los

procesos definidos por él.

44

El administrador quien debe tener conocimiento acerca de Lotus

Domino y del motor de Workflow que se le asignará para que lo

administre, deberá crear los documentos que cada proceso

requiere para su funcionamiento, luego de esto los montara en el

proceso correspondiente, donde los usuarios del sistema podrán

usarlos para sus actividades diarias.

4.7. Actores en la Arquitectura de Workflow

En Nuestra arquitectura podemos identificar tres grupos actores,

necesarios para que le motor pueda estar en producción en cualquier

organización.

Actores Acción que Realizan Desarrolladores de Motor de Workflow

Analizan, Diseñan, Implementan y Prueban el Motor de Workflow

Administradores del Motor (Usuario final)

Definen procesos y crean los documentos que el usuario final usara para el desempeño de sus actividades

Usuarios que participan en el flujo de proceso

Usan los documentos, y de esta forma hacen que estos “viajen” de un lugar a otro.

4.8. Caso De Uso Del Flujo Workflow

Llegar a establecer un caso de uso, para el Motor de Workflow fue

difícil, porque realmente su utilidad es automatizar un flujo de proceso y

esto es un tema bastante general, por lo que hemos optado por

45

presentar un ejemplo de un proceso y representarlo como es antes y

después de la automatización.

..

Primero comenzaremos representando como es el flujo que estamos

usando de ejemplo mediante un diagrama. Los cuadros entre cortados

son actividades que tienen condiciones implícitas. A lo largo de la

Figura 12. Ejemplo Caso de Uso

F V

Aprobar Solicitud

Añadir información

adicional

Solicitud de Pedido

Inicio

Revisión de Solicitud

F V ¿Datos

adecuados?

¿Solicitud Idónea para ser aprobada?

Re – Aprobar Solicitud

F

Despachar Solicitud

Fin

¿Aprueba el Gerente G.?

V

Rechazado

Figura 12. Ejemplo Caso de Uso.

46

explicación se apreciará como el flujo como tal no cambia, lo que difiere

es la forma en que se realizan las cosas y el medio que se usa para

realizarlo.

4.8.1. Antes del Workflow

E

n

l

a

g

r

áfica está de forma abreviada el mismo flujo que antes se detallo,

en el paso 1 hacen la solicitud y la envían al siguiente

responsable para que la apruebe o desapruebe, en caso de la

segunda opción está regresara al que la remitió (paso 2), una vez

que este la corrija volverá a enviar dicho documento (paso 3),

luego que este la apruebe irá al siguiente responsable (paso 4)

quien se encargara de ingresar el pedido al sistema (paso 5) y

Figura 13. Antes del Workflow

Figura 13 Antes del Workflow

47

recién en este instante ese documento esta almacenado

electrónicamente

Sin el workflow los pasos del 1 al 5 usan papel para realizar el

flujo del proceso, además es necesario trasladar el papel de un

puesto a otro y es difícil conocer el estado de cada documento,

para ello habría que preguntar a las diferentes personas que

intervienen en el flujo que realizaron y a donde lo enviaron.

4.8.2. Después del Workflow

Como se observa en el grafico a lo largo de todo el flujo del

proceso los responsables interactúan con el documento y las

actividades electrónicamente, chequear el estado de los

documentos simplemente es una consulta electrónica para ver en

Figura 14. Después del Workflow

Figura 14. Después del Workflow

48

que instancia está, no existen papeles adicionales ni el transporte

del mismo de un lugar a otro.

4.9. Diagrama de Secuencias

El motor de workflow contempla una serie de etapas que juntas

permitirán llevar a cabo la automatización de un flujo de proceso.

Nosotros hemos divido el motor en cinco fases, las cuales abarcan

otras actividades.

De forma muy general estas fases son:

� Requisitos: es todo lo necesario para diseñar el flujo del proceso.

� Construcción del flujo, es el diseño de flujo del proceso.

� Aplicación, es la interfaz por medio de la cual se puede iniciar

una instancia de un flujo de proceso.

� Flujo ejecutándose, una vez iniciado la instancia de un proceso,

el motor constantemente realiza una serie de validaciones y

consultas, como por ejemplo: consultar las siguientes

actividades, validar y verificar estados, consultar responsables,

etc.

� Finalización del flujo, simplemente es el fin de la instancia de un

flujo que alguna vez se inicio.

49

En la grafica podemos distinguir cada una de las fases con un color

diferente, además la transición que existe entre ellas, el flujo que arman

Figura 15. Diagrama de Secuencia

Figura 15. Diagrama de Secuencia

50

las actividades de las mismas y la interacción constante que existe

entre las bases de datos.

Ahora entraremos al detalle de cada una de las secciones antes

mencionadas:

Requisitos, antes de comenzar a diseñar el flujo es necesario definir

y diseñar otros grupos de elementos,

En la Base de la Organización:

� Definir departamentos: son las divisiones de la organización,

como por ejemplo: el departamento de finanzas, contabilidad,

sistemas, etc.

� Definir roles, son los cargos bajo los cuales se etiqueta a las

personas, por ejemplo: secretaria, asistente, etc. En esta parte se

debe detallar:

� Departamento al que pertenece el rol.

� Persona que está a cargo del rol.

� Sustituto, el rol que reemplazará a este en caso que lo

amerite.

� Superior, el rol que jerárquicamente está en un nivel más

elevado.

51

En la Base de Aplicación:

� Diseño del formulario: el administrador deberá diseñar el

formulario que usa el proceso que quiere automatizar, además

debe añadir a su diseño la plantilla que contiene los elementos

necesarios para el funcionamiento e interpretación de la

automatización del flujo.

Construcción del flujo, una vez que tenga los requisitos necesarios

para el proceso a automatizar se podrá diseñar el mismo y con ello

definir la ruta que tendrá el documento, para lo cuál en la base de

Definición de Procesos deberá:

� Seleccionar el formulario con el que trabajará el proceso.

� Definir las actividades que forman parte del flujo, para lo cuál se

debe asignar un rol responsable, periodicidad, definir condiciones

(en los casos que lo ameriten), definir acciones y actividades

siguientes.

Aplicación: es el programa que permite seleccionar el flujo a

comenzar, al momento de iniciarlo automáticamente pasará a la

siguiente fase.

52

Flujo ejecutándose: una vez iniciado una instancia del proceso, se

cargará un agente que se comunica con la Base de definición para

consultarle cuál es la actividad que se debe realizar, verificar y

consultar el estado. Esta base a su vez consulta a la base de

Organización el nombre del rol asignado como responsable de dicha

actividad, y así sucesivamente hasta que llegue al final del flujo.

Finalización del flujo: una vez llegado al final el proceso se dará

como concluido.

4.10. Definición Del Contenido de las Bases

Como se puede apreciar a lo largo de la documentación dada hasta

este punto (como en: Componentes Internos, Diagrama de secuencia,

etc.) cada una de las bases de datos (BD) que se usaran en el Motor de

Workflow tienen sus propios elementos, documentos, funcionalidad y

finalidades. Todas las definiciones que se han hecho sobre las BD son

de forma macro y han servido para el entendimiento de cómo será el

manejo, uso y propósito de ellas en el Motor de Workflow. Ahora nos

introduciremos en el análisis de este tema y por cada base detallaremos

lo siguiente:

� Documentos que forman parte de cada BD.

53

� Los elementos de cada documento. Aquí encontrará una tabla en

la que se detalla: Nombre, Descripción, una columna adicional en

la que encontrara la letra “O” en caso de que el campo sea

obligatorio y “A” en caso de que sea automático.

� Validaciones (reglas - restricciones), y aquellas cosas que debe

considerar al definir el documento.

4.10.1. Definiciones comunes.

Las tres bases de datos contienen elementos comunes que lo

detallaremos a continuación, con el fin de no ser repetitivos en la

definición de cada una de ellas.

Documento Configuración

Documento que contiene los parámetros, seteos y

configuraciones del motor.

Nombre Descripción

Nombre Servidor Nombre del Servidor donde están las bases.

A

Ruta y Nombre de las bases

Nombre y ruta de cada una de las bases de datos.

O

Permitir Nombre Duplicados

Especifica si desea que los trabajos a iniciar tengan o no nombres duplicados

Calendario Definción de los días y horarios laborables de la empresa.

Ruta y Nombre de la base Histórica

Nombre y ruta de cada una de la base de dato histórico (Archive).

54

Los formularios tienen datos sobre la creación del documento:

Nombre Descripción

Autor Nombre del que creo el documento A Fecha Fecha de creación del documento A

4.10.2. Definición Base Organización.

Contiene información de la organización (Para mayor detalle,

consulte

Base de datos de Organización. - Pág. 27Figura 9. Ruta Condicionada Figura 9. Ruta Condicionada

). Esta compuesto por los documentos Departamentos y roles.

Documento Departamento

División organizacional bajo la cuál se agrupan roles que tiene

algo en común.

Nombre Descripción

Código Código del departamento A Nombre Nombre del departamento O Descripción Detalle sobre el departamento Jefe Persona responsable del departamento O Fecha y Hora Fecha y hora de la creación del

departamento A

Autor Autor que crea el departamento A

55

Documento Roles

Etiqueta con la que se identifica a una persona que realiza ciertas

funciones en la empresa.

Nombre Descripción

Departamento Departamento al que pertenece O Código Código del rol A Nombre Nombre del rol O Descripción Detalle sobre el rol Responsable Nombre de la persona responsable del rol. O Sustituto Nombre de la persona sustituto. Supervisor Rol del cargo superior al que se está

definiendo.

Estado Rol Estado del rol, activo o inactivo. Estado Responsable

Estado de la persona responsable, activo o inactivo.

Fecha Inicio Inactividad

Fecha desde que está inactivo el rol responsable

Fecha hasta Inactividad

Fecha hasta la que está inactivo el rol responsable

Fecha y Hora Fecha y hora de creación del rol A Autor Persona que creo el rol A

Validaciones.

� Las personas responsables, sustitutas y superior, tanto en

departamentos como en roles, se las obtiene de las que

están definidos en el ACL (Access Control List).

� Una persona puede pertenecer a más de un rol, siempre y

cuando sea de un mismo departamento.

� Una persona no puede pertenecer a más de un

departamento.

56

� No se puede eliminar departamentos al cual ya se le hayan

definidos roles.

� El objetivo de Suplemente es para que el asuma la

responsabilidad de una actividad cuando el responsable

este inactivo.

� El objetivo de Superior es para notificarle que una actividad

no ha sido cumplida en el tiempo especificado.

� En caso de que modifique el nombre del responsable de un

rol y existan actividades a cargo de el, se notificará si

desea actualizar los cambios también en el proceso.

4.10.3. Definición Base Definición de Procesos.

Contiene información sobre la definición de flujos de procesos. (Para mayor detalle, consulte Base de datos de Definición de Procesos. - Pág. 28Figura 9. Ruta Condicionada Figura 9. Ruta Condicionada

). Esta compuesto por los documentos Procesos, Actividades,

Acciones.

Documento Proceso.

Cabecera del flujo del Proceso.

Nombre Descripción O

Código Código del proceso. A Nombre Nombre del proceso. O Descripción Detalle sobre el proceso Nombre Formulario Nombre del formulario con el que se O

57

trabajará todo el flujo Lista de Actividades Nombre de las actividades que forman

parte del proceso (solo declaración) O

Fecha y Hora de creación

Fecha en la que se creó el Proceso. A

Autor Persona que creó el Proceso A

Documento Actividades.

Detalle del Proceso, son las tareas que forman parte del flujo de

proceso.

Nombre Descripción O

Proceso Proceso al que pertenece la actividad. O Código Código de la actividad. A Nombre Nombre de la actividad. O Descripción Detalle sobre la actividad Indicador Actividad Inicial

Indica si la actividad definida es la actividad inicial

Tipo Indica si la actividad es manual o automática

O

Listado Acciones Listado de las acciones de la actividad O Nombre Agente Nombre del agente solo en caso de que la

actividad sea automática O

Responsable Rol responsable de realizar la actividad, solo en caso de que sea una actividad manual

O

Estado Plazo Indica si la actividad tiene o no un plazo Plazo Tiempo limite para realizar dicha actividad. Estado Envío Correo

Estado que indica si se envía o no correo de notificación.

Mensaje Opción proporcionada para que personalice el mensaje de notificación.

Documento Acciones.

Detalle de los caminos que puede tomar una actividad.

58

Nombre Descripción O

Proceso Proceso al que pertenece la actividad a la que se le esta definiendo la acción.

O

Actividad actividad a la que pertenece la acción. O Código Código de la acción. A Nombre Nombre de la acción. O Descripción Detalle sobre la acción Tipo: Tipo de acción, simple o con condición. O Condición Palabra contra la que se comparará en

tiempo de ejecución

Siguiente Actividad Actividad a ejecutarse después de realizar la actividad actual

O

Validaciones.

� En el documento de Proceso solo se declaran las

actividades que forman parte de él, más no la configuración

de cada una de ellas.

� La actividad inicial no es la primera actividad que se creo

sino la que tiene el estado que lo indique.

� Solo se pueden definir (configurar) actividades que se

hallan definido en el documento de Proceso.

� Las actividades pueden tener varias acciones.

� Una actividad puede tener varias acciones con y sin

condición.

� No podrá grabar procesos sin actividades.

� No podrá grabar actividades sin acciones.

59

� En caso de que el responsable de una actividad este

inactivo, la responsabilidad será del suplemente definido en

el rol responsable.

� En caso de que se venza el plazo de una actividad se

enviará una notificación al superior del rol responsable.

� No se puede eliminar un proceso que tenga actividades

definidas, para ello primero habrá que eliminar las

actividades que forman parte de él.

� No se puede eliminar una actividad que tenga acciones

definidas, para ello primero habrá que eliminar las acciones

que forman parte de ella.

� El orden en la definición del flujo deberá ser: primero definir

el Proceso, y luego sus tareas con actividades.

� Si la condición no se cumple la inconsistencia queda

registrada en el Log de errores.

4.10.4. Definición Base Aplicación.

Base sobre la que se ejecutan los procesos (para mayor detalle, consulte Base de datos de Aplicación - Pág. 29Figura 9. Ruta Condicionada Figura 9. Ruta Condicionada

). Esta compuesto por la plantilla del Motor de Workflow y el

documento Delegación.

60

Plantilla.

Datos necesarios y fundamentales para el funcionamiento del

Motor de Workflow.

Nombre Descripción O

Procesos Datos del proceso A Actividad Datos sobre la actividad actual: código,

nombre, responsable, plazo, etc. A

Acciones Listado de las acciones de la actividad actual.

A

Comentario Razón, observación, o comentario que le desee agregar antes de pasar a la siguiente actividad.

A

Log de errores Registro de los errores que ocurran a lo largo de la ejecución del trabajo, como por ejemplo alguna definición incorrecta.

A

Log Registro del camino que ha tomado el documento hasta su final.

A

Delegación.

Permite la delegación de una actividad.

Nombre Descripción O

Procesos Nombre del proceso A Actividad Nombre de la actividad A ID ID del documento a delegar A Responsable Rol del nuevo responsable O Observación: Comentario adicional Notificación: Indicar que significa si desea enviar o no

una notificación por correo.

61

BIBLIOGRAFIA

1. Tecnología Workflow. http://www.lcc.uma.es/~jlcaro/doctorado/Curso_Doctorado_Workflow_2004.pdf

2. Workflow y UML

http://www.willydev.net/descargas/articulos/general/WorkFlowUML.pdf 3. Workflow Reference Model, WfMC white paper, 1995.

http://www.wfmc.org.

4. La tecnología de trabajo en el contexto de la biblioteca digital, http://www.um.es/fccd/anales/ad05/ad0508.pdf.

5. Breve introducción a los Sistemas de workflow

http://mixtli.utm.mx/~resdi/breve_introduccion_a_los_sistemas_colaborativos.pdf.

6. Sistemas de tipo Workflow

www.dcc.uchile.cl/diplomado/charlas/Workflow.ppt.

7. Workflow http://www.ccee.edu.uy/ensenian/catsistc/docs/Workflow.pdf.

MANUAL DE USUARIO

I

INDICE GENERAL

1. MANUAL DE USUARIO................................................. 1

1.1. Introducción........................................................................................ 1

1.2. Base de Datos Organización.............................................................. 1

1.2.1. Objetivos...................................................................................... 1

1.2.2. Acerca de .................................................................................... 2

1.2.3. Pantalla principal ......................................................................... 3

1.2.4. Actualizar..................................................................................... 4

1.2.5. Nuevo Departamento................................................................... 5

1.2.6. Nuevo Rol.................................................................................... 7

1.2.7. Imprimir...................................................................................... 11

1.2.8. Eliminar...................................................................................... 12

1.2.9. Vistas......................................................................................... 13

1.3. Base de Definición de Procesos. ..................................................... 21

1.3.1. Objetivos.................................................................................... 21

1.3.2. Acerca de .................................................................................. 22

1.3.3. Pantalla principal de la aplicación.............................................. 23

1.3.4. Actualizar................................................................................... 24

1.3.5. Nuevo Proceso .......................................................................... 24

1.3.6. Eliminar...................................................................................... 30

1.3.7. Imprimir...................................................................................... 31

1.3.8. Vista........................................................................................... 32

1.3.9. Configuración Actividades ......................................................... 36

1.3.10. Configuración Acciones ........................................................... 44

1.3.11. Compilador de Proceso. .......................................................... 47

1.3.12. Documento de Configuración. ................................................. 49

1.4. Base de Aplicaciones. ...................................................................... 50

II

1.4.1. Objetivos.................................................................................... 51

1.4.2. Acerca de .................................................................................. 51

1.4.3. Pantalla principal ....................................................................... 52

1.4.4. Ingreso a la Base Aplicación. .................................................... 58

1.4.5. Imprimir...................................................................................... 60

1.4.6. Eliminar...................................................................................... 61

1.4.7. LogOut....................................................................................... 62

1.4.8. Como iniciar un trabajo.............................................................. 63

1.4.9. Delegar. ..................................................................................... 69

1.4.10. Simbología utilizada para los estados de los flujos de trabajo. 71

CONCLUSIONES............................................................. 75

RECOMENDACIONES..................................................... 76

ANEXOS........................................................................... 79

1

CAPÍTULO 1

1. MANUAL DE USUARIO

1.1. Introducción

Esta guía esta destinada a los Diseñadores de aplicaciones Lotus, que

usarán la aplicación WorkFlow Engine y tiene como finalidad

proporcionar la información necesaria para el manejo del Motor

Generador de Flujos o WorkFlow, aquí se le indicará paso a paso lo que

debe realizar para el uso exitoso de la aplicación.

1.2. Base de Datos Organización

Objetivos

� Registro de Departamentos

2

� Designar Roles a departamentos.

� Definir Roles responsables, suplentes y supervisores de

procesos.

� Calendarizar horarios de trabajo que se ajusten a su

entorno organizacional.

� Obtener acceso inmediato a roles durante el desarrollo de

los flujos de trabajo.

� Ver y modificar documento de configuración del WorkFlow.

1.2.1. Acerca de

Al ingresar a la base de datos de Organización

(WFE_Organización.ntf) se encontrara con la pantalla de

bienvenida como se muestra en la Figura 1. Donde podrá

Figura 1 – Pantalla de Bienvenida.

3

informarse de manera general acerca del funcionamiento de esta

base, sus pantallas, opciones y la información que se requiere

acerca de su organización para poner en producción el WorkFlow

Engine en su entorno organizacional.

1.2.2. Pantalla principal

Al ingresar a la aplicación se encontrará con la pantalla que indica

la Figura 2, la misma que es la pantalla inicial, desde la cual se

podrán alcanzar los objetivos citados.

Figura 2 – Pantalla principal de la aplicación.

������������������ ���������

��������������������

����������������������������������������������

����������������

4

Botones de Opciones Generales.- Mediante estos botones es

posible:

Botón Función que cumple

Actualiza la vista actual.

Permite crear un nuevo departamento.

Permite crear un nuevo rol, asignándolo a un departamento.

Permite imprimir los datos de la vista actual.

Elimina departamentos o Roles, dependiendo de ciertos criterios de integridad referencial.

A partir de ahora se detalla el funcionamiento, y pasos a seguir

para el manejo correcto y exitoso de la base Organización.

1.2.3. Actualizar

El botón Actualizarse usa en algunas pantallas, por ello a

continuación se detalla el funcionamiento del mismo. Le permitirá

refrescar las vistas para visualizar los últimos cambios realizados

en los documentos creados para definir los departamentos y roles

de su organización.

5

Figura 3. Definición de departamentos

1.2.4. Nuevo Departamento

Al dar clic en el botón Nuevo Departamento le presentará la

pantalla de la Figura 3, la cual le permitirá crear un nuevo

departamento.

Esta ventana cuenta

con los siguientes

campos:

Código: El de

código departamento es generado automáticamente y de forma

secuencial por la aplicación.

Nombre: Se especifica el nombre del departamento que desea

crear.

Descripción: Breve descripción del departamento, que podría ser

la función a la que se dedica el departamento.

6

Responsable: Es el responsable del departamento, este debe

estar registrado en el ACL (Access Control List).

En la parte inferior podrá visualizar una sección que indica los

datos de creación del departamento como son:

� Creador

� Fecha y Hora de creación

Esta ventana cuenta con una barra de botones de opciones, que

cumplen varias funciones como se muestra en la Figura 4.

Si el responsable que se elige para este nuevo departamento

esta asignado como responsable de otro departamento, la

aplicación no le permitirá, volver a registrarlo nuevamente.

Presentará la siguiente ventana de alerta.

Graba el nuevo departamento o los cambios realizados

Le permitirá imprimir los datos del

Sale y preguntará si desea grabar los cambios.

Figura 4. Botones de Opciones

7

1.2.5. Nuevo Rol

Este botón le permitirá visualizar la pantalla de la Figura 5, en la

cual se crearán los roles y a su vez se los asigna a

departamentos.

Figura 5. Definición de Roles

8

Figura 6 – Selección de Departamento.

Para mejor comprensión de esta pantalla se la ha sub dividido en

tres partes, de las cuales se irá detallando la función de cada

elemento de las mismas.

Empezaremos por la parte de Departamento que se muestra en la

Figura 6, la cual cuenta con dos campos:

Código: Este es el

código del

departamento, el cual

se visualizará al momento en que usted seleccione el

departamento donde desea crear el rol.

Nombre: Es el nombre del departamento que seleccionó de la

lista.

Usted no puede continuar creando el rol sin seleccionar el

departamento donde este se creará, la aplicación no se lo

permitirá y presentara el

siguiente mensaje de error.

La siguiente parte de

9

Figura 7 – Definición de Roles

Figura 5 representado

en la Figura 7, presenta

los siguientes campos:

Código: El de código de roles es generado automáticamente y de

forma secuencial por la aplicación.

Nombre: Nombre del rol que se desea crear.

Descripción: Breve descripción del rol.

Por último analizaremos el usuario Responsable del Rol, un

sustituto del rol en el supuesto de los casos que el responsable

principal se encuentre de vacaciones u otra actividad que le

impida temporaléate ejercer su rol. Si tanto responsable y

sustituto no cumplen con las tareas designadas existe un superior

el actuara como un supervisor de tareas para que el flujo se

desarrolle con total normalidad. Hay que considerar que la

relación persona rol es de uno a uno, es decir que un rol está

asignado a una persona.

La Figura 8 muestra los campos necesarios para asignar los

diferentes responsables.

10

Nombre: Nombre del

responsable del rol.

Estado: Este puede ser

Activo Inactivo, Como

se muestra en la Figura 9.

Si es activo todas las actividades en las que interviene el rol

activo podrán ser realizadas por

el responsable del rol. Si el rol

esta en un estado de inactivo,

todas las actividades en las que

interviene el rol inactivo

deberán ser realizadas por el

sustituto del rol.

Fecha de Inicio y Fecha Final de inactividad: Estos campos

Indica el tiempo en que un rol estará inactivo, luego de ese tiempo

un agente programado se encarga de volverlo automáticamente a

un estado activo.

Figura 8. Definición de responsables.

Figura 9. Activar o Inactivar roles.

11

Sustituto: Nombre del responsable sustituto del rol.

Superior: Nombre del supervisor del rol.

Si el nombre del responsable del rol ya pertenece a otro

departamento la aplicación no le permitirá guardar el documento

presentando el siguiente mensaje de alerta: “El nombre del

Responsable del rol ya ha sido asignado a un departamento”.

Si el nombre del responsable es igual al del sustituto o del

supervisor del rol, la aplicación no le permitirá guardar el

documento, presentando el siguiente mensaje “Los nombres del

Responsable y del Sustituto no deben ser iguales”.

1.2.6. Imprimir

Este botón es utilizado en

diferentes partes de la

aplicación y su función es

imprimir los datos de la

vista o pantalla actual,

para ello presenta la

12

ventana propia de Lotus Domino

1.2.7. Eliminar

El botón eliminar es utilizado en diferentes partes del sistema, en

esta parte le permitirá eliminar un rol o un departamento,

guardando siempre la integridad referencial como se muestra en

la Figura 10. Para conseguir eliminar algún documento de la vista

debe marcarlo primero.

Figura 10 – Eliminación de elementos de una vista.

13

1.2.8. Vistas

Las vistas son una parte muy importante de la aplicación, desde

aquí puede consultar información muy importante de su entorno

organizacional como son:

� Departamentos que se han creado.

� Roles por departamentos.

� Todo el personal

� Roles activos.

� Roles inactivos.

Vista de Departamentos:

Esta vista (Figura 11) le permitirá visualizar todos los

departamentos de su organización, los nombres de cada uno de

ellos, descripción, códigos, creador del departamento. Podrá:

� Actualizar la vista de los datos.

� Hacer doble clic en uno de los departamentos y modificar la

información.

� Eliminar un departamento, para esto seleccione el

departamento dando clic en la barra que esta a la izquierda

y luego presione el botón eliminar.

Tenga en cuenta que al eliminar información de las

vistas, estas manejan Integridad referencial.

14

Vista roles por Departamento:

Esta vista (Figura 12) le permitirá visualizar todos los roles

creados dentro de un departamento, Nombre del departamento,

los nombres de cada rol, código de departamento, código de rol,

descripción, creador del rol. Podrá:

� Actualizar la vista de los datos.

� Hacer doble clic en uno de los roles y modificar la

información.

� Eliminar un rol, para esto seleccione el rol dando clic en la

barra que esta a la izquierda y luego presione el botón

eliminar.

Figura 11 – Vista de departamentos.

15

Vista todo el personal:

Esta vista (Figura 13) le permitirá visualizar todo el personal de su

organización, Nombre del usuario, estado actual (puede se activo

o inactivo), el departamento al que pertenece, el rol que tiene

asignado, el sustituto del rol y supervisor del rol. Podrá:

� Actualizar la vista de los datos.

� Hacer doble clic en uno de los usuarios y modificar la

información.

� Eliminar un usuario, para esto seleccione el rol dando clic

en la barra que esta a la izquierda y luego presione el botón

eliminar.

Figura 12 – Vista de Roles por departamentos

Figura 13 – Vista de todo el personal.

16

Tenga en cuenta que al eliminar información de las vistas,

estas manejan integridad referencial.

Vista del personal activo e inactivo:

Estas vistas (Figura 14 Y 15) le permitirá visualizar todo el

personal activo e inactivo de su organización, Nombre del usuario,

estado actual (puede se activo o inactivo), el departamento al que

pertenece, el rol que tiene asignado, el sustituto del rol y

supervisor del rol.

Figura 14 – Vista de roles inactivos.

�����������������

Figura 15 – Vista de roles activos.

Roles activos.

17

La aplicación cuenta con una opción de

mantenimiento (Figura 16) donde se presenta

una pantalla con cuatro pestañas, las cuales

presentan opciones de configuración

necesarias para el correcto funcionamiento del

WorkFlow Engine, estas configuraciones son:

� Datos referentes a las tres bases de

datos que tiene el WorkFlow Engine.

� Datos de inicio de flujos (usted obtendrá mayor información

acerca de este punto en el manual de la base de datos

de Aplicación), es decir si la aplicación permitirá nombres

duplicados de los trabajo iniciados.

� El calendario de trabajo de su organización, es decir días

laborables y horas de inicio y finalización de jornadas de

trabajo.

� Datos de configuración de la base de historial, es decir

procesos finalizados.

Figura 16

18

Para obtener una mayor compresión de estas pestañas

procederemos a detallar cada una de ellas.

Pestaña: Base de Datos.

Esta pestaña cuenta con los siguientes campos:

Nombre: Nombre del servidor actual sobre el cual va ha correr

el WorkFlow.

Aplicación: Ruta y nombre de la base de datos de aplicaciones

donde el diseñador podrá crear sus formularios y correr los

flujos previamente diseñados, el nombre físico de esta base

es: WFE_Aplicación.nsf

Definición de Procesos: Ruta y nombre de la base de datos de

definición de procesos base donde el administrador del

WorkFlow Engine podrá crear sus flujos para posteriormente

ser puesto en producción en la base de datos de Aplicaciones,

el nombre físico de esta base es: WFE_DefProcesos.nsf.

19

Seleccione: Si, si desea nombres de trabajos repetidos y No para impedir nombres de trabajos repetidos.

Organización: Ruta y nombre de la base de datos de la

Organización donde el Administrador de WorkFlow podrá

definir los departamentos y roles por departamento de su

organización. El nombre físico de esta base es:

WFE_Organización.nsf.

Esta información se la debe ingresar una sola vez al

implementar el WorkFlow Engine en su organización, es

necesario que esta parte del WorkFlow Engine sea

configurado, de lo contrario el motor no podrá funcionar como

se espera.

Pestaña: Acerca del Proceso.-

Esta pestaña es para configurar si se permitirá o no que un

nombre de trabajo pueda tener nombres repetidos o no. Esta

opción prácticamente consiste en la repetir los nombres de los

inicios de flujos a los cuales les llamaremos trabajos.

20

Pestaña: Calendario

Esta opción le permitirá definir los días laborables que tiene su

organización, así como el horario de inicio y fin de jornada como

se ve en la Figura 17.

Esta información será muy necesaria para el WorkFlow Engine ya

que mediante estos parámetros se puede medir el tempo de los

plazos que tiene cada responsable de actividades para cumplir

sus obligaciones dentro de cualquier flujo.

Figura 17 – Configuración de calendario de trabajo.

21

Pestaña: Histórico (Archive).

Esta pestaña hace referencia a la base de datos WFE_Archive.nsf

diseñada como repositorio de flujos finalizados. Esta ventana

cuenta con los siguientes campos:

Histórico: Ruta y Nombre de la base de datos cuyo nombre

físico es: WFE_Archive.nsf.

Periodo de Migración: Se indica en unidades de días y

significa que cada n días un agente actuará, enviando los

procesos finalizados a la base de datos WFE_Archive.nsf.

1.3. Base de Definición de Procesos.

1.3.1. Objetivos

� Creación de nuevos proceso.

� Creación de nuevos proceso.

� Modificación de procesos.

� Configurar documentos de Actividades de procesos.

� Configurar acciones a tomar por cada actividad.

� Verificación de procesos.

22

1.3.2. Acerca de

Al ingresar a la base de datos WFE_DefProcesos.nsf se

encontrara con la pantalla de bienvenida como se muestra en la

Figura 18. Donde podrá informarse de manera general acerca del

funcionamiento de esta base, sus pantallas, opciones y la

información que se requiere acerca de los procesos que ha

definido para poner en producción el WorkFlow Engine en su

entorno organizacional.

Figura 18. Pantalla de Bienvenida.

23

1.3.3. Pantalla principal de la aplicación

Al ingresar a la aplicación se encontrará con la pantalla que indica

la Figura 19, la misma que es la pantalla inicial, desde la cual se

podrán alcanzar los Objetivos de la base WFE_DefProcesos.nsf

Botones de Opciones Generales. Mediante estos botones es

posible:

Botón Función que cumple

Actualiza la vista actual.

Permite crear un nuevo proceso.

Permite eliminar una acción, actividad o procesos, guardando siempre la integridad referencial.

Usuario Actual. Botones de Opciones Generales

Área de Visualización de datos en las vistas.

Pestañas de Vistas.

24

Permite imprimir los datos de la vista actual.

A partir de ahora se detalla el funcionamiento, y pasos a seguir

para el manejo correcto y exitoso de la base

WFE_DefProcesos.nsf.

1.3.4. Actualizar

El botón Actualizar se usa en algunas pantallas, por ello a

continuación se detalla el funcionamiento del mismo. Le permitirá

refrescar las vistas para visualizar los últimos cambios realizados

en los documentos de definición de sus procesos.

1.3.5. Nuevo Proceso

Al dar clic en este botón le presentará la pantalla de la Figura 20,

la cual le permitirá crear un nuevo proceso, ajustado a la función

que cumple el proceso que se desea crear. Esta pantalla cuenta

con múltiples opciones para la definición del proceso, las mismas

que conocerá paso a paso.

25

Estas Opciones

son:

� Procesos.

� Definición

de

Actividades.

� Configuraci

ón de

actividad

inicial.

Cuenta con dos secciones:

� Lista de Actividades.

� Datos de Creación.

Explicaremos cada una de ellas para que tenga el conocimiento y

pueda crear sus propios procesos.

Opción Procesos

Código: El código de proceso es generado automáticamente y

de forma secuencial por la aplicación.

Nombre: Nombre del proceso.

Figura 20 – Pantalla para creación de nuevos procesos.

26

Descripción: Descripción del proceso, es decir la función que

realiza.

Auditor: Persona encargada de vigilar que el proceso esté

funcionando adecuadamente. Adicionalmente tiene permisos

para delegar procesos donde el sea el auditor.

Nombre Formulario: Nombre del formulario predefinido por el

Diseñador de Lotus Domino. Para seleccionar su formulario y

asociarlo al proceso que esta definiendo presione la pestañita

lo cual le permitirá ver la pantalla que se muestra en la Figura

21.

En esta pantalla se muestran todos los formularios existentes

en la base de datos Aplicación.nsf.

Asegúrese que el

formulario que

selecciona, incluya el

Sub Formulario

embebido que hace referencia a un proceso que haya

definido.

Figura 21 – Lista de Formularios

27

Si no indica el nombre del proceso que desea crear aparecerá

el siguiente mensaje de alerta: “Debe escoger el formulario

con el cual trabajará”.

Al crear un nuevo formulario, para posteriormente asociarlo a

algún proceso; usted podrá ver la pantalla que se muestra en

la Figura 22, la cual le permitirá, seleccionar el

SFrmA_MasterSubForm, nombre que se le ha dado a este

subformulario.

No se debe preocupar al

pensar que en su

formulario se verán

todos los campos de

SFrmA_MasterSubForm,

ya que este es oculto

tanto para clientes Notes y clientes Web.

Opción: Definición de Actividades (Figura 23)

Código: El código actividad es generado automáticamente y

de forma secuencial por la aplicación cada vez que usted

presiona el icono para nueva actividad

Figura 22 – Selección del Subform Embebido

28

Figura 23 – Definición de las Actividades del proceso.

Nombre:

Nombre una de

las actividades

del proceso que

se esta

definiendo.

Luego de

escribir el

nombre de la actividad presione para registrar la actividad

en la lista de actividades que tendrá el proceso. Para quitar

una actividad de la lista, seleccione el nombre de actividad

que desea eliminar y presione .

Aquí se manejan dos notaciones como

se puede ver en la Figura 24 para

identificar una nueva actividad que se agrega al proceso y las

actividades que ya han sido registradas como grabadas en el

proceso que se esta definiendo.

Si usted olvido incluir una actividad del proceso que se esta

definiendo, añada el nombre de la nueva actividad al presionar

Figura 24. Notaciones

29

se antepondrá un asterisco a la nueva actividad indicando

que la misma no ha sido grabada aun, mientras que otras

tendrán un guión bajo indicando que la actividad esta grabada.

Opción Configuración de Actividad inicial (Figura 25).

Esta parte le permitirá configurar si cualquier usuario puede iniciar

un proceso una vez puesto en producción.

Presione:

� Si.- Si desea que cualquier usuario inicie un proceso.

� No.- Si no desea que cualquier usuario inicie un proceso.

Sección: Lista de Actividades.

Le permitirá ver todas las actividades que tiene actualmente el

proceso que esta definiendo. Visualizará: Código de actividad,

Nombre de la actividad, Código de Responsable, Descripción

de la actividad, como se muestra en la Figura 26.

Figura 25. Inicio de flujo.

Figura 26. Vista de Lista Actividades.

30

Sección: Datos de Creación.

Presenta el nombre del autor del proceso, la Fecha y la Hora

en que fue creado.

Finalmente esta pantalla cuenta con un sub menú de opciones

como se muestra en la Figura 27.

1.3.6. Eliminar

Graba el nuevo departamento o los cambios, si

se ha modificado el departamento.

Le permitirá imprimir los datos del departamento.

Vuelve a la pantalla principal.

Preguntará si desea grabar los

cambios. Figura 27 – Botones de Opciones

31

Este botón le permitirá eliminar un proceso, siempre y cuando

este no tenga actividades. También le permitirá eliminar

actividades siempre y cuando la actividad que desea eliminar no

tenga acciones definidas. Si desea eliminar las acciones de una

actividad, si es posible ya que estas no tienen documentos

relacionados.

1.3.7. Imprimir

Este botón es utilizado en diferentes partes de la aplicación y su

función es imprimir los datos de la vista o pantalla actual, para ello

presenta la ventana propia de Lotus Domino, que se muestra en

la Figura 28.

Figura 28 – Ventana Imprimir

32

1.3.8. Vista

Las vistas son una parte muy importante de la aplicación, desde

aquí puede consultar información muy importante de su entorno

organizacional como son:

� Todos los proceso definidos.

� Revisar Procesos.

� Ver las actividades por proceso.

� Ver las acciones que tiene cada actividad

� Documento de Configuración

Explicaremos cada una de las vistas y su función dentro de la

base de datos WFE_DefProcesos.nsf.

Vista de Procesos: �

Esta vista (Figura 29) le permitirá visualizar todos los proceso que

ha definido, el código de cada proceso, los nombres de cada uno

de ellos, descripción, códigos, creador del departamento. Podrá:

� Actualizar la vista de los datos.

� Hacer doble clic en uno de los procesos definidos y

modificar la información.

33

� Eliminar un proceso, para esto seleccione el departamento

dando clic en la barra que esta a la izquierda y luego

presione el botón eliminar.

Tenga en cuenta que al eliminar información de las

vistas, estas manejan Integridad referencial.

Figura 29 – Vista de procesos definidos.

34

Vista de Actividades:

Esta vista (Figura 30) le permitirá visualizar todas las actividades

categorizados por proceso podrá ver: Nombre del proceso, el

código de cada actividad, los nombres de las actividades de cada

proceso, responsable y descripción del proceso. Podrá:

� Actualizar la vista de los datos.

� Hacer doble clic en una de las actividades definidos y

modificar la información.

� Eliminar una actividad, siempre y cuando esta no tenga

acciones a tomar.

Figura 30 – Vista actividades por procesos definidos.

35

En el momento en que usted crea un proceso, define las

actividades que tendrá ese proceso y graba el proceso, la

aplicación crea un documento por cada nombre de actividad que

usted definió. Estos documentos usted los puede visualizar en la

vista que indica la Figura 13.

Vista de Acciones:

Esta vista (Figura 41) le permitirá visualizar todas las acciones

categorizados por procesos y actividades podrá ver: Proceso,

Actividad, el código de cada acción, nombre de las acciones,

responsable. Podrá:

� Actualizar la vista de los datos.

� Hacer doble clic en una de las acciones definidas y

modificar la información.

36

1.3.9. Configuración Actividades

Desde esta vista usted podrá ingresar a cada actividad y

configurar el flujo, al dar doble clic sobre una de los documentos

de actividades podrá:

Descripción: Escribir una breve descripción de la función de la

Actividad dentro del proceso.

Figura 41. Vista de Acciones categorizadas por actividades y proceso.

Lista de Procesos definidos.

Lista de Actividades que tienen los procesos.

Lista de acciones que tienen las actividades.

37

Indicar si se trata de una actividad inicial: Si es la primera

actividad que se realizará cuando se inicie un flujo presione el

check.

Nota: Si presiona check y otra actividad ha sido ya definida

cono inicial, esta se desmarcará y quedará definida como

inicial la actividad que está siendo configurada.

Indicar el tipo de actividad: Esta puede ser manual o

automática. Si es una actividad Manual significa que su actividad

necesitara la intervención de un usuario para poder pasar a otro

nivel de revisión como indica la Figura 31.

Como se aprecia en la Figura 31, esta parte de la configuración

de una actividad cuenta con tres partes muy importantes las

cuales son:

Figura 31 – Asignación de responsable a una actividad manual.

38

Responsable: Rol responsable de realizar una determinada tarea

dentro del flujo. Para asociar un rol responsable a esta actividad

presione el botón del campo Responsable para ubicar al rol que

ejecutara la actividad cuando el flujo ya se encuentre en

producción.

Plazo: Puede configurar una actividad Con plazo, esto le servirá

para llevar un mejor control del tiempo empleado por un rol

responsable en realizar una tarea que tiene pendiente. La unidad

mínima de tiempo empleada para este fin es día y la máxima

unidad de tiempo es el día. En el supuesto caso de que el plazo

de una actividad se venza, el auditor del proceso intervendrá para

que el rol responsable ejecute esas tareas atrasadas. Si no

desea aplicar un plazo a la actividad selecciones la opción Sin

Plazo. La actividad será atendida sin una fecha de vencimiento.

Figura 32 – Asignación de un agente a una actividad automática

Presione este botón para seleccionar el agente asociado a la actividad automática.

39

Figura 33 – Definición de acciones.

Si es una actividad Automática usted debe asociar la actividad a

un agente (Figura 32) que ejecutará una determinada actividad

cada n minutos. Este agente ya debe existir en la base de datos

Aplicaciones.nsf

Definir las acciones a tomar en una determinada actividad.-

Como se muestra en la Figura 33.

En esta parte de la configuración de la actividad definimos las

acciones que el usuario final tiene que tomar para cumplir su

actividad. Esta sección cuenta con los siguientes campos:

Código: El código de la acción es generado automáticamente

40

y de forma secuencial por la aplicación cada vez que usted

presiona el icono para nueva acción.

Nombre: Nombre una de las acciones de la actividad que se

esta configurando. Luego de escribir el nombre de una acción

presione para registrar la acción en la lista de acciones

que tiene la actividad. Para quitar una acción de la lista,

seleccione el nombre de la acción que desea eliminar y

presione .

Aquí se manejan dos notaciones como se

puede ver en la Figura 34 para identificar una

nueva acción que se agrega al proceso y las

acciones que ya han sido registradas como grabadas en el

proceso que se esta definiendo.

Si usted olvido incluir una acción de la actividad que se esta

definiendo, añada el nombre de la nueva acción al presionar

se antepondrá un asterisco a la nueva acción indicando que la

misma no ha sido grabada aun, mientras que otras tendrán un

guión bajo indicando que la acción esta grabada. Esta parte de las

Figura 34 - Notaciones

41

acciones tiene mucha similitud a la definición de actividades

dentro del proceso.

Notificar mediante envió de correo electrónico:

Configure el envío de notificación de correo cuando el rol

responsable de una actividad deba ejecutar alguna actividad, de

esta manera gane más eficiencia en el flujo de un proceso. La

Figura 35 muestra los campos siguientes:

Estado Correo: Si lo ubica en un estado activo, ocurrirá que

cada vez que una actividad vaya ha otra estación de trabajo,

notificará mediante un correo electrónico al rol responsable de

que tiene una actividad pendiente por realizar.

Mensaje de Correo: En este campo ubique el mensaje que

desea que le llega al rol responsable cada vez que tenga que

realizar una actividad del proceso que se esta definiendo.

Figura 35 – Configuración de envío de notificación vía e-mail.

42

Si no desea notificar la actividad al siguiente rol responsable

de una actividad selecciones el estado Inactivo de la Figura

35.

A medida que va creando las acciones de una actividad, usted

podrá ir visualizando todas las acciones que ya fueron

previamente creadas como se muestra en la Figura 36.

Luego tendrá que configurar cada acción de la actividad que es

está realizando, para lograrlo de doble clic en una de las acciones

de la vista de la Figura 36. y podrá ver la pantalla que se muestra

en la Figura 38.

E

s

Figura 36. Lista de acciones de la actividad que se esta configurando.

43

te formulario también cuenta con los respectivos datos de

creación de las acciones.

Luego de esta parte, el paso siguiente consiste en configurar cada

acción de cada actividad que definió.

Deberá de enlazar cada acción con el formulario siguiente o en el

caso de manejar acciones que funcionan como una bifurcación,

como por ejemplo:

L

Figura 37. Pantalla de definición de acciones de una actividad.

44

Acción Aceptar si es mayor a $1000 se dirige a la actividad de

código 3 si es menor igual a ese monto se dirige el flujo a la

actividad de código 4. Para esto existe un campo adicional dado

por el WorkFLow Engine, para cumplir con este objetivo de

definición de acciones que bifurcan en dos o más direcciones.

La Figura 37 muestra la pantalla que hemos estado explicando y

que le servirá para definir las acciones a tomar por cada actividad

del proceso que se esta definiendo.

1.3.10. Configuración Acciones

La Figura 38 muestra la pantalla de configuración de las acciones

que tiene una actividad.

Figura 38. Ventana de configuración de las acciones de una actividad.

Información del proceso y de la actividad de donde pertenece la acción que se va ha configurar.

Código de la acción y nombre de acción.

45

En esta parte es donde se definen los flujos de los procesos,

debido a que es en esta parte del Workflow Engine donde se

enlazarán las actividades.

Ha llegado el momento de enlazar cada actividad del proceso

mediante los documentos de acciones, los cuales dependiendo de

las acciones que el usuario debe tomar enlazará una actividad

con otra.

Se procederá a explicar paso a paso como deberá emplear estas

opciones de enlace de actividades.

Esta pantalla es muy fácil de configurar ya que los campos

requeridos son pocos. Estos son:

Descripción: Aquí usted escribirá una breve descripción de lo

que realizará la acción.

Tipo: Se refiere a los tipos de acciones que se pueden

configuran en WorkFlow Engine estas son:

� Simple

� Con condición

46

Si selecciona un tipo de acción Simple, esto significa que usted

indicará la siguiente actividad, para esto debe dar un clic en el

botón de selección que se muestra en la Figura 39.

Como puede ver en la Figura 39 se ha seleccionado la palabra

Final, esta palabra reservada por la aplicación, le permitirá indicar

el fin de un proceso esto puede darse en las siguientes acciones

posibles:

� Cancelar

� Denegar

� Terminar

� Anular

Si no es una acción finalizadora de proceso, seleccione una de las

actividades que tiene el proceso como se muestra en la Figura 40

dando clic en el botón de selección.

Figura 40 – Lista actividades siguientes.

Figura 39. Selección de la siguiente actividad o fin de proceso

Botón para Selección de actividades.

47

Para una mejor comprensión de la definición de acciones dentro

de una actividad y las actividades dentro de un proceso observe la

vista que se muestra en la Figura 41.

1.3.11. Compilador de Proceso.

Luego de crear su proceso, definir las actividades de su proceso

configurar cada actividad, definir las acciones que tendrá cada

actividad y configurar las acciones de cada actividad; es de

suponer que el proceso esta listo para ser puesto en producción,

usted debe ir a la vista de la Figura 42 donde podrá realizar la

revisión de sus procesos.

Figura 42. Vista de revisión de procesos.

48

Si un proceso no esta revisado, la vista le presentará un símbolo

el cual es un indicativo visual de que el proceso no ha sido

revisado, en caso contrario presentara el símbolo indicando

que el proceso esta listo para producción.

Para revisar un proceso de la vista siga los siguientes pasos:

1. Seleccione el proceso o procesos que desea verificar.

2. Presione el Botón: el cual iniciará la revisión

del o de los procesos seleccionador.

3. Esta revisión produce los siguientes mensaje de

notificación:

Indica que se va ha iniciar

la revisión del proceso

seleccionado, esto lo hará

uno a uno.

Este mensaje se presenta

cuando usted ha definido

un proceso y no ha definido

acciones para ninguna de

las actividades.

49

Este mensaje aparece

cuando se ha definido una

acción en un documento de

actividades y esta no se la

ha configurado o enlazado

con otra actividad siguiente.

Esta ventana aparece

cuando usted no ha

definido la actividad con la

que el flujo iniciará su

funcionamiento.

Este mensaje aparece

después de notificar un

problema en el flujo. El

proceso seguirá con el

símbolo.

Indica que el proceso esta

bien revisado y listo para

ser puesto en producción,

la columna Proc. Revisado

aparecerá con el símbolo.

1.3.12. Documento de Configuración.

La última opción que presenta la base de datos

WFE_DefProcesos.nsf es la de Doc. de Configuración que se

muestra en la Figura 43.

50

Esta opción funciona de la misma forma

que la ya definida en la base de datos

Organizacion.nsf, la razón por la que se

repite en las tres bases de datos del

WorkFlow engine es para facilitar la

configuración, ya que la configuración realizada en cualquiera de

ellas afecta a todas las otras bases de datos, facilitando la

configuración. Como se muestra en la Figura 44.

1.4. Base de Aplicaciones.

Esta es la única base que funciona en Notes y Web.

Figura 44. Documento de Configuración de las Bases del WorkFlow Engine

Figura 43.

51

Se le ha dado este nombre debido que es en esta base donde el

diseñador de Lotus Notes diseñará los formularios que estarán

asociados a un flujo en particular.

1.4.1. Objetivos

� Proporcionar una plantilla para la creación de formularios

asociados a un proceso.

� Registrar eventos por solicitud realizada.

� Proporcionar reportes que sirvan para toma de ciertas

decisiones administrativa y de control en el flujo.

� Interpretar y ejecutar flujos de procesos creados en la base

de datos de definición de proceso.

� Manejo de Delegaciones

� Ver y modificar documento de configuración del WorkFlow.

1.4.2. Acerca de

Al ingresar a la base de datos WFE_Aplicaciones.nsf se

encontrara con la pantalla de bienvenida como se muestra en la

Figura 45. Donde podrá informarse de manera general acerca del

funcionamiento de esta base, sus pantallas, opciones y la

información que se requiere acerca de los procesos que ha

52

Figura 46. Ventana de Inicio de sesión

definido para poner en producción el WorkFlow Engine en su

entorno organizacional.

Esta pantalla solo se muestra en Lotus Notes.

1.4.3. Pantalla principal

Al iniciar el trabajo con

WorkFlow Engine para

ejecutar sus procesos en el

ambiente Web mediante un

Browser el usuario deberá

Figura 45 – Pantalla de bienvenida

53

autenticarse ingresando su nombre de usuario y pass Word como

se puede observar en la Figura 46.

Posterior a esto se presentará la pantalla de principal del la base

de Aplicaciones donde podrá administrar sus procesos. La base

de datos de Aplicaciones del WorkFlow Engine está diseñada

para trabajar tanto en ambiente de Lotus Notes como en el

ambiente Web.

En esta base de datos usted creará sus formularios, luego de esto

definirá el flujo o camino lógico que seguirá su formulario. La

Figura 47 – Vista en diseño del sub formulario o embebido del WorkFlow Engine

Campo destinado a flujos condicionales e interacción con datos del formulario asociado a un flujo.

54

imagen que se presenta en la Figura 47 muestra el formulario

embebido que debe ser insertado a su formulario.

Este formulario embebido cuenta con varios campos que le

permiten la funcionabilidad de los flujos. Todos estos campos son

ocultos para el usuario final. Entre todos estos campos podemos

resaltar dos de ellos:

� CmpA_Condicion

� CmpA_NombreActividad

A continuación conocerá la utilidad que le dará el empleo de

estos campos.

Campo: CmpA_Condicion, A este campo usted le podrá

asignar un valor que indique el camino lógico que tendrá que

seguir el formulario diseñado, este campo esta directamente

relacionado con el flujo que diseño para su formulario. En la

Figura 48, podrá observar el evento donde puede programar

este campo.

El código que muestra para pantalla ampliada de la figura 4 es

en el lenguaje JavaScript. El código permite asignar la palabra

55

MayorA1000 y por el caso contrario MenorIgualA1000, esto

significa que cuando el usuario que usará su formulario

ingrese un valor en uno de los campos de su formulario,

mediante el evento onChange podrá darle el valor a este

campo condición y mediante la inteligencia del WorkFlow

Engine podrá tomar una decisión a partir de la información que

ingrese el usuario, de esta forma se asegura que los flujos

interactúan con los formularios.

Figura 48. Evento OnChange.

56

Figura 49. Configuración de acción con condición

Para cuando el flujo este en producción workFlow Engine

comparará las palabras y tomará el camino indicado a seguir.

La Figura 49 muestra

el documento de

configuración de la

acción donde se

definen una acción de

tipo condición usando

las palabras que se

indicaron anteriormente, se pueden observar las dos palabras:

MayorA1000 y MenorIgualA1000, empleadas cada una para

dirigir el flujo; si Workflow Engine al comparar una de las

palabras de su formulario con lo configurado y estas coinciden

el flujo seguirá a la actividad del código que se indica después

del igual.

Campo: CmpA_NombreActividad. Este campo le será muy útil

para ocultar ciertas secciones de su formulario, esto puede

darse en el caso de que usted desee que en alguna parte del

flujo se oculte una sección del formulario y en otra parte del

57

flujo este visible, el modo de empleo se da en las opciones de

ocultamiento de texto, como se muestra en la Figura 50 se

muestran la forma de usar este campo.

Como puede observar, solo basta con seleccionar la sección que

desea ocultar y aplicar las opciones de ocultamiento propias de

Lotus Domino, mediante la respectiva formula de ocultamiento,

que para este caso es: CmpA_NombreActividad=”Inicio de Flujo”,

lo cual significa, que cuando se llegue a ese nombre de actividad

se oculta la sección marcada de negro de la Figura 50.

Figura 50 – Empleo del campo CmpA_NombreActividad, para ocultar secciones.

58

1.4.4. Ingreso a la Base Aplicación.

Para iniciar la aplicación y ejecutar flujos de trabajo usted debe

escribir en la barra de direcciones del Browser los siguientes

datos separados por el slash (/).

Al escribir esto en la barra de direcciones del Browser aparecerá

la pantalla de autenticación de la Figura 46 y después de

autentificarse se presentara la pantalla por defecto de la base de

Aplicaciones del workFlow Engine.

Cabe mencionar que esta base fue diseñada para ejecutar sus

tanto en ambientes de Lotus Notes como en el ambiente Web.

Para cuestiones de explicación de este manual hemos tomado el

ambiente Web para indicarle paso a paso el uso del WorkFlow

Engine a través de la base de Aplicaciones, aunque las mismas

funciones, acciones, eventos, mensajes de alertas e información

al usuario que se presentan en el ambiente Web también se

presentan en el ambiente de Lotus Notes.

A partir de ahora se detalla el funcionamiento, y pasos a seguir

para el manejo correcto y exitoso de la base de Aplicaciones.

http://Servidor/Path/Base.nsf

59

Al ingresar a la aplicación se encontrará con la pantalla que indica

la Figura 51 y 52, la misma que es la pantalla inicial, desde la cual

se podrán alcanzar los Objetivos de la base de Aplicaciones.

Figura 51 – Pantalla principal -Base Aplicaciones en ambiente Web

Menú de trabajos y actividades.

Bienvenida al usuario actual.

Área de visualización de las actividades y trabajos.

Botones de Opciones.

Iniciar trabajo

60

Botones de Opciones Generales. Mediante estos botones es

posible:

Botón Función que cumple

Permite imprimir los datos actuales de la pantalla o vista.

Permite eliminar trabajos iniciados, siempre y cuando cuente con el rol [AdministradorWF]

Esta opción le permitirá cerrar la ventana actual para poder iniciar con un nuevo usuario

1.4.5. Imprimir

Figura 52 – Pantalla principal - Base Aplicaciones en ambiente Notes.

61

Este botón es utilizado en diferentes partes de la aplicación y su

función es imprimir los datos de la vista o pantalla actual, para

ello presenta la ventana

propia de Lotus Domino,

que se muestra en la Figura

53.

1.4.6. Eliminar

Este botón le permitirá eliminar un trabajo iniciado, siempre y

cuando usted cuente con el rol [AdminitradorWF] definido en el

ACL de cada una de las tres bases de datos del WorkFlow

Engine.

Si a un usuario se le ha asignado el rol antes dicho, podrá ver la

pantalla que se muestra en la Figura 54.

Figura 53 – Ventana Imprimir

62

Para eliminar un trabajo seleccione el trabajo que desea eliminar y

presione el botón eliminar.

1.4.7. LogOut.

Al dar clic en este

botón se presentara

la pantalla de alerta

que se muestra en

la Figura 55a seguido del mensaje que se puede ver en la Figura

55b

Figura 55a – Ventana de Alerta LogOut.

Figura 54 – Vista, solo visible para usuarios con el rol: [AdministradorWF]

63

����������������������������

1.4.8. Como iniciar un trabajo.

A un proceso que se ha iniciado, según conceptos de la

tecnología WorkFlow se los conoce como trabajos.

Existen dos posibilidades en las que usted puede iniciar un

trabajo:

1. Si el proceso puede ser iniciado por cualquier usuario.

2. Si en la definición de proceso usted esta autorizado para

iniciarlo. (Véase el manual de usuario - Definición de

proceso – Figura 25).

Para iniciar un trabajo, seleccione el

proceso que desea iniciar y escriba el

nombre que quiere darle a su proceso,

Figura 55b – Mensaje de Confirmación para un LogOut

64

como se muestra en la Figura 56 y presiones el botón iniciar.

Si el proceso que desea iniciar no esta en la lista de procesos,

significa que usted no ha realizado la respectiva revisión de su

proceso. Para mayor información acerca de este tema, consulte

con el manual de definición de procesos en la parte de Revisión

de procesos Figura 25. Luego de realizar la revisión de su

proceso, este aparecerá en la lista de procesos.

Cuando inicia un nuevo trabajo aparecerá en su pantalla el

formulario (Figura 57) que usted asocio con el proceso que

Figura 57. Pantalla del WorkFlow Engine, iniciando un proceso

65

seleccionó, cuando definió el flujo en la base de datos de

Aplicaciones.

Como puede ver en la Figura 57 hay un área que hemos

encerrado, la cual explicaremos paso a paso, la función de cada

parte.

En la Figura 58 podemos observar dos botones, el botón reclamar

solo aparecerá si usted es el responsable de ejecutar una

actividad del flujo, en caso contrario no aparecerá, otro caso en el

que este botón no aparece es cuando un flujo ha terminado.

El botón Salir sin grabar actividad, como su nombre lo dice sale

del formulario sin grabar la actividad.

Además se presenta información para el responsable de tareas

como:

� Actividad actual.

� Usuario actual.

� Responsable de la Actividad.

Figura 58 – Opciones para reclamar actividad y salir sin grabar.

66

Si el usuario de la sesión actual es igual al responsable de la

actividad, podrá reclamar la actividad, realizar cambios al

formulario del proceso y tomar decisiones sobre el flujo.

Cuando usted reclama una actividad, el WorkFlow Engine le

presenta las posibles acciones que usted puede tomara muy a

parte de lo que usted debe realizar sobre el formulario, como se

puede ver en la Figura 59.

A la izquierda se encuentran las posibles acciones a tomar y en la

derecha se encuentran los botones de acción que le permitirán

ejecutar la acción que seleccionó o guardar borrador, esta en el

caso de dejar un trabajo inconcluso en el formulario y desee

continuar después.

El campo comentario que se presenta, le permitirá emitir cualquier

observación que desee realizar acerca del formulario.

Figura 59 – Acciones a tomar, luego de reclamar una actividad.

67

Para que usted note la relación existente entre las bases de datos

de WorkFlow Engine, observe en el manual de Definición de

Procesos en la Figura 20, como las acciones que usted define

sobre una actividad se reflejan en el desarrollo de un flujo en esta

base.

Si usted presiona el botón Ejecutar Opción sin haber

seleccionado una acción a tomar, se le presentará el siguiente

mensaje de alerta: “No ha seleccionado ninguna acción.”.

Esta parte del formulario que se puede ver en la Figura 60,

pertenece al usuario, es decir que no depende cien por ciento del

WorkFlow Engine.

Log del proceso

Figura 60 – Formulario de usuario en tiempo de ejecución.

68

Seguido de esta parte se puede observar el log del proceso, el

mismo que registra cada acción tomada, responsable que ejecutó

la tarea, fecha y hora, observación que se hizo. Figura 61.

Es primordial que este subformulario este embebido en el

formulario que cree el Administrador del Workflow.

Mensajes de notificación de actividades pendientes

WorkFlow Engine ofrece la posibilidad de notificarle via E – Mail,

al siguiente responsable de una tarea que tiene pendiente de

realizar, presentándole un mensaje de aviso que se muestra en la

Figura 62.

Figura 61. Log del Proceso.

Figura 62 – Mensaje indicando que se notifica al siguiente responsable vía e- mail.

69

Para que active o desactive este tipo de notificaciones,

consulte el manual de la base de Definición de Procesos, en

la parte de Notificar mediante envió de correo electrónico y

observe la Figura 35.

Delegaciones de tareas a otros usuarios

WorkFlow Engine, le permite delegar actividades esto puede ser

en el caso de que exista una sobre carga de trabajos en una

estación de trabajo, por vacaciones de un responsable de tarea,

etc.

1.4.9. Delegar.

Este botón solo estará disponible para el Auditor del proceso, el

que tenga el rol [AdministradorWF] y para el responsable de la

actividad.

70

La Figura 63 muestra las opciones de delegación, esta pantalla

contiene campos que le informarán acerca del trabajo y de la

actividad del proceso que se va ha delegar. Así como campos

para elegir al rol a quien se le realizará la delegación.

Responsable: Nombre del Rol que se encargará de la

actividad.

Observación: Breve observación de la delegación.

Notificar por correo: Por medio de esto le indicará al

WorkFlow engine que envíe un correo de notificación al rol

que se le ha delegado la ejecución de una determinada

actividad.

Esta pantalla cuenta con dos botones:

Figura 63. Pantalla para realizar las delegaciones de actividades.

71

Presiones este botón para aceptar la delegación.

Presiones este botón para cancelar la delegación

1.4.10. Simbología utilizada para los estados de los flujos de trabajo

La figura 64 muestra los tres símbolos para representar el estado

de los flujos.

Podemos observar tres esferas de colores como se ve en el

siguiente cuadro:

Figura 64. Estado de los flujos de trabajos.

72

Símbolo Significado El Flujo de un proceso esta aun no ha

finalizado.

El Flujo de un proceso esta ejecutando una actividad automática.

El Flujo de un proceso esta aun ha finalizado.

Esta base de dato cuenta con varias vistas

categorizadas y no categorizadas, las cuales

le permitirán obtener reportes que le

servirán para toma de ciertas decisiones

administrativa y de control en el flujo.

Las divisiones mayores son:

Mis Trabajos Pendientes.- Disponible

para todos los usuarios. Mediante este

grupo de vistas usted podrá visualizar

sus trabajos Por:

� Procesos

� Actividades

� Fechas de Creación

� Autor

� Atrasados

� Todos

73

Mis Trabajos Iniciados.- Disponible para todos los usuarios.

Mediante este grupo de vistas usted podrá visualizar sus

trabajos Por:

� Procesos

� Actividades

� Fechas de Creación

� Atrasados

� Todos

Mis Trabajos Finalizados.- Disponible para todos los

usuarios. Mediante este grupo de vistas usted podrá visualizar

sus trabajos Por:

� Procesos

� Por Mes y Año

� Día

� Todos

Todos los trabajos.- Disponible para todos los usuarios.

Mediante este grupo de vistas usted podrá visualizar sus

trabajos Por:

� Procesos

74

� Por Mes y Año

� Autor

� Todos los atrasados

� Finalizados por procesos

� Finalizados por autor

� Finalizados por fecha

� Todos

75

CONCLUSIONES

1. Hay que tener en cuenta que nuestro Usuario final es el Administrador,

que debe tener conocimientos de Lotus, y es el que interactúa con el

motor de workflow porque por medio de él diseñará y automatizará el

flujo del proceso de la organización.

2. Los procesos que se definen electrónicamente en el motor deben ser

basados en la politica de la organización.

76

RECOMENDACIONES

3. Lo primero que debe hacer es grabar el documento de configuración, no

es necesario relizarlo en todas las bases puesto que al grabarlo en uno

ya que se graban y actualizan al mismo tiempo en las otras bases.

4. Es importante que todas las bases de WorkFlow Engine estén en el

mismo directorio.

5. Todas las bases tienen el rol [AdminitradorWF] bajo este rol

WorkFlow Engine identifica al usuario administrador y le otorga permisos

para modificar el documento de configuración de la base.

6. Es de suma importancia que los formularios creados para cada proceso

tengan embebida la plantilla del WorkFlow Engine y el subformulario

Log.

77

7. Procurar no usar nombres que inicien con las siglas WFE ni los

estándares citados en el manual técnico, estos identifican los elementos

propios del WorkFlow Engine.

8. De ser conveniente ubique la dirección que le da acceso a la página del

WorkFlow Engine para ejecutar y administrar sus procesos, como página

inicial o en las opciones de favorito.

78

79

ANEXOS

INSTALACIÓN Y CONFIGURACIÓN DE LOTUS DOMINO

SERVER

80

A continuación se detalla la instalación del Domino Server de Lotus utilizando

como plataforma el sistema operativo Windows 2003 Server:

Desempaquetar Archivos de Instalación del Servidor

Como primer paso se debe de

ejecutar el archivo para

desempaquetar el instalador

del servidor.

Estos archivos se

almacenarán por defecto en

una carpeta dentro del

directorio de configuración de

usuarios (documents and settings). Este proceso se muestra en la imagen de la

izquierda.

Una vez terminada la acción de

desempaquetar los archivos de instalación,

de manera automática se ejecutará el

archivo principal del instalador (setup.exe). Este comenzará a cargar en

memoria lo necesario para proseguir con el resto de la instalación.

81

Instalación de Servidor Domino

Una vez completado el 100%

de la pantalla anterior, se

mostrará una pantalla de

bienvenida. Esta pantalla hace

referencia a ciertos consejos

como es el caso de cerrar

todos los programas que se

estén ejecutando para evitar conflictos con archivos de sistema que se estén

utilizando. Además nos advierte de que este programa está protegido por las

leyes internacionales para evitar el uso de copias ilegales y distribuciones no

autorizadas. Procederemos a dar clic en el botón “Next”.

La siguiente pantalla que se

muestra es la licencia del

programa. Si se está de

acuerdo con los términos

especificados en ella,

procedemos a dar clic en el

botón “Yes”; caso contrario

daremos clic en el botón “No” y cancelaremos la instalación.

82

A continuación se presenta la

pantalla de la izquierda. Esta

nos pide ingresar datos

generales (un nombre y el

nombre de la compañía) que

son solo informativos para la

instalación, es decir no tiene

relación alguna con la configuración del servidor que se examinará en las

posteriores páginas.

Adicional, poseo la opción de poder configurar más de una instancia del

servidor en la misma PC Server. Es recomendable instalar un servidor por PC

Server. En caso de que sea absolutamente necesario crear varias instancias en

un mismo PC Server se recomienda un máximo de seis instancias.

Para continuar la instalación

daremos clic en el botón

“Next”.

Siguiendo con el proceso de

instalación, se mostrará la

pantalla con las rutas

83

destinos.

La primera ruta es para los archivos binarios necesarios para que el Servidor

Domino funcione correctamente.

La segunda ruta contendrá todos los datos que almacenará el servidor,

incluyendo las bases de datos que se instalarán al finalizar este proceso.

Por defecto las rutas serán asignadas a la partición principal del disco duro

maestro y primario.

Para continuar la instalación daremos clic en el botón “Next”.

Eligiendo el Tipo de Servidor.

Podemos observar en esta

pantalla que existen tres tipos

de instalaciones que puedo

realizar, es decir elegir el tipo

de servidor a instalar.

Domino Utility Server.- este

tipo de servidor provee

servicios de aplicación

84

(servidor de aplicaciones), pero no incluirá el servicio de soporte de mensajería.

Domino Messaging Server.- este tipo de servidor provee servicios de

mensajería (Mail Server), pero no incluirá los servicios de aplicaciones.

Domino Enterprise Server.- este tipo de servidor proveerá los servicios de

mensajería y aplicaciones, es decir es la combinación de las dos opciones

anteriores.

Para continuar la instalación daremos clic en el botón “Next”.

La siguiente pantalla nos

mostrará el nuevo grupo que

se creará para nuestro

servidor Domino dentro del

panel de programas ubicados

en el menú inicio.

Para continuar la instalación

daremos clic en el botón “Next”.

85

Seguido a lo anterior comenzará la instalación del servidor. Esperaremos hasta

que la barra de progreso de instalación se complete.

Finalizada la instalación se

mostrará la pantalla de la

izquierda, indicándonos que el

servidor a sido instalado de

manera satisfactoria en el PC

Server.

86

Configuración de Servidor Lotus Domino.

Terminada la instalación, podemos

iniciar la configuración del servidor

desde el menú de programas

como se muestra en la figura.

Como primer punto en la

configuración el servidor pregunta

de qué manera quisiera ejecutarlo

cada vez que lo inicie. Elegimos

alguna de las dos opciones:

� Como un servicio del sistema operativo

� Como una aplicación regular.

87

Además podemos elegir que siempre el servidor inicie al cargar el sistema

operativo. Esta pantalla se mostrará cada vez que iniciemos el servidor,

siempre y cuando no se encuentre chequeada la opción “Don’t ask me again”.

Una vez elegidas las opciones, para continuar, de clic en el botón “OK”.

Como siguiente

pantalla se mostrará

cargando de la interfaz

de configuración del

servidor.

Terminada de cargar la interfaz

de configuración del servidor se

mostrará una pantalla de

bienvenida, donde se permite

personalizar el tipo de letra que

se desea observar durante el

resto de la configuración.

88

Una vez elegida la opción o si desea continuar sin cambiar el tipo de letra, para

continuar, presione o de clic sobre el botón “Next”.

La siguiente pantalla de

configuración se muestra a la

izquierda. Aquí debemos elegir

si es el primer servidor que

instalaremos o si es una

instalación de servidor adicional.

Esta elección es a nivel de

dominio de Domino, es decir, si en mi ambiente Domino yo voy a instalar por

primera vez un servidor debo elegir la primera opción, caso contrario, si en mi

entorno Domino ya existe algún servidor instalado debo elegir la segunda

opción (servidor adicional).

Como siguiente paso en la

instalación ingresaremos el

nombre del servidor y una

descripción de este. Se

recomienda como norma que el

nombre que se ingrese sea el

mismo que del PC Servidor, y en

89

su descripción ingresar la actividad principal de este.

Si estuviera ejecutando una labor de restauración de un servidor ya existente,

puedo indicar la ruta del archivo de configuración del servidor que deseo

restaurar (Server.id) chequeando la opción de la parte inferior.

Luego de ingresar todos los datos, para continuar, demos clic en el botón

“Next”.

A continuación ingresaremos los

datos de configuración de la

organización. Ingresaremos su

nombre y una clave para el

certificador. Se recomienda

como norma que el nombre de la

organización no sea demasiado

extenso, en caso de serlo por favor abreviarlo.

Si estuviera ejecutando una labor de restauración de una organización ya

existente, puedo indicar la ruta del archivo de certificación de la organización

que deseo restaurar (Cert.id) chequeando la opción de la parte inferior. Si se

90

desea especificar una organización adicional deberá dar clic en el botón

“Customize”.

Para continuar con la instalación deberá dar clic sobre el botón “Next”.

Siguiendo con el proceso de

configuración, en esta pantalla

debemos de ingresar el nombre

de mi dominio Domino (Domino

domain Name).

Generalmente el nombre del

dominio de red de una organización suele coincidir con el nombre mismo de la

organización. Este hecho es recomendado como una buena práctica, es decir,

ingresar en el dominio Domino el nombre de la organización.

Se debe aclarar que el nombre de mi dominio Domino no tiene relación alguna

con la configuración del nombre de mi dominio de red, o sea, son

configuraciones muy distintas que no interfieren entre si.

Para continuar con la instalación deberá dar clic en el botón “Next”.

91

Ahora configuraremos el usuario

administrador del servidor.

Ingresaremos sus nombres y

apellido. También su clave de

administrador.

Se recomienda como norma

ingresar el segundo nombre o

middle siempre y cuando se cuenta con un estándar para estos.

Si quisiera respaldar su archivo identificador (ID) deberá chequear la primera

opción inferior. Este archivo por defecto se guardará con el nombre admin.id.

Si estuviera ejecutando una labor de restauración de un usuario administrador

ya existente, puedo indicar la ruta del archivo identificador del administrador

que deseo restaurar (admin.id) chequeando la segunda opción de la parte

inferior.

En la siguiente pantalla

elegiremos que servicios Web

quiero ofrecer con mi servidor.

Los que se muestran por defecto

92

son:

� Servicios http

� Clientes de correo

� Servicio de directorios.

Si deseo personalizar los servicios que Domino me ofrece puedo dar clic en el

botón “Customize”.

Para continuar con la instalación debo dar clic en el botón “Next”.

La siguiente pantalla nos

muestra la configuración de red

de Domino.

Automáticamente Domino me

detecta los puertos de red y los

protocolos que soporta para

comunicación.

Adicional a lo mostrado debo ingresar mi host name.

93

Yo puedo personalizar los puertos de red disponibles y el nombre del host

dando clic sobre el botón “Customize”.

Si no deseo personalizar estas opciones, para continuar debo dar clic en

“Next”.

Nota: si mi host namme no está especificado, Domino me advertirá de esto con

un Warning. Por defecto el host name viene en blanco, por lo que se

recomienda entrar a la opción “Customize”.

Al personalizar los settings de

red de Domino aparecerá la

siguiente pantalla.

Lo relevante en esta pantalla

es ingresar el fully qualified

Internet host name para el

servidor Domino. Este valor suele ser por lo general el nombre del PC servidor

unido al nombre del dominio de red.

Domino realmente no valida si el dominio existe o está disponible, solo evalúa

la estructura del nombre (por ejemplo el nombre del servidor unido con un

punto al del dominio de red).

94

Para continuar demos clic en el botón “OK”. Retornaremos a la pantalla anterior

en la cual, para continuar, debemos dar clic sobre el botón “Next”.

Como siguiente configuración

tenemos la de seguridad. Aquí lo

que especificaremos es, si

deseamos o no, permitir el

acceso de usuarios anónimos.

Esto lo elegimos chequeando o

no la primera opción.

Adicional a esto, la configuración de seguridad me permite crear un grupo de

administradores locales por cada base de datos (local domain admins). Esta

opción la habilito o no chequeando o dejando sin chequear la segunda opción.

Para finalizar el ingreso de

configuraciones, Domino me

muestra un resumen de las

mas relevantes como

verificación del administrador.

95

Si no estoy de acuerdo con lo especificado daremos clic en el botón “Back”

hasta llegar a la pantalla que deseemos volver a configurar.

Si me encuentro de acuerdo con lo mostrado en configuraciones, doy clic sobre

el botón “SETUP”.

Observaremos a continuación una pequeña

ventana que mostrará el progreso de la

configuración en el servidor.

Finalizada la configuración se mostrará la pantalla de la izquierda,

indicándonos que el servidor ha

sido configurado de manera

satisfactoria en el PC Server.

Para concluir demos clic sobre el

botón “Finish”.

Por segunda vez

iniciemos el servidor,

ya sea desde el menú

96

de programas o desde los servicios del sistema operativo. El servidor se

ejecutará como se muestra en la grafica.

97

98

INSTALACIÓN DE LOTUS CLIENT ADMINISTRATOR,

DESIGNER & NOTES

99

A continuación se detalla la instalación de los Lotus Clients utilizando como

plataforma el sistema operativo Windows 2003 Server:

Desempaquetar Archivos de Instalación de los Clientes

Como primer paso se debe

de ejecutar el archivo exe

para desempaquetar el

instalador de los clientes

Lotus.

Estos archivos se

almacenarán por defecto en

una carpeta dentro del directorio de configuración de usuarios (documents and

settings). Este proceso se muestra en la imagen anterior.

Una vez terminada la acción

de desempaquetar los

archivos de instalación, de

manera automática se

ejecutará el archivo principal

del instalador (setup.exe).

Este comenzará a cargar en

100

memoria lo necesario para proseguir con el resto de la instalación.

Instalación de los Clientes Lotus

Una vez completado el

100% de la barra de

progreso en la imagen

anterior, se mostrará una

pantalla de bienvenida. Esta

nos advierte de que este

programa está protegido por

las leyes internacionales

para evitar el uso de copias ilegales y distribuciones no autorizadas.

Procederemos a dar clic en el botón “Next”.

La siguiente pantalla que se

muestra es la licencia del

programa. Si se está de

acuerdo con los términos

especificados en ella,

procedemos a dar clic en “I

Accept…”; caso contrario

daremos clic en “I do Not…” y cancelaremos la instalación.

101

Siguiendo con el proceso de

instalación, se mostrará la

pantalla con las rutas

destinos.

La primera ruta es para los

archivos binarios necesarios

para que el Cliente Notes

funcione correctamente. La segunda ruta contendrá todos los datos que

almacenará el cliente, como son los listados o directorios de contactos. Por

defecto las rutas serán asignadas a la partición principal del disco duro maestro

y primario.

Para continuar la instalación daremos clic en el botón “Next”.

Eligiendo el Cliente Notes.

Podemos observar en esta pantalla que existen tres tipos de clientes a instalar,

es decir el cliente notes, el cliente Administrador y el cliente Designer.

Cliente Notes.- es el cliente que manejará el usuario final, en el podrá acceder

a aplicaciones y también a su cuenta de correo.

102

Cliente Administrador.- este será el cliente para el administrador del ambiente

Domino. En el administrará completamente la(s) bases de datos.

Cliente Designer.- este cliente será instalado a los usuarios desarrolladores de

aplicaciones Lotus.

Para continuar la instalación

daremos clic en el botón “Next”.

De inmediato se mostrará esta

pantalla. En ella podremos elegir

como programa predeterminado

de mensajería (email) al cliente

Notes.

Luego para comenzar la

instalación debemos dar clic

sobre el botón “Instalar”.

Seguido a lo anterior comenzará

la instalación del servidor.

Esperaremos hasta que la barra

103

de progreso de instalación se complete.

Finalizada la instalación se

mostrará la pantalla de la

izquierda, indicándonos que

el o los clientes han sido

instalados de manera

satisfactoria en el equipo.

Configuración de los Clientes Lotus Domino.

Terminada la instalación, podemos iniciar la configuración del

servidor desde el menú de programas, o desde los accesos

directos como se muestra en la figura.

En el caso de instalar mas de un cliente en una estación de trabajo, solo es

necesario configurar uno de ellos pues la configuración es general para todos

los clientes Lotus

104

Como primera pantalla se mostrará cargando la interfaz de configuración del

cliente.

La siguiente pantalla en el proceso de la configuración nos da la bienvenida y

nos detalla las posibles conexiones usando una LAN o una conexión por

MODEM. También nos detalla que podemos setear la conexión de proxies y de

tareasactividades de replicación.

Para continuar la

configuración daremos clic

en el botón “Next”.

Ingresaremos, en la pantalla

que se mostrará, los datos

del usuario y el servidor al

105

cual se desea conectar seguido por el carácter “/” y el nombre de la

organización.

Para conectarnos en ese momento podemos activar la opción de la parte

inferior “I want to connect to a Domino server”.

Para que se logre llegar al siguiente paso, se debe tener en cuenta que el

usuario con el que me estoy registrando debe estar registrado en el servidor

destino.

Para continuar la configuración daremos clic en el botón “Next”.

Si los datos ingresados

anteriormente son

correctos, el servidor

pedirá autenticar al usuario mediante su clave o “password”.

Para autenticar y continuar daremos clic en el botón “OK”.

Si deseamos configurar la

opción de mensajería

instantánea, debemos de

106

completar correctamente los datos que se muestran.

Para continuar la configuración daremos clic en el botón “Next”.

Adicional a lo ya

configurado, se puede elegir

configurar los servicios

adicionales del cliente como

son el servicio de

mensajería, configuración

de replicación para ruteo de

emails, entre otros.

Para continuar la configuración daremos clic en el botón “Next”.

Finalizada la configuración se mostrará la pantalla de la

izquierda, indicándonos que el cliente ha sido configurado

de manera satisfactoria en el PC cliente.

Para concluir demos clic sobre el botón “OK”.

Seguido a esto se mostrará la interfaz del cliente que hayamos ejecutado para

llenar los datos de configuración.

UNIVERSIDAD DE GUAYAQUIL

Facultad de Ciencias Matemáticas y Físicas

Carrera de Ingeniería en Sistemas

Computacionales

“Motor de Workflow”

TESIS DE GRADO

Previo a la obtención del Título de:

INGENIERO EN SISTEMAS COMPUTACIONALES

Autores:

Bone Conforme Samuel Santiago

Dimitrakis Morocho Clara Elaine

Montenegro Balarezo Carlos Luís

GUAYAQUIL – ECUADOR

Año: 2006

I

INDICE GENERAL

CAPÍTULO 1..................................................................... 1

1. MANUAL TECNICO ..................................................... 1

1.1. Estándares de Programación. .............................................................. 1

1.2. Base Organización. .............................................................................. 2

Framesets................................................................................................ 3

Frame ...................................................................................................... 3

Páginas.................................................................................................... 3

Formularios.............................................................................................. 4

Vistas..................................................................................................... 16

Agentes.................................................................................................. 30

Menú...................................................................................................... 31

Subformularios....................................................................................... 33

Campos ................................................................................................. 34

Acción.................................................................................................... 35

Librerías Script....................................................................................... 38

Imágenes ............................................................................................... 53

Otra Información .................................................................................... 54

1.3. Base de Definición de Procesos......................................................... 54

Framesets.............................................................................................. 54

II

Frame .................................................................................................... 55

Páginas.................................................................................................. 55

Formularios............................................................................................ 56

Vistas..................................................................................................... 69

Agentes.................................................................................................. 90

Menú...................................................................................................... 97

Subformularios....................................................................................... 98

Campos ............................................................................................... 101

Acción.................................................................................................. 102

Librerías Script..................................................................................... 103

Imágenes ............................................................................................. 116

Otra Información .................................................................................. 117

1.4. Base de Aplicación........................................................................... 117

Framesets............................................................................................ 117

Frame .................................................................................................. 117

Páginas................................................................................................ 118

Formularios.......................................................................................... 119

Vistas................................................................................................... 127

Agentes................................................................................................ 175

Menú.................................................................................................... 215

Subformularios..................................................................................... 218

Campos ............................................................................................... 226

III

Acción.................................................................................................. 227

Librerías Script..................................................................................... 228

Imágenes ............................................................................................. 246

1

CAPÍTULO 1

1. MANUAL TECNICO

1.1. Estándares de Programación.

Con la finalidad de facilitar la identificación de los recursos usados

en el proyecto, nos basamos en un estándar que a continuación

describimos:

� Empiezan con un prefijo que representan el tipo de recurso, en

la siguiente tabla se detalla los prefijos usados:

2

Recurso PrefijoBase de Dato WFEFrameset FrsFrame FrPage PgForm FrmView VstAgent AgOutline MenuSubform SFrmFields CmpAction AccScript Library ScrImage Img

� Le sigue una letra que representa la base a la que

corresponde el recurso, esta puede ser: “A” para la base de

Aplicación, “D” la base de definición de proceso y “O” la base

de Organización.

� Le precede un underscore (_).y luego va el nombre del

recurso.

Por ejemplo, el nombre del formulario que se encuentra en la base

de Organización y le permite definir un rol sería: FrmA_Roles

1.2. Base Organización.

Nombre: WFE_Organizacion Descripción: Repositorio para la estructura organizacional de la

empresa (departamentos y roles)

3

Título: Organización Roles: [AdministradorWF]

Framesets

Frs_main

Descripción: Es el front – end Está conformado por cinco frame: Fr_user, Fr_Titulo, Fr_menu, Fr_Principal, Fr_logo

Frame

Fr_user Elemento: Page Valor: PgO_User

Fr_Titulo

Elemento: Page Valor: PgO_Titulo

Fr_Menu

Elemento: Page Valor: PgO_Menu

Fr_Principal

Elemento: Vista Valor: VstO_Departamentos Default target: Fr_Principal

Fr_Logo

Elemento: Vista Valor: PgO_Logo

Páginas

pgO_Logo Gráfico del logo del software

pgO_menu Menú (Outline)

4

pgO_Titulo

Titulo de la Aplicación

pgO_User Usuario conectado

Formularios

FrmO_Configuracion Documento de configuración. Permite configurar: la ruta y nombre de las bases de datos, definición sobre el proceso, calendario de la organización y el manejo del Archive (Histórico)

Tipo: Documento Formula Título: “Doc. Config” Incluido en Menú

Compones No

Formulario Default: No Automáticamente

Refresca Campos: Si

Subcomponentes * Shared Field: CmpO_Titulo * SubForm: SFrmO_DBName Hotspot Tipo: Pop-up Tìtulo: Nombre ToolTipText: Nombre del Servidor Field CmpO_NombreSrv Tipo Dato: Texto Tipo Campo: Computado Formula:

CmpO_Servidor Hotspot Tipo: Pop-up Tìtulo: Aplicación ToolTipText: Nombre de la Base de Datos de

Aplicación

* Componentes compartidos o embebidos, el detalle de su código se encuentra en su respectiva sección.

5

Field CmpO_BDAplicacion Tipo Dato: Texto Tipo Campo: Editable Valor Default:

@If(@ThisValue = ""; ""; @ThisValue); Field CmpO_BDAplicacion_dir Tipo Dato: Texto Tipo Campo: Computado Formula:

CmpO_Path + CmpO_BDAplicacion; Hotspot Tipo: Pop-up Tìtulo: Definición Procesos: ToolTipText: Nombre de la base de datos de Definición

de Procesos Field CmpO_BDProcesos Tipo Dato: Texto Tipo Campo: Editable Valor Default:

@If(@ThisValue = ""; ""; @ThisValue); Field CmpO_BDProcesos_dir Tipo Dato: Texto Tipo Campo: Computado Formula:

CmpO_Path + CmpO_BDProcesos; Hotspot Tipo: Pop-up Tìtulo: Organización: ToolTipText: Nombre de la base de datos de

Organización Field CmpO_BDOrganizacion Tipo Dato: Texto Tipo Campo: Computado Valor Default:

@Right(CmpO_Base; @FileDir(CmpO_Base)); Field CmpO_ BDOrganizacion _dir Tipo Dato: Texto Tipo Campo: Computado Formula:

CmpO_Path + CmpO_BDOrganizacion; Hotspot Tipo: Pop-up Tìtulo: Permitir nombres duplicados: ToolTipText: Permitir o no crear instancias del proceso

con nombre duplicados

6

Field CmpO_PermiteDuplicado Tipo Dato: Dialogo Lista Tipo Campo: Editable Permite valores que

no están en la lista: No

Lista: Si|S No|N

Formula Valor default: “N” Field CmpO_DiasLab Tipo Dato: Check Tipo Campo: Editable Separador de Valores: Coma Lista de Valores: Domingo|1

Lunes|2 Martes|3 Miércoles|4 Jueves|5 Viernes|6 Sabado|7

Field CmpO_HoraInicio Tipo Dato: Fecha Tipo Campo: Editable Formato Hora: 21:42 ToolTip: Horario de Entrada Field CmpO_HoraSalida Tipo Dato: Fecha Tipo Campo: Editable Formato Hora: 21:42 ToolTip: Horario de Salida Field CmpO_BDArchive Tipo Dato: Texto Tipo Campo: Editable Formula Valor Default:

@If(@ThisValue = ""; ""; @ThisValue); Field CmpO_BDArchive _dir Tipo Dato: Texto Tipo Campo: Computado Formula:

CmpO_Path + CmpO_BDArchive; Field CmpO_Migracion Tipo Dato: Numero Tipo Campo: Editable Formato Numero: Sin decimales * Shared Action AccO_Grabar * Shared Action AccO_Cerrar

7

Código LotusScript (Globales)

Option Public Use "ScrO_FuncionesCompartidas"

(Formulario) FrmO_Configuracion OnLoad

@Command([ViewRefreshFields]) Sub Querysave(Source As Notesuidocument, Continue As Variant) Source.Refresh '-----------------VALIDACIONES CALENDARIZACION-------------------- If source.FieldGetText("CmpO_DiasLab")="" Then

Msgbox "Debe seleccionar los días laborables",,"Mensaje del Sistema"

continue=False Exit Sub End If If source.FieldGetText("CmpO_HoraInicio")="" Then

Msgbox "Debe ingresar el horario de inicio de labores",,"Mensaje del Sistema"

continue=False Exit Sub End If If source.FieldGetText("CmpO_HoraSalida")="" Then

Msgbox "Debe ingresar el horario de finalización de labores",,"Mensaje del Sistema"

continue=False Exit Sub End If

If source.FieldGetText("CmpO_HoraInicio") >= source.FieldGetText("CmpO_HoraSalida") Then

Msgbox "Debe volver a ingresar los horarios de labores",,"Mensaje del Sistema"

continue=False Exit Sub End If '---------------------------------------------------------------------------------------- '----------- VALIDACIONES HISTORICO------------------------------------- If Trim(source.FieldGetText("CmpO_Migracion"))="" Then

Msgbox "Debe ingresar el periodo de migración de archivos finalizados",,"Mensaje del Sistema"

continue=False Exit Sub End If '----------------------------------------------------------------------------------------

8

If (GrabaDocConfiguracion ("O", "D", source.FieldGetText("CmpO_BDProcesos_dir"))) Then

If (GrabaDocConfiguracion ("O", "A", source.FieldGetText("CmpO_BDAplicacion_dir"))) Then

continue = True Else continue = False End If Else continue = False End If End Sub

FrmO_Departamentos Definir los departamentos de la organización

Tipo: Documento Formula Título: @If(@IsNewDoc; "Nuevo Departamento"; CmpO_NombreDep); Incluido en Menú

Compones Si

Formulario Default: No Automáticamente

Refresca Campos: Si

Subcomponentes * Shared Field: CmpO_Titulo * SubForm: SFrmO_DBName Hotspot Tipo: Pop-up Título: Código: ToolTipText: Código del departamento. Se genera

automáticamente Field CmpO_CodigoDep Tipo Dato: Numero Tipo Campo: Computado Formato Numero: General Formula:

CmpO_CodigoDep Hotspot Tipo: Pop-up Título: Nombre: ToolTipText: Ingrese el nombre del departamento. Field CmpO_NombreDep

9

Tipo Dato: Texto Tipo Campo: Editable Hotspot Tipo: Pop-up Título: Descripción: ToolTipText: Ingrese una definición sobre el

departamento. Field CmpO_Descripcion Tipo Dato: Texto Tipo Campo: Editable Hotspot Tipo: Pop-up Título: Responsable: ToolTipText: Seleccione la persona responsable del

departamento. Field CmpO_ JefeDepartamento Tipo Dato: Dialogo Lista Tipo Campo: Editable Permite valores que

no están en la lista: No

Lista: Dialogo Address Book * SubForm: SFrmO_DatosCreacion * Shared Action AccO_Editar * Shared Action AccO_Grabar * Shared Action AccO_Print * Shared Action AccO_Salir

Código LotusScript (Globales)

Option Public Use "ScrO_FuncionesCompartidas"

(Formulario) FrmO_Departamentos

Sub Postopen(Source As Notesuidocument) Dim workspace As New NotesUIWorkspace Dim uidoc As NotesUIDocument Set uidoc = workspace.CurrentDocument If uidoc.IsNewDoc Then Source.EditMode=True If Trim(uidoc.FieldGetText("CmpO_CodigoDep"))="" Then

Call CodigoSiguiente ("VstO_Departamentos" ,"CmpO_CodigoDep")

End If

10

End If End Sub Sub Querysave(Source As Notesuidocument, Continue As Variant) If grabadep() Then continue=True Else continue=False End If End Sub Sub Queryclose(Source As Notesuidocument, Continue As Variant) Dim nombre As String nombre=Trim(source.FieldGetText("CmpO_NombreDep")) If nombre ="" Then source.Close Else End If End Sub

FrmO_Roles Definir los roles de los departamentos de la organización

Tipo: Documento Formula Título: @If(@IsNewDoc; "Nuevo Rol"; CmpO_ListaDep + "-" +

CmpO_NombreRol); Incluido en Menú

Compones Si

Formulario Default: No Automáticamente

Refresca Campos: Si

Subcomponentes * Shared Field: CmpO_Titulo * SubForm: SFrmO_DBName Hotspot Tipo: Pop-up Título: Código: ToolTipText: Código del departamento al que

pertenece el rol. Field CmpO_CodigoDep Tipo Dato: Texto

11

Tipo Campo: Computado Formula: REM {@If(CmpO_CodigoDep="";@Word(CmpO_ListaDep;"-

";1);CmpO_CodigoDep)}; word := @Word(CmpO_ListaDep; "-"; 1); @If(word = CmpO_ListaDep; CmpO_CodigoDep; word);

Hotspot Tipo: Pop-up Título: Nombre: ToolTipText: Seleccione el departamento al que

pertenece el rol. Field CmpO_ ListaDep Tipo Dato: Dialogo Lista Tipo Campo: Editable Permite valores que

no están en la lista: No

Lista: Servidor := @Name([CN]; @Subset(@DbName; 1));

Base := "\\" + @Left(@Subset(@DbName; -1); "\\") + "\\" + @Right(@Subset(@DbName; -1); "\\"); @DbColumn("":"NoCache";Servidor:Base;"VstO_Departamentos"; 6);

Formula de Validación de Entrada:

@If(@Trim(CmpO_ListaDep) = ""; @Failure("Seleccione un departamento de la lista"); @Success);

Hotspot Tipo: Pop-up Título: Código: ToolTipText: Código del rol. Se genera

automáticamente Field CmpO_CodigoRol Tipo Dato: Texto Tipo Campo: Computado Formula: @If(CmpO_CodigoRol = ""; CmpO_CodigoRol;

CmpO_CodigoRol); Hotspot Tipo: Pop-up Título: Código: ToolTipText: Ingrese el nombre del departamento. Field CmpO_ NombreRol Tipo Dato: Texto Tipo Campo: Editable Hotspot Tipo: Pop-up

12

Título: Descripción: ToolTipText: Ingrese una definición sobre el rol. Field CmpO_DescripcionRol Tipo Dato: Texto Tipo Campo: Editable Hotspot Tipo: Pop-up Título: Estado del Rol: ToolTipText: Seleccione el estado actual del rol. Field CmpO_EstadoRol Tipo Dato: Dialogo lista Tipo Campo: Editable Permite valores que

no están en la lista: No

Lista: Activo Inactivo

Formula Valor Default: “Activo” Field CmpO_ HizoCambios Tipo Dato: Texto Tipo Campo: Computado Formula: CmpO_HizoCambios Hotspot Tipo: Pop-up Título: Nombre: ToolTipText: Seleccione la persona responsable del

rol. Field CmpO_ ResponsableRol Tipo Dato: Dialogo Lista Tipo Campo: Editable Permite valores que

no están en la lista: No

Lista: Dialogo Address Book Formula de Validación

de Entrada:

@Name([Abbreviate]; CmpO_ResponsableRol); Hotspot Tipo: Pop-up Título: Estado: ToolTipText: Seleccione el estado del responsable del

rol. En caso de seleccionar "Inactivo" defina el rango de fecha en el que estará inactivo y la persona Sustituta

Field CmpO_ EstadoRespon

13

Tipo Dato: Dialogo lista Tipo Campo: Editable Permite valores que

no están en la lista: No

Lista: Activo Inactivo

Formula Valor Default: “Activo” Hotspot Tipo: Pop-up Título: Fecha de Inicio de Inactividad ToolTipText: Ingrese la fecha desde cuando estará

inactivo el rol Ocultar cuando: CmpO_EstadoRespon = "Activo"; Field CmpO_ FechaInactividad Tipo Dato: Fecha Tipo Campo: Editable Formato Fecha: 26/09/2006 Formula Valor Default: @Today Hotspot Tipo: Pop-up Título: Fecha Final de Inactividad: ToolTipText: Ingrese la fecha desde cuando estará

inactivo el rol Field CmpO_ FechaFinActividad Tipo Dato: Fecha Tipo Campo: Editable Formato Fecha: 26/09/2006g Formula Valor Default: @Today Formula de Validación

de Entrada:

@If(CmpO_FechaInactividad > CmpO_FechaFinActividad; @Failure("La fecha de inicio debe ser menor que la fecha final de inactividad"); @Success);

Hotspot Tipo: Pop-up Título: Sustituto: ToolTipText: Seleccione el sustituto del responsable

del rol. En caso de inactividad del responsable del rol, el sustituto actuará como responsable hasta que caduque el periodo de inactividad.

Field CmpO_ SustitutoRol Tipo Dato: Dialogo Lista Tipo Campo: Editable Permite valores que No

14

no están en la lista: Lista: Dialogo Address Book Formula Valor Default: CmpO_SustitutoRol Hotspot Tipo: Pop-up Título: Superior ToolTipText: Seleccione al superior o jefe del

responsable del rol. Field CmpO_ SupervisorRol Tipo Dato: Dialogo Lista Tipo Campo: Editable Permite valores que

no están en la lista: No

Lista: Dialogo Address Book Formula Valor Default: CmpO_SupervisorRol * SubForm: SFrmO_DatosCreacion * Shared Action AccO_Editar * Shared Action AccO_Grabar * Shared Action AccO_Print * Shared Action AccO_Salir

Código LotusScript (Globales) Option Public

Use "ScrO_FuncionesCompartidas" (Formulario) FrmO_Roles OnLoad

@SetField("CmpO_HizoCambios";"No") Sub Postopen(Source As Notesuidocument) Dim workspace As New NotesUIWorkspace Dim uidoc As NotesUIDocument Set uidoc = workspace.CurrentDocument If uidoc.IsNewDoc Then Source.EditMode=True If Trim(uidoc.FieldGetText("CmpO_CodigoRol"))="" Then

Call CodigoSiguiente ("VstO_Roles","CmpO_CodigoRol")

End If End If End Sub Sub Querysave(Source As Notesuidocument, Continue As Variant)

15

If grabarol () Then continue=True Else continue=False End If End Sub

(Field) CmpO_SustitutoRol Sub Onchange(Source As Field)

Dim workspace As New NotesUIWorkspace Dim uidoc As NotesUIDocument Set uidoc = workspace.CurrentDocument

'Si no es nuevo y cambia el sustituto, setea el campo CmpO_HizoCambios y luego verifica y cambiar

'que en la BD Aplicación que campos tienen este rol If Not uidoc.IsNewDoc & uidoc.FieldGetText("CmpO_EstadoRespon") = "Inactivo" Then

Call uidoc.FieldSetText ("CmpO_HizoCambios","Si") End If End Sub

(Field) CmpO_EstadoRespon Sub Onchange(Source As Field)

Dim workspace As New NotesUIWorkspace Dim uidoc As NotesUIDocument Set uidoc = workspace.CurrentDocument

'Si no es nuevo y cambia el estado del responsable, setea el campo CmpO_HizoCambios y luego verifica y cambiar

'que en la BD Aplicacion que campos tienen este rol If Not uidoc.IsNewDoc Then Call uidoc.FieldSetText ("CmpO_HizoCambios","Si") End If End Sub

(Field) CmpO_ResponsableRol Sub Onchange(Source As Field)

Dim workspace As New NotesUIWorkspace Dim uidoc As NotesUIDocument Set uidoc = workspace.CurrentDocument

'Si no es nuevo y cambia el responsable, setea el campo CmpO_HizoCambios y luego verifica y cambiar

'que en la BD Aplicacion que campos tienen este rol If Not uidoc.IsNewDoc Then Call uidoc.FieldSetText ("CmpO_HizoCambios","Si") End If End Sub

16

Vistas

VstO_Departamentos Listado de los departamentos creados.

Vista Default: Si Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT form = "FrmO_Departamentos"; Subcomponentes Columna 1 Titulo Columna: Departamento Formula Columna: CmpO_NombreDep Ancho: 15 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 2 Titulo Columna: Descripción Formula Columna: CmpO_ Descripción Ancho: 24 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ninguna Justificación: Izquierda Totales: No Columna 3 Titulo Columna: Código Formula Columna: CmpO_CodigoDep Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente

17

Justificación: Centrado Totales: No Columna 4 Titulo Columna: Creado por Formula Columna: CmpO_Autor Ancho: 17 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ninguna Justificación: Izquierda Totales: No Columna 5 Titulo Columna: Fecha creación Formula Columna: CmpO_FechaHora Ancho: 12 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ninguna Justificación: Izquierda Totales: No Columna 6 Titulo Columna: Código y Nombre de Dep. Formula Columna: @Trim(@Text(CmpO_CodigoDep)) + "-"

+ @Trim(@Text(CmpO_NombreDep)); Ancho: 17 caracteres Oculta: Si Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ninguna Justificación: Izquierda Totales: No * Shared Action AccO_Actualizar * Shared Action AccO_NuevoDpto * Shared Action AccO_NuevoRol * Shared Action AccO_Print * Shared Action AccO_Eliminar

VstO_DepartamentosJefes Listado de los departamentos creados.

18

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT form = "FrmO_Departamentos"; Subcomponentes Columna 1 Titulo Columna: Código Formula Columna: CmpO_CodigoDep Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrado Totales: No Columna 2 Titulo Columna: Departamento Formula Columna: CmpO_NombreDep Ancho: 15 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ninguna Justificación: Izquierda Totales: No Columna 3 Titulo Columna: Descripción Formula Columna: CmpO_ Descripción Ancho: 24 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ninguna Justificación: Izquierda Totales: No Columna 4 Titulo Columna: Creado por Formula Columna: CmpO_Autor Ancho: 17 caracteres

19

Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ninguna Justificación: Izquierda Totales: No Columna 5 Titulo Columna: Fecha creación Formula Columna: CmpO_FechaHora Ancho: 12 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ninguna Justificación: Izquierda Totales: No Columna 6 Titulo Columna: Código y Nombre de Dep. Formula Columna: @Trim(@Text(CmpO_CodigoDep)) + "-"

+ @Trim(@Text(CmpO_NombreDep)); Ancho: 17 caracteres Oculta: Si Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ninguna Justificación: Izquierda Totales: No Columna 7 Titulo Columna: Jefe Departamento Formula Columna: CmpO_JefeDepartamento Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ninguna Justificación: Izquierda Totales: No * Shared Action AccO_Actualizar * Shared Action AccO_NuevoDpto * Shared Action AccO_NuevoRol * Shared Action AccO_Print * Shared Action AccO_Eliminar

20

VstO_DepartamentosRoles Listado de los departamentos con sus roles.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT form = "FrmO_Roles"; Subcomponentes Columna 1 Titulo Columna: Estado Rol Formula Columna: CmpO_ EstadoRespon Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 2 Titulo Columna: Departamentos Formula Columna: CmpO_ListaDep Ancho: 10 caracteres Oculta: No Icono: Si Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ninguna Justificación: Izquierda Totales: No Columna 3 Titulo Columna: Roles Formula Columna: CmpO_ NombreRol Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ninguna Justificación: Izquierda Totales: No

21

* Shared Action AccO_NuevoDpto * Shared Action AccO_NuevoRol * Shared Action AccO_Eliminar

VstO_Personal Listado de las personas que tienen un rol asignado.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT form = "FrmO_Roles"; Subcomponentes Columna 1 Titulo Columna: Usuario Formula Columna: @Name([CN]; CmpO_ResponsableRol); Ancho: 17 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrado Totales: No Columna 2 Titulo Columna: Estado Formula Columna: @If(CmpO_EstadoRespon = "Activo"; 85;

86); Ancho: 10 caracteres Oculta: No Icono: Si Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ninguna Justificación: Centrada Totales: No Columna 3 Titulo Columna: Departamento Formula Columna: CmpO_ ListaDep Ancho: 10 caracteres Oculta: No Icono: No

22

Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrado Totales: No Columna 4 Titulo Columna: Rol Asignado Formula Columna: CmpO_ NombreRol Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrado Totales: No Columna 5 Titulo Columna: Supervisor Formula Columna: CmpO_ SupervisorRol Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrado Totales: No Columna 6 Titulo Columna: Sustituto Formula Columna: CmpO_ SustitutoRol Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrado Totales: No * Shared Action AccO_Actualizar * Shared Action AccO_NuevoDpto * Shared Action AccO_NuevoRol * Shared Action AccO_Print

VstO_PersonalActivo

23

Listado de las personas cuyo rol esta activo.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT form = "FrmO_Roles" & CmpO_EstadoRespon =

"Activo"; Subcomponentes Columna 1 Titulo Columna: Nombre Formula Columna: @Name([CN]; CmpO_ResponsableRol); Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 2 Titulo Columna: Departamento Formula Columna: CmpO_ListaDep Ancho: 10 caracteres Oculta: No Icono: Si Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 3 Titulo Columna: Rol Formula Columna: CmpO_ NombreRol Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ninguno Justificación: Izquierda Totales: No Columna 4 Titulo Columna: Estado

24

Formula Columna: CmpO_EstadoRespon Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrado Totales: No * Shared Action AccO_Actualizar * Shared Action AccO_NuevoDpto * Shared Action AccO_NuevoRol * Shared Action AccO_Print

VstO_PersonalInactivo Listado de las personas cuyo rol esta inactivo.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT form = "FrmO_Roles" & CmpO_EstadoRespon =

"Inactivo"; Subcomponentes Columna 1 Titulo Columna: Nombre Formula Columna: @Name([CN]; CmpO_ResponsableRol); Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 2 Titulo Columna: Departamento Formula Columna: CmpO_ListaDep Ancho: 10 caracteres Oculta: No Icono: Si Formato Numero: General

25

Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 3 Titulo Columna: Rol Formula Columna: CmpO_ NombreRol Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ninguno Justificación: Izquierda Totales: No Columna 4 Titulo Columna: Estado Formula Columna: CmpO_EstadoRespon Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrado Totales: No Columna 5 Titulo Columna: Fecha Inicio Formula Columna: CmpO_ FechaInactividad Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ninguno Justificación: Centrado Totales: No Columna 6 Titulo Columna: Fecha Fin Formula Columna: CmpO_ FechaFinActividad Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ninguno

26

Justificación: Centrado Totales: No * Shared Action AccO_Actualizar * Shared Action AccO_NuevoDpto * Shared Action AccO_NuevoRol * Shared Action AccO_Print

VstO_Roles Listado de los roles.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT form = "FrmO_Roles"; Subcomponentes Columna 1 Titulo Columna: Departamentos Formula Columna: CmpO_ListaDep Ancho: 13 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente, categorizada Justificación: Centrado Totales: No Columna 2 Titulo Columna: Cod. Dep. Formula Columna: CmpO_ CodigoDep Ancho: 6 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrada Totales: No Columna 3 Titulo Columna: Cod. Rol Formula Columna: CmpO_ CodigoRol Ancho: 6 caracteres

27

Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrada Totales: No Columna 4 Titulo Columna: Nombre del Rol Formula Columna: CmpO_ NombreRol Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrado Totales: No Columna 5 Titulo Columna: Descripción Formula Columna: CmpO_ DescripcionRol Ancho: 22 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrado Totales: No Columna 6 Titulo Columna: Responsable - Rol Formula Columna: CmpO_ ResponsableRol Ancho: 16 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrado Totales: No Columna 7 Titulo Columna: Sustituto – Rol Formula Columna: CmpO_ SustitutoRol Ancho: 17 caracteres Oculta: No Icono: No

28

Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrado Totales: No Columna 8 Titulo Columna: Supervisor – Rol Formula Columna: CmpO_ SupervisorRol Ancho: 16 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrado Totales: No * Shared Action AccO_Actualizar * Shared Action AccO_NuevoDpto * Shared Action AccO_NuevoRol * Shared Action AccO_Print * Shared Action AccO_Eliminar

VstO_TodosRoles Listado de los roles.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT form = "FrmO_Roles"; Subcomponentes Columna 1 Titulo Columna: Cod. Rol Formula Columna: CmpO_ CodigoRol Ancho: 6 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrado Totales: No

29

Columna 2 Titulo Columna: Nombre del Rol Formula Columna: CmpO_ NombreRol Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrada Totales: No Columna 3 Titulo Columna: Departamentos Formula Columna: CmpO_ ListaDep Ancho: 13 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrada Totales: No Columna 4 Titulo Columna: Cod. Dep. Formula Columna: CmpO_ CodigoDep Ancho: 6 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrado Totales: No Columna 5 Titulo Columna: Descripción Formula Columna: CmpO_ DescripcionRol Ancho: 22 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrado Totales: No Columna 6 Titulo Columna: Responsable - Rol

30

Formula Columna: CmpO_ ResponsableRol Ancho: 16 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrado Totales: No Columna 7 Titulo Columna: Sustituto – Rol Formula Columna: CmpO_ SustitutoRol Ancho: 17 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrado Totales: No Columna 8 Titulo Columna: Supervisor – Rol Formula Columna: CmpO_ SupervisorRol Ancho: 16 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrado Totales: No * Shared Action AccO_Actualizar * Shared Action AccO_NuevoDpto * Shared Action AccO_NuevoRol * Shared Action AccO_Print * Shared Action AccO_Eliminar

Agentes

AgO_VerificaInactividadRol Se encarga de setear como activo al rol si este ya cumplió con su periodo de inactividad.

Agente Compartido: Si

31

Estado: Activo Trigger: Calendarizado Intervalo: Diario Actuar sobre: Todos los documentos nuevos y

modificados desde la última ejecución. Código LotusScript (Globales) Option Public

Use "ScrO_AccesoOtrasBases" Sub Initialize

Dim session As New NotesSession Dim db As NotesDatabase Dim vw As NotesView Dim colecciondoc As NotesDocumentCollection Dim doc As NotesDocument Set db= session.CurrentDatabase Set vw=db.GetView("VstO_DepartamentosRoles") Set colecciondoc=vw.GetAllDocumentsByKey("Inactivo") If Not colecciondoc.Count=0 Then Set doc=colecciondoc.GetFirstDocument While Not (doc Is Nothing)

If doc.GetItemValue ("CmpO_EstadoRespon")(0) = "Inactivo" Then

If doc.GetItemValue ("CmpO_FechaFinActividad")(0) < Now Then

Call doc.ReplaceItemValue ("CmpO_EstadoRespon", "Activo") Call ActualizarBDApp (doc,False) Print "El agente modifico ha estado activo a "+ doc.GetItemValue("CmpO_ResponsableRol")(0) Call doc.Save(True, True)

End If End If Set doc=colecciondoc.GetNextDocument(doc)

Wend End If Print "Se ejecuto exitosamente el agente VerificaInactividadRol" End Sub

Menú

32

MenuO_outline Menú Principal

Entrada Organización Alias: No Nivel: 0 Tipo: Ninguno Frame: No Asignado Nunca usar imagen: Si Entrada Departamentos Alias: No Nivel: 1 Tipo: Elemento Vista Nombre: VstO_Departamentos Frame: Fr_Principal Nunca usar imagen: Si Entrada Roles y Departamentos Alias: No Nivel: 1 Tipo: Elemento Vista Nombre: VstO_ Roles Frame: Fr_Principal Nunca usar imagen: Si Entrada Estado del Personal Alias: No Nivel: 1 Tipo: Ninguno Frame: Ninguno Nunca usar imagen: Si Entrada Roles y Departamentos Alias: No Nivel: 2 Tipo: Elemento Vista Nombre: VstO_ Personal Frame: Fr_Principal Nunca usar imagen: Si Entrada Personal Activo Alias: No Nivel: 2 Tipo: Elemento Vista Nombre: VstO_ PersonalActivo Frame: Fr_Principal Nunca usar imagen: Si Entrada Personal Inactivo Alias: No Nivel: 2

33

Tipo: Elemento Vista Nombre: VstO_ PersonalInactivo Frame: Fr_Principal Nunca usar imagen: Si Entrada Mantenimiento Alias: No Nivel: 0 Tipo: Ninguno Frame: Ninguno Nunca usar imagen: Si Entrada Doc. de Configuración Alias: No Nivel: 1 Tipo: Acción Formula: @Command([EditProfile];

"FrmO_Configuracion"); Frame: Ninguno Nunca usar imagen: Si

Subformularios

SFrmO_DatosCreacion Datos de la creación de un documento, nombre y fecha de creación.

Incluir en lista de subformularios a insertar:

Si

Subcomponentes Field CmpO_ Autor Tipo Dato: Texto Tipo Campo: Computado cuando compone Formula: @V3UserName Field CmpO_ Autor Tipo Dato: Fecha Tipo Campo: Computado cuando compone Formula: @Created

SFrmO_DBName Información de la base de datos de la aplicación.

Incluir en lista de Si

34

subformularios a insertar:

Subcomponentes * Shared Field CmpO_Servidor * Shared Field CmpO_Base * Shared Field CmpO_Dominio Field CmpO_Path Tipo Dato: Texto Tipo Campo: Computado para mostrar Formula: @FileDir(CmpO_Base); * Shared Field CmpO_OrgUnit

Código LotusScript (Formulario) SFrmO_DBName Postmodechange

@Command([ViewRefreshFields]);

Campos

CmpO_Base Nombre de la Base de Datos.

Tipo Dato: Texto Tipo Campo: Computado Formula: "\\" + @Left(@Subset(@DbName; -1); "\\") + "\\" +

@Right(@Subset(@DbName; -1); "\\");

CmpO_Dominio Nombre del Dominio.

Tipo Dato: Texto Tipo Campo: Computado para mostrar Formula: @Domain

CmpO_OrgUnit

35

Nombre de la Unidad Organizacional.

Tipo Dato: Texto Tipo Campo: Computado. Formula: @Name([ToKeyword]; @UserName);

CmpO_Servidor Nombre del Servidor.

Tipo Dato: Texto Tipo Campo: Computado. Formula: @Name([CN]; @Subset(@DbName; 1));

CmpO_Titulo Titulo del Formulario.

Tipo Dato: Texto Tipo Campo: Computado. Formula: "Definición de:"

Acción

Acc_Actualizar Refresca la información de la pantalla.

LotusScript Sub Click(Source As Button)

Dim Workspace As New NotesUiWorkspace Workspace.ViewRefresh End Sub

AccO_Cerrar Botón para salir de la ventana actual.

Formula: @Command([Compose]; " FileCloseWindow");

AccO_Editar Botón para cambiar el documento a estado editable.

36

Formula: @Command([EditDocument])

AccO_Eliminar Botón para eliminar los documentos seleccionados de una vista.

LotusScript: Opciones

Use "ScrO_AccesoOtrasBases" Sub Click(Source As Button)

If Msgbox ("Desea eliminar los documentos seleccionados?",MB_YESNO+ MB_ICONQUESTION,"Mensaje del Sistema") = IDNO Then

Exit Sub End If Dim session As NotesSession Dim db As NotesDatabase Dim ws As NotesUIWorkspace Dim uivw As NotesUIView Dim vw As NotesView Dim nombre As String Dim doc As NotesDocument Dim colecciondoc As NotesDocumentCollection Dim i As Long Dim cont As Long Set session= New NotesSession Set db= session.CurrentDatabase Set ws= New NotesUIWorkspace Set uivw= ws.CurrentView nombre= uivw.ViewName Set vw= db.GetView(nombre) Set colecciondoc=uivw.Documents If nombre="VstO_Roles" Then

Dim msgError As String msgError = "" For i = 1 To colecciondoc.Count

Set doc= colecciondoc.GetNthDocument(i) cont = CuentaRolEnBDDefinicion (doc.CmpO_CodigoRol(0))

If (cont > 0) Then msgError = msgError+ Chr(13) + doc.CmpO_CodigoRol(0) + " - " + doc.CmpO_NombreRol(0)

37

Elseif (cont = 0) Then doc.RemovePermanently(False)

End If Next

If Not msgError = "" Then

msgError = "Los siguientes roles no se eliminaron porque están siendo usados en la definición de procesos:" _

+ Chr(13)+msgError Msgbox msgError,MB_ICONINFORMATION,"Mensaje

del Sistema" End If '--Revisa que los departamentos a eliminar no tengan roles creados, en caso de que tengan roles 'no eliminara el departamento

Elseif nombre="VstO_Departamentos" Then Dim vw_rol As NotesView Dim Coleccion_DocRol As NotesDocumentCollection Dim Nom_Dep As String Dim band As Boolean Set vw_rol = db.GetView("VstO_Roles") Set doc = colecciondoc.GetFirstDocument While Not (doc Is Nothing)

Nom_Dep=doc.CmpO_NombreDep(0) Set Coleccion_DocRol = vw_rol.GetAllDocumentsByKey (Nom_Dep)

If Coleccion_DocRol.Count>=1 Then band=1 End If Set doc=colecciondoc.GetNextDocument(doc)

Wend

If band Then Msgbox "Existe uno o mas departamentos con roles

asignados. No es posible eliminar",, "Eliminar" Exit Sub Else Call colecciondoc.RemoveAll(True) End If

End If Call vw.Refresh() ws.ViewRefresh

End Sub

AccO_Grabar Botón para grabar el documento actual.

38

Formula: @If(@Command([FileSave]);

@Do(@Prompt([OK];"Mensaje del Sistema";"Grabación Exitosa");@Command([FileCloseWindow]));

@Do(@StatusBar("Problemas al grabar");@Prompt([OK];"Mensaje del Sistema";"No se guardarán los cambios")))

AccO_NuevoDpto Botón para crear nuevo departamento.

Formula: @Command([Compose]; "FrmO_Departamentos");

AccO_NuevoRol Botón para crear nuevo rol.

Formula: @Command([Compose]; " FrmO_Roles");

AccO_Salir Botón para salir de la ventana actual.

Formula: @Command([Compose]; " FileCloseWindow");

AccO_Print Botón para imprimir.

Formula: @Command([FilePrint]);

Librerías Script

ScrO_AccesoOtrasBases Contiene procedimientos y funciones para acceder a las otras bases que conforman el Workflow.

LotusScript (Declaraciones)

39

Dim session As notessession Dim db As NotesDatabase Dim profile As NotesDocument Dim view As NotesView Dim dbDefProceso As NotesDatabase Dim docProceso As NotesDocument Dim docActividad As NotesDocument Dim tipoCliente As String %INCLUDE "LSCONST.LSS"

'Nombre: OpenDocPerfil 'Objetivo: Abre el documento de configuración (Profile) 'Input: 'Output: Sub OpenDocPerfil

If session Is Nothing Then Set session = New NotesSession End If If db Is Nothing Then Set db = session.CurrentDatabase End If If profile Is Nothing Then 'Documento de configuracion

Set profile = db.GetProfileDocument("FrmO_Configuracion") End If

End Sub

'Nombre: ActualizarBDApp 'Objetivo: Actualiza los nombres de los responsables o auditores del proceso que se encuentre en ' ejecución en la base de Aplicación 'Input: docRol As NotesDocument, documento del rol que se modifico ' envioAlerta As Boolean, true si desea enviar un mensaje de confirmación antes de actualizar Sub ActualizarBDApp (docRol As NotesDocument, envioAlerta As Boolean) Dim dbApp As NotesDatabase Dim collection As NotesDocumentCollection '-Accede a la base de aplicación '---------------------- OpenDocPerfil

40

'Abre base de Aplicaciones Set dbApp = session.GetDatabase (profile.GetItemValue

("CmpO_NombreSrv")(0),profile.GetItemValue ("CmpO_BDAplicacion_dir")(0))

If Not dbApp.IsOpen Then Msgbox "No se encuentra base " +

profile.GetItemValue("CmpO_NombreSrv")(0) + "\"+ profile.GetItemValue("CmpO_BDAplicacion_dir")(0),MB_ICONEXCLAMATION,"Mensaje del Sistema"

Exit Sub End If Dim nombreResponsable As String If docRol.CmpO_EstadoRespon(0) = "Activo" Then nombreResponsable = docRol.CmpO_ResponsableRol(0) Else nombreResponsable = docRol.CmpO_SustitutoRol(0) End If 'Filtro búsqueda de los trabajos que no hayan sido finalizados y

que tengan como responsable este rol searchFormula$ = {CmpA_CodRol = "} + docRol.CmpO_CodigoRol(0) + _

{" & @Trim (CmpA_NombreActividad) != "Final"} Set collection = dbApp.Search(searchFormula$, Nothing,0) If collection.Count > 0 Then If (envioAlerta) Then

answer% = Msgbox ("Existen " + Str(collection.Count ) + " trabajos en ejecución que tienen a este rol como Responsable."+Chr(13)+"Desea actualizarlos?", _

MB_YESNO+ MB_ICONQUESTION,"Mensaje del Sistema")

Else answer% = IDYES End If If answer% = IDYES Then Call collection.StampAll ("CmpA_Responsable"

,nombreResponsable) End If End If 'Filtro búsqueda de los trabajos que no hayan sido finalizados y

que tengan como auditor este rol searchFormula$ = {CmpD_CodAuditor = "} +

docRol.CmpO_CodigoRol(0) + _ {" & @Trim(CmpA_NombreActividad) != "Final"}

41

Set collection = dbApp.Search(searchFormula$, Nothing,0) If collection.Count > 0 Then If (envioAlerta) Then answer% = Msgbox ("Existen " + Str(collection.Count ) + "

trabajos en ejecución que tienen a este rol como Auditor."+Chr(13)+"Desea actualizarlos?", _

MB_YESNO,"Mensaje del Sistema") Else answer% = IDYES End If If answer% = IDYES Then Call collection.StampAll

("CmpD_AuditorProceso",nombreResponsable) End If End If End Sub 'Nombre: CuentaRolEnBDDefinicion 'Objetivo: Cuenta cuentos procesos definidos tienen el rol que recibe como parámetro en el campo ' responsable o auditor 'Input: codRol As String, código del rol a buscar en BD definicion de proceso Function CuentaRolEnBDDefinicion (codRol As String) As Long Dim dbApp As NotesDatabase Dim collection As NotesDocumentCollection Dim contador As Long '-Accede a la base de aplicación '---------------------- contador = -1 OpenDocPerfil 'Abre base de Aplicaciones Set dbApp = session.GetDatabase

(profile.GetItemValue("CmpO_NombreSrv")(0), profile.GetItemValue("CmpO_BDProcesos_dir")(0))

If Not dbApp.IsOpen Then Msgbox "No se encuentra base " +

profile.GetItemValue("CmpO_NombreSrv")(0) + "\" + profile.GetItemValue("CmpO_BDProcesos_dir")(0), MB_ICONEXCLAMATION,"Mensaje del Sistema"

Goto salir End If 'Filtro búsqueda de los procesos definidos que tengan este rol

como Auditor

42

searchFormula$ = {Form = "FrmD_Procesos" & CmpD_AuditorProceso = "} + codRol + {"}

Set collection = dbApp.Search(searchFormula$, Nothing,0) contador = collection.Count 'Filtro búsqueda de las actividades definidas que tengan este rol

como Responsable searchFormula$ = {Form = "FrmD_Actividades" &

CmpD_ResponsableAct = "} + codRol + {"} Set collection = dbApp.Search(searchFormula$, Nothing,0) contador = contador + collection.Count Salir: CuentaRolEnBDDefinicion = contador End Function

ScrO_FuncionesCompartidas Funciones y procedimientos

LotusScript Option Public

Use"ScrO_AccesoOtrasBases" (Declaraciones)

Dim s As notessession 'Dim db As notesdatabase Dim v As notesview Dim Doc As NotesDocument Dim Mayor As Integer Dim docAc As NotesUIDocument Dim Resultado_Verifica_Nombre As Boolean Dim Resultado_Verifica_Roles_Departamentos As Boolean Dim PerteneceAOrg As Boolean Dim Nom As String Dim Dominio As String

Sub CodigoSiguiente(NombreVst As String, NombreCmp As

String) Dim workspace As New NotesUIWorkspace Set docAc = workspace.CurrentDocument Set s= New notessession Set db=s.currentdatabase Set v=db.getview(NombreVst)

43

Set Doc= v.getfirstdocument Dim UltimoCod As Integer Mayor=0 Do Until Doc Is Nothing If NombreCmp="CmpO_CodigoRol" Then UltimoCod =Val(Doc.CmpO_CodigoRol(0)) End If If NombreCmp="CmpO_CodigoDep" Then UltimoCod =Val(Doc.CmpO_CodigoDep(0)) End If If UltimoCod >Mayor Then Mayor =UltimoCod End If Set Doc= v.getnextdocument(Doc) Loop Mayor=Mayor +1 Call docAc.FieldSetText(NombreCmp,Cstr(Mayor))

End Sub

Function Es_Numero(Letras As String) As Boolean Dim Valor As Integer If Letras ="0" Then

Es_Numero=True Exit Function End If Valor=Val(Letras) For x=1 To 9 If Valor=x Then Es_Numero=True Exit Function End If Next Es_Numero=False End Function

Sub SetearCampoRes (campoResponsable As String) Dim workspace As New NotesUIWorkspace Dim uidoc As NotesUIDocument Set workspace= New NotesUIWorkspace Set uidoc = workspace.CurrentDocument Call uidoc.FieldSetText(campoResponsable,"") End Sub

Sub SetearCampoSus Dim workspace As New NotesUIWorkspace Dim uidoc As NotesUIDocument Set workspace= New NotesUIWorkspace Set uidoc = workspace.CurrentDocument

44

Call uidoc.FieldSetText("CmpO_SustitutoRol","") End Sub

Sub SetearCampoSup Dim workspace As New NotesUIWorkspace Dim uidoc As NotesUIDocument Set workspace= New NotesUIWorkspace Set uidoc = workspace.CurrentDocument Call uidoc.FieldSetText("CmpO_SupervisorRol","")

End Sub Sub CodigoSiguienteDep Dim workspace As New NotesUIWorkspace Set docAc = workspace.CurrentDocument Set s= New notessession Set db=s.currentdatabase Set v=db.getview("VstO_Departamentos") Set Doc= v.getfirstdocument Dim UltimoCod As Integer Mayor=0 Do Until Doc Is Nothing UltimoCod =Val(Doc.CmpO_CodigoDep(0)) If UltimoCod >Mayor Then Mayor =UltimoCod End If Set Doc= v.getnextdocument(Doc) Loop Mayor=Mayor +1 Call docAc.FieldSetText("CmpO_CodigoDep",Cstr(Mayor)) End Sub 'Nombre: GrabaDocConfiguracion 'Objetivo: grabar el documento de configuración en otras bases de datos 'Input: inicialOri As String = Letra que identifica el nombre del campo origen ' inicialDes As String = Letra que identifica el nombre del campo destino ' nombreBase As String = Nombre de la base a la que se grabara el docu de configuración 'Output: Boolean = True: grabo exitosamente la información, False: problemas al grabar Function GrabaDocConfiguracion (inicialOri As String, inicialDes As String, nombreBase As String) As Boolean Dim session As NotesSession Dim db As NotesDatabase Dim otherProfile As NotesDocument

45

Dim profile As NotesDocument Dim workspace As New NotesUIWorkspace Dim uidoc As NotesUIDocument '---------------------------------------------------------------------------- Set session = New NotesSession Set db = session.CurrentDatabase Set uidoc = workspace.CurrentDocument Set profile = uidoc.Document '-------------------------------------------------------------------------------- Dim dbOther As NotesDatabase Set dbOther = session.GetDatabase

(profile.GetItemValue("Cmp"+inicialOri +"_NombreSrv")(0),nombreBase)

If Not dbOther.IsOpen Then Msgbox "No se encuentra base " +

profile.GetItemValue("Cmp"+inicialOri +"_NombreSrv")(0)+"\"+ nombreBase,MB_ICONEXCLAMATION,"Mensaje del Sistema"

GrabaDocConfiguracion = False Exit Function End If Set otherProfile = dbOther.GetProfileDocument("Frm" +

inicialDes +"_Configuracion") Call otherProfile.ReplaceItemValue("Cmp"+inicialDes

+"_NombreSrv",profile.GetItemValue("Cmp"+inicialOri +"_NombreSrv")(0))

Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_BDAplicacion",profile.GetItemValue("Cmp"+inicialOri +"_BDAplicacion")(0))

Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_BDAplicacion_dir",profile.GetItemValue("Cmp"+inicialOri +"_BDAplicacion_dir")(0))

Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_BDProcesos",profile.GetItemValue("Cmp"+inicialOri +"_BDProcesos")(0))

Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_BDProcesos_dir",profile.GetItemValue("Cmp"+inicialOri +"_BDProcesos_dir")(0))

Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_BDOrganizacion",profile.GetItemValue("Cmp"+inicialOri +"_BDOrganizacion")(0))

Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_BDOrganizacion_dir",profile.GetItemValue("Cmp"+inicialOri +"_BDOrganizacion_dir")(0))

Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_BDArchive",profile.GetItemValue("Cmp"+inicialOri +"_BDArchive")(0))

46

Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_BDArchive_dir",profile.GetItemValue("Cmp"+inicialOri +"_BDArchive_dir")(0))

Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_PermiteDuplicado",profile.GetItemValue("Cmp"+inicialOri +"_PermiteDuplicado")(0))

Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_DiasLab",profile.GetItemValue("Cmp"+inicialOri +"_DiasLab"))

Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_HoraInicio",profile.GetItemValue("Cmp"+inicialOri +"_HoraInicio")(0))

Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_HoraSalida",profile.GetItemValue("Cmp"+inicialOri +"_HoraSalida")(0))

Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_Migracion",profile.GetItemValue("Cmp"+inicialOri +"_Migracion")(0))

'Call profile.Save(True,False) If (otherProfile.Save(True,False)) Then GrabaDocConfiguracion = True Else GrabaDocConfiguracion = False End If End Function Function grabadep() As Boolean Dim ws As NotesUIWorkspace Dim uidoc As NotesUIDocument Dim doc As NotesDocument Dim CmpO_NombreDep As String Dim band As Boolean band=0 Set ws = New NotesUIWorkspace Set uidoc= ws.CurrentDocument CmpO_NombreDep = uidoc.FieldGetText("CmpO_NombreDep") If Trim(CmpO_NombreDep)="" Then Msgbox "Debe ingresar un nombre",,"CmpO_NombreDep" grabadep=0 'Continue=False Exit Function End If If uidoc.IsNewDoc Then Call CodigoSiguiente

("VstO_Departamentos","CmpO_CodigoDep") band=1

47

End If '-------------------------------------------------- Dominio = uidoc.FieldGetText("CmpO_OrgUnit") If uidoc.FieldGetText("CmpO_JefeDepartamento")="" Then Msgbox "Debe seleccionar una persona Responsable del

Departamento",,"Datos requeridos" grabadep=0 Exit Function End If Dim Es_CorrectoONo As Boolean '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Call VerificaNombre

(uidoc.FieldGetText("CmpO_JefeDepartamento"),"/",Dominio)

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If Resultado_Verifica_Nombre=False Then Msgbox "El nombre del Responsable que ha ingresado no es

válido",,"Dato incorrecto" Call SetearCampoRes ("CmpO_JefeDepartamento") grabadep=0 Exit Function End If '------Para validar que una persona no este en varios departamentos----- Call ValidaPersonaEnDepart

(uidoc.FieldGetText("CmpO_CodigoDep") ,uidoc.FieldGetText("CmpO_JefeDepartamento"))

If Resultado_Verifica_Roles_Departamentos=False Then Msgbox "El nombre del Responsable del departamento ya ha

sido asignado a otro departamento" ,,"Dato incorrecto" Call SetearCampoRes ("CmpO_JefeDepartamento") grabadep=0 Exit Function End If 'Call uidoc.Save() 'Call uidoc.Refresh() 'Call uidoc.Save() 'If band Then ' Msgbox "El departamento "+CmpO_NombreDep+" ha sido

creado con el código "+Cstr(uidoc.FieldGetText("CmpO_CodigoDep")),,"Nuevo Departamento"

'Else ' Msgbox "El departamento "+CmpO_NombreDep+" ha sido

modificado correctamente",,"Departamento

48

"+CmpO_NombreDep 'End If 'Call uidoc.Close(True) grabadep=1 End Function Function grabarol() As Boolean '-------------------------------------------------------------------------------- Dim workspace As New NotesUIWorkspace Dim uidoc As NotesUIDocument Set uidoc = workspace.CurrentDocument Dim band As Boolean band=0 '----------------------------------------------------------------------------------------- 'CpoO_ResponsableRol 'CpoO_SustitutoRol 'CpoO_SustitutoRol '------------------------------------------------------------------------------------------- Nom=uidoc.FieldGetText("CmpO_ResponsableRol") 'Dominio = uidoc.FieldGetText("CmpO_Dominio") Dominio = uidoc.FieldGetText("CmpO_OrgUnit") '-------------------------------------------------------------------------------------------------------------- Dim x As Integer Dim NombreDepartamentom,NombDep As String NombreDepartamento =Space(0) NombDep=Trim(uidoc.FieldGetText("CmpO_ListaDep")) For x=Len(NombDep) To 1 Step -1 If Mid(NombDep,x,1)<>"-" Then NombreDepartamento = Mid(NombDep,x,1) +

NombreDepartamento Else Exit For End If Next Call uidoc.FieldSetText("CmpO_ListaDep",

NombreDepartamento ) '-------------------------------------------------------------------------------------------------------------- If uidoc.FieldGetText("CmpO_NombreRol")="" Then Msgbox "Debe llenar el nombre del Rol",,"Datos requeridos" grabarol=0 Exit Function End If 'If uidoc.FieldGetText("CmpO_DescripcionRol")="" Then ' Msgbox "Debe llenar la descripción del Rol",,"Datos

requeridos" ' Exit Sub

49

'End If '-------------------------------------------------------------------------------------------------------------- If uidoc.FieldGetText("CmpO_ResponsableRol")="" Then Msgbox "Debe llenar el campo del Responsable del

Rol",,"Datos requeridos" grabarol=0 Exit Function End If Dim Es_CorrectoONo As Boolean '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Call VerificaNombre

(uidoc.FieldGetText("CmpO_ResponsableRol"),"/",Dominio) '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If Resultado_Verifica_Nombre=False Then Msgbox "El nombre del Responsable que ha ingresado no es

válido" ,,"Dato incorrecto" Call SetearCampoRes ("CmpO_ResponsableRol") grabarol=0 Exit Function End If '--------Para validar que una persona no este en varios departamentos--------- Call ValidaPersonaEnDepart

(uidoc.FieldGetText("CmpO_CodigoDep"),uidoc.FieldGetText("CmpO_ResponsableRol"))

If Resultado_Verifica_Roles_Departamentos=False Then Msgbox "El nombre del Responsable del rol ya ha sido

asignado a un departamento",,"Dato incorrecto" Call SetearCampoRes ("CmpO_ResponsableRol") grabarol=0 Exit Function End If '------------------------------------------------------------------------------------------------------------ '-------------------------------------------------------------------------------------------------------------- '-------------------- If uidoc.FieldGetText("CmpO_SustitutoRol") <> "" Then Call VerificaNombre

(uidoc.FieldGetText("CmpO_SustitutoRol"),"/",Dominio) If Resultado_Verifica_Nombre=False Then Msgbox "El nombre del Sustituto que ha ingresado no es

válido",,"Dato incorrecto" Call SetearCampoSus grabarol=0 Exit Function

50

End If Call ValidaPersonaEnDepart

(uidoc.FieldGetText("CmpO_CodigoDep"),uidoc.FieldGetText("CmpO_SustitutoRol"))

If Resultado_Verifica_Roles_Departamentos=False Then Msgbox "El nombre del Sustituto del rol ya ha sido

asignado a un departamento",,"Dato incorrecto" Call SetearCampoRes ("CmpO_ResponsableRol") grabarol=0 Exit Function End If End If '-------------------- If uidoc.FieldGetText("CmpO_SupervisorRol")<>"" Then Call VerificaNombre

(uidoc.FieldGetText("CmpO_SupervisorRol"),"/",Dominio)

If Resultado_Verifica_Nombre=False And uidoc.FieldGetText("CmpO_SupervisorRol")<>"" Then

Msgbox "El nombre del Supervisor que ha ingresado no es válido",,"Dato incorrecto"

Call SetearCampoRes ("CmpO_ResponsableRol") grabarol=0 Exit Function End If End If '---------------------------------------------------------------------------------------------------------------------------------------------------------------- If Trim(uidoc.FieldGetText("CmpO_SustitutoRol"))<>"" And

Trim(uidoc.FieldGetText("CmpO_SupervisorRol"))<>"" Then If uidoc.FieldGetText("CmpO_SustitutoRol") =

uidoc.FieldGetText("CmpO_SupervisorRol") Then Msgbox "Los nombre del Sustituto y del Supervisor del Rol

no deben ser iguales",,"Dato incorrecto" grabarol=0 Exit Function End If End If '******************************************************************************************************* If uidoc.FieldGetText("CmpO_ResponsableRol")=

uidoc.FieldGetText("CmpO_SustitutoRol") Then Msgbox "Los nombre del Responsable y del Sustituto del Rol

no deben ser iguales",,"Dato incorrecto" grabarol=0 Exit Function

51

End If '******************************************************************************************************* If uidoc.FieldGetText("CmpO_ResponsableRol")=

uidoc.FieldGetText("CmpO_SupervisorRol") Then Msgbox "Los nombre del Responsable y del Supervisor del

Rol no deben ser iguales",,"Dato incorrecto" grabarol=0 Exit Function End If '-------------------------------------------------------------------------------------------------------------- If uidoc.IsNewDoc Then Call CodigoSiguiente("VstO_Roles","CmpO_CodigoRol") band=1 Else If uidoc.FieldGetText("CmpO_HizoCambios") = "Si" Then Call ActualizarBDApp (uidoc.Document,True) Call uidoc.FieldSetText("CmpO_HizoCambios","No") End If End If grabarol=1 End Function Sub VerificaNombre(NombreUsuario As String, Separador As String,Dominio As String ) Dim Cuentos_Hay As Integer Dim Chara As String Separador =Trim(Separador ) Cuentos_Hay=0 For x=1 To Len(NombreUsuario) Chara =Mid(NombreUsuario,x,1) If Chara=Separador Then Cuentos_Hay=Cuentos_Hay+1 If x=1 Or x=Len(NombreUsuario) Then Resultado_Verifica_Nombre =False Exit Sub End If End If Next x Call VerificaNomPerteneceAOrg(Trim(NombreUsuario),

Trim(Dominio )) If PerteneceAOrg=True Then If Cuentos_Hay>1 Then Resultado_Verifica_Nombre =False Elseif Cuentos_Hay=1 Then

52

Resultado_Verifica_Nombre =True Else Resultado_Verifica_Nombre =False End If Else Resultado_Verifica_Nombre =False End If End Sub Sub ValidaPersonaEnDepart(CodigoActualDep As Integer, Persona As String) Dim Sess_VerificaNom As notessession Dim BaseAct As notesdatabase Dim VistaRoles As notesview 'Dim Doc As NotesDocument Dim CodigoDep As Integer Dim Usuario As String '------------------------------------------------------------- Dim MyDocAc As NotesUIDocument Dim WorkSp As New NotesUIWorkspace Set WorkSp = New NotesUIWorkspace Set MyDocAc = WorkSp .CurrentDocument '------------------------------------------------------------- 'Verifica que la persona responsable del rol no este en un rol de

otro departamento Set Sess_VerificaNom = New notessession Set BaseAct =Sess_VerificaNom.CurrentDatabase Set VistaRoles =BaseAct.GetView("VstO_Roles") Set Doc= VistaRoles.GetFirstDocument Do Until Doc Is Nothing CodigoDep =Val(Doc.CmpO_CodigoDep(0)) Usuario =Doc.CmpO_ResponsableRol(0) If CodigoDep <>CodigoActualDep And Persona = Usuario

Then Resultado_Verifica_Roles_Departamentos =False Exit Sub End If Set Doc= VistaRoles.getnextdocument(Doc) Loop '----------------------------------------- 'Ahora verifica que esa persona no sea jefe de otro

departamento Set Sess_VerificaNom = New notessession Set BaseAct =Sess_VerificaNom.CurrentDatabase Set VistaRoles =BaseAct.GetView("VstO_Departamentos") Set Doc= VistaRoles.GetFirstDocument

53

Do Until Doc Is Nothing CodigoDep =Val(Doc.CmpO_CodigoDep(0)) Usuario =Doc.CmpO_JefeDepartamento(0) If CodigoDep <>CodigoActualDep And Persona =Usuario

Then Resultado_Verifica_Roles_Departamentos =False Exit Sub End If Set Doc= VistaRoles.getnextdocument(Doc) Loop Resultado_Verifica_Roles_Departamentos =True End Sub Sub VerificaNomPerteneceAOrg(NombreUs As String , Dominio As String) For x=1 To Len(NombreUs ) If Mid(NombreUs ,x,Len(Dominio))=Dominio Then PerteneceAOrg=True Exit Sub End If Next PerteneceAOrg=False End Sub

Imágenes

Background_organization_1024.jpg Background para los documentos

barra_menu.jpg Background para el menú

barra_titulo.jpg Background para el Título (PgO_Titulo)

barra_vistas.jpg Background para las vistas

ImgO_cancel.JPG Imagen cancelar.

ImgO_edit.JPG Imagen editar

54

ImgO_new.JPG Imagen nuevo

ImgO_Save.gif Imagen garbar

ImgO_save.JPG Imagen garbar

logo.jpg Logo del software

update.gif Imagen refrescar

Otra Información

Database Script Listado de los roles.

Código LotusScript Sub Querydocumentdelete(Source As Notesuidatabase, Continue

As Variant) Msgbox "Usted no puede realizar esta acción", MB_OK, "Acción

no Valida" Continue=False End Sub

1.3. Base de Definición de Procesos

Nombre: WFE_DefProcesos Descripción: Repositorio para la definición de procesos. Título: Definición de Procesos Roles: [AdministradorWF]

Framesets

Frs_main

55

Descripción: Es el front – end Está conformado por cinco frame: Fr_user, Fr_Titulo, Fr_menu, Fr_Principal, Fr_logo

Frame

Fr_user Elemento: Page Valor: PgD_User

Fr_Titulo

Elemento: Page Valor: PgD_Titulo

Fr_Menu

Elemento: Page Valor: PgD_Menu

Fr_Principal

Elemento: Vista Valor: VstD_Procesos Default target: Fr_Principal

Fr_Logo

Elemento: Vista Valor: PgD_Logo

Páginas

PgD_Logo Gráfico del logo del software

PgD_menu Menú (Outline)

PgD_Titulo Titulo de la Aplicación

PgD_User Usuario conectado

56

Formularios

FrmD_Configuracion Documento de configuración. Permite configurar: la ruta y nombre de las bases de datos, definición sobre el proceso, calendario de la organización y el manejo del Archive (Histórico).

Tipo: Documento Formula Título: “Doc. Configuración” Incluido en Menú

Compones No

Formulario Default: No Automáticamente

Refresca Campos: Si

Subcomponentes * Shared Field: CmpD_Titulo * SubForm: SFrmD_DBName Hotspot Tipo: Pop-up Título: Nombre ToolTipText: Nombre del Servidor Field CmpD_NombreSrv Tipo Dato: Texto Tipo Campo: Computado Formula:

CmpD_Servidor Hotspot Tipo: Pop-up Título: Aplicación ToolTipText: Nombre de la Base de Datos de

Aplicación Field CmpD_BDAplicacion Tipo Dato: Texto Tipo Campo: Editable Valor Default:

@If(@ThisValue = ""; ""; @ThisValue); Field CmpD_BDAplicacion_dir Tipo Dato: Texto Tipo Campo: Computado Formula:

CmpD_Path + CmpD_BDAplicacion; Hotspot

57

Tipo: Pop-up Título: Definición Procesos: ToolTipText: Nombre de la base de datos de Definición

de Procesos Field CmpD_BDProcesos Tipo Dato: Texto Tipo Campo: Editable Valor Default:

@Right(CmpD_Base;@FileDir(CmpD_Base)); REM {@If (@ThisValue="";CmpP_Base;@ThisValue);};

Field CmpD_BDProcesos_dir Tipo Dato: Texto Tipo Campo: Computado Formula:

CmpD_Path + CmpD_BDProcesos; Hotspot Tipo: Pop-up Título: Organización: ToolTipText: Nombre de la base de datos de

Organización Field CmpD_BDOrganizacion Tipo Dato: Texto Tipo Campo: Computado Valor Default:

@If(@ThisValue = ""; ""; @ThisValue); Field CmpD_ BDOrganizacion _dir Tipo Dato: Texto Tipo Campo: Computado Formula:

CmpD_Path + CmpD_BDOrganizacion; Hotspot Tipo: Pop-up Título: Permitir nombres duplicados: ToolTipText: Permitir o no crear instancias del proceso

con nombre duplicados Field CmpD_PermiteDuplicado Tipo Dato: Dialogo Lista Tipo Campo: Editable Permite valores que

no están en la lista: No

Lista: Si|S No|N

Formula Valor default: “N” Field CmpD_DiasLab Tipo Dato: Check Tipo Campo: Editable

58

Separador de Valores: Coma Lista de Valores: Domingo|1

Lunes|2 Martes|3 Miércoles|4 Jueves|5 Viernes|6 Sabado|7

Field CmpD_HoraInicio Tipo Dato: Fecha Tipo Campo: Editable Formato Hora: 21:42 ToolTipText: Horario de Entrada Field CmpD_HoraSalida Tipo Dato: Fecha Tipo Campo: Editable Formato Hora: 21:42 ToolTipText: Horario de Salida Field CmpD_BDArchive Tipo Dato: Texto Tipo Campo: Editable Formula Valor Default:

@If(@ThisValue = ""; ""; @ThisValue); Field CmpD_BDArchive _dir Tipo Dato: Texto Tipo Campo: Computado Formula:

CmpD_Path + CmpD_BDArchive; Field CmpD_Migracion Tipo Dato: Numero Tipo Campo: Editable Formato Numero: Sin decimales * Shared Action AccD_Grabar * Shared Action AccD_Cerrar

Código LotusScript (Globales)

Option Public Use "ScrD_FuncionesCompartidas"

(Formulario) FrmD_Configuracion On Load

@Command([ViewRefreshFields])

59

Sub Querysave(Source As Notesuidocument, Continue As Variant) Source.Refresh '-----------------VALIDACIONES CALENDARIZACION-------------------- If source.FieldGetText("CmpD_DiasLab")="" Then

Msgbox "Debe seleccionar los días laborables",,"Mensaje del Sistema"

continue=False Exit Sub End If If source.FieldGetText("CmpD_HoraInicio")="" Then

Msgbox "Debe ingresar el horario de inicio de labores",,"Mensaje del Sistema"

continue=False Exit Sub End If If source.FieldGetText("CmpD_HoraSalida")="" Then

Msgbox "Debe ingresar el horario de finalización de labores",,"Mensaje del Sistema"

continue=False Exit Sub End If

If source.FieldGetText("CmpD_HoraInicio") >= source.FieldGetText("CmpD_HoraSalida") Then

Msgbox "Debe volver a ingresar los horarios de labores",,"Mensaje del Sistema"

continue=False Exit Sub End If '---------------------------------------------------------------------------------------- '----------- VALIDACIONES HISTORICO------------------------------------- If Trim(source.FieldGetText("CmpD_Migracion"))="" Then

Msgbox "Debe ingresar el periodo de migración de archivos finalizados",,"Mensaje del Sistema"

continue=False Exit Sub End If '----------------------------------------------------------------------------------------

If (GrabaDocConfiguracion ("D", "O", source.FieldGetText("CmpD_BDProcesos_dir"))) Then

If (GrabaDocConfiguracion ("D", "A", source.FieldGetText("CmpD_BDAplicacion_dir"))) Then

continue = True Else continue = False End If Else continue = False End If

60

End Sub

FrmD_Acciones Permite definir las acciones de una actividad.

Tipo: Documento Formula Título: @If(@IsNewDoc; "Nueva Acción"; CmpD_NombreAccion); Incluido en Menú

Compones No

Formulario Default: No Automáticamente

Refresca Campos: Si

Subcomponentes * Shared Field: CmpD_Titulo * SubForm: SFrmD_DBName Field CmpD_AccCodigoPro Tipo Dato: Texto Tipo Campo: Computado Formula:

CmpD_AccCodigoPro Field CmpD_AccNombrePro Tipo Dato: Texto Tipo Campo: Comptutado Formula:

CmpD_AccNombrePro Field CmpD_AccCodigoAct Tipo Dato: Texto Tipo Campo: Computado Formula:

CmpD_AccCodigoAct Field CmpD_AccNombreActividad Tipo Dato: Texto Tipo Campo: Computado Formula:

CmpD_AccNombreActividad Field CmpD_CodigoAccion Tipo Dato: Texto Tipo Campo: Computado Formula:

CmpD_CodigoAccion Field CmpD_NombreAccion

61

Tipo Dato: Texto Tipo Campo: Computado Formula:

CmpD_NombreAccion Hotspot Tipo: Pop-up Título: Descripción: ToolTipText: Ingrese una descripción para la acción. Field CmpD_DescAccion Tipo Dato: Texto Tipo Campo: Editable Hotspot Tipo: Pop-up Título: Tipo: ToolTipText: Seleccione el tipo de acción "Simple" si la

siguiente actividad no depende de una condición, caso contrario seleccione "Condición".

Field CmpD_RdoTipo Tipo Dato: Radio Tipo Campo: Editable Lista: Simple|S

Condicion|C Field CmpD_LstActividades Tipo Dato: Texto Tipo Campo: Computado para mostrar Formula: FIELD LstActividades := @DbLookup("" : "ReCache"; CmpD_Servidor :

CmpD_Base; "VstD_Actividades"; CmpD_AccNombrePro; 3) + "|" + @DbLookup("" : "ReCache"; CmpD_Servidor : CmpD_Base; "VstD_Actividades"; CmpD_AccNombrePro; 2); FIELD CmpD_Prefijo := "*"; FIELD Contador := ""; @All;

Hotspot Tipo: Pop-up Título: Valor Condición: ToolTipText: Ingrese el valor o palabra exacta que

ejecutará como siguiente actividad la seleccionada abajo.

Ocultar cuando: CmpD_RdoTipo != "C"; * Shared Field: CmpD_Codigo_aux Hotspot Tipo: Pop-up Título: Siguiente Actividad: ToolTipText: Seleccione la actividad posterior a esta

acción.

62

* SubForm: SFrmD_ListadoMotor Field CmpD_AccSiguienteActividad Tipo Dato: Dialogo Lista Tipo Campo: Editable Permite valores que

no están en la lista: No

Formula: "Final" : LstActividades; Formula de Validación

de Entrada:

@Trim(CmpD_AccSiguienteActividad);@If(CmpD_Listado != ""; @Right(CmpD_Listado; "="); @ThisValue);

Field CmpD_Nombre Tipo Dato: Texto Tipo Campo: Computado para mostrar Formula: @Trim(CmpD_AccSiguienteActividad); * SubForm: SFrmD_DatosCreacion * Shared Action AccD_Editar * Shared Action AccD_Grabar * Shared Action AccD_Print * Shared Action AccD_Salir

Código LotusScript (Globales)

Option Public Use "ScrD_FuncionesCompartidas"

(Formulario) FrmD_Acciones Sub Querysave(Source As Notesuidocument, Continue As Variant)

If GrabarAcciones() Then 'Msgbox "Grabación Exitosa",,"Mensaje del Sistema" Else continue=False End If End Sub

FrmD_Actividades Permite definir las actividades de un proceso.

º Tipo: Documento Formula Título: @If(@IsNewDoc; "Nueva Actividad"; CmpD_NombreActividad);

63

Incluido en Menú Compones

No

Formulario Default: No Automáticamente

Refresca Campos: Si

Subcomponentes * Shared Field: CmpD_Titulo * SubForm: SFrmD_DBName Field CmpD_CodigoProAct Tipo Dato: Texto Tipo Campo: Computado Formula:

CmpD_CodigoProAct Field CmpD_NombreProAct Tipo Dato: Texto Tipo Campo: Comptutado Formula:

CmpD_NombreProAct Field CmpD_CodigoActividad Tipo Dato: Texto Tipo Campo: Computado Formula:

CmpD_CodigoActividad Field CmpD_NombreActividad Tipo Dato: Texto Tipo Campo: Computado Formula:

@If(@IsNewDoc; "Nueva Actividad"; CmpD_NombreActividad); Hotspot Tipo: Pop-up Título: Descripción: ToolTipText: Ingrese una descripción para la actividad. Field CmpD_DescripcionAct Tipo Dato: Texto Tipo Campo: Editable Hotspot Tipo: Pop-up Título: Actividad Inicial: ToolTipText: Seleccione esta opción solo si está de

acuerdo con que la presente actividad será la actividad inicial.

Field CmpD_ActividadInicial Tipo Dato: Check

64

Tipo Campo: Editable Separador de Valores: Coma Lista: Si Hotspot Tipo: Pop-up Título: Tipo: ToolTipText: Seleccione el tipo de actividad manual si

va a ser ejecutada por algún rol. Seleccione el tipo de actividad automática si esta va a ejecutar algún agente.

Field CmpD_TipoActividad Tipo Dato: Radio Tipo Campo: Editable Lista: Manual|M

Automática|A Hotspot Tipo: Pop-up Título: Agente: ToolTipText: Seleccione el agente que ejecutará la

actividad. Field CmpD_NombreAgente Tipo Dato: Texto Tipo Campo: Editable Lista: Manual|M

Automática|A Ocultar cuando: CmpD_TipoActividad != "A" Field CmpD_NombreAgente_Lectura Tipo Dato: Texto Tipo Campo: Computado para mostrar Formula: CmpD_NombreAgente Ocultar cuando: CmpD_TipoActividad != "A"

Antes y Cuando este editable Hotspot Tipo: Pop-up Título: Responsable: ToolTipText: Seleccione el rol responsable de la

actividad. La actividad será ruteada al usuario responsable del rol

Ocultar cuando: CmpD_TipoActividad != "M"; Field CmpD_ResponsableAct Tipo Dato: Dialogo Lista Tipo Campo: Editable Formula: @Trim(CmpD_AccSiguienteActividad); Permite valores que

no están en la lista: No

Formula Lista:

65

nombreBD := @GetProfileField("FrmD_Configuracion"; "CmpD_BDOrganizacion_dir"); nombreSrv := @GetProfileField("FrmD_Configuracion"; "CmpD_NombreSrv"); Temp := @DbColumn("Notes" : "NoCache"; nombreSrv : nombreBD; "VstO_TodosRoles"; 3) + "-" + @DbColumn("Notes" : "NoCache"; nombreSrv : nombreBD; "VstO_TodosRoles"; 2) + "|" + @DbColumn("Notes" : "NoCache"; nombreSrv : nombreBD; "VstO_TodosRoles"; 1); @Trim(@Unique(@Name([CN]; Temp)));

Ocultar cuando: CmpD_TipoActividad != "M"; Field CmpD_EstadoPlazoAct Tipo Dato: Radio Tipo Campo: Editable Lista Con plazo|A

Sin plazo|I Ocultar cuando: CmpD_TipoActividad != "M"; Field CmpD_ActTiempoPlazo Tipo Dato: Numero Tipo Campo: Editable Formato Numero: General Ocultar cuando: CmpD_TipoActividad != "M" |

CmpD_EstadoPlazoAct != "A"; Field CmpD_ActPlazoDH Tipo Dato: Dialogo Lista Tipo Campo: Editable Permite valores que

no están en la lista: No

Lista: Hora|H Dia|D

Formula Valor default: “Hora” Ocultar cuando: CmpD_TipoActividad != "M" |

CmpD_EstadoPlazoAct != "A"; Hotspot Tipo: Pop-up Título: Estado Correo: ToolTipText: Seleccione la opción "Activo" si desea

enviar una alerta al responsable de esta actividad. Si no desea enviar una alerta seleccione la opción "Inactivo".

Field CmpD_EstadoEnvioCorreoAct Tipo Dato: Dialogo lista Tipo Campo: Editable Permite valores que

no están en la lista: No

Lista: Activo|A Inactivo|I

66

Formula Valor default: “I” Hotspot Tipo: Pop-up Título: Mensaje de Correo:: ToolTipText: Ingrese el mensaje para el responsable

de la actividad. Ocultar cuando: CmpD_EstadoEnvioCorreoAct != "A"; Field CmpD_CambioMensajeAct Tipo Dato: Texto Tipo Campo: Editable Ocultar cuando: CmpD_EstadoEnvioCorreoAct != "A"; * Shared Field: SFrmD_DatosCreacion * SubForm: SFrmD_Listado * Shared Action AccD_Editar * Shared Action AccD_Grabar * Shared Action AccD_Print * Shared Action AccD_Salir

Código LotusScript (Globales)

Option Public Use "ScrD_FuncionesCompartidas"

(Formulario) FrmD_Actividades Sub Querysave(Source As Notesuidocument, Continue As Variant)

If GrabarAcciones() Then 'Msgbox "Grabación Exitosa",,"Mensaje del Sistema" Else continue=False End If End Sub

FrmD_Procesos Permite definir los procesos dentro del WorkFlow.

Tipo: Documento Formula Título: @If(@IsNewDoc; "Nuevo Proceso"; CmpD_NombrePro); Incluido en Menú

Compones Si

Formulario Default: No Automáticamente Si

67

Refresca Campos: Subcomponentes * Shared Field: CmpD_Titulo * SubForm: SFrmD_DBName Field CmpD_CodigoPro Tipo Dato: Number Tipo Campo: Computado Formula:

CmpD_CodigoPro Hotspot Tipo: Pop-up Título: Nombre ToolTipText: Ingrese el nombre del proceso. Field CmpD_NombrePro Tipo Dato: Text Tipo Campo: Editable Hotspot Tipo: Pop-up Título: Descripción ToolTipText: Ingrese una descripción del proceso. Field CmpD_DescripcionPro Tipo Dato: Text Tipo Campo: Editable Field CmpD_AuditorProceso Tipo Dato: Keywords Tipo Campo: Editable Permite valores que

no están en la lista: No

Formula Lista nombreBD := @GetProfileField("FrmD_Configuracion"; "CmpD_BDOrganizacion_dir"); nombreSrv := @GetProfileField("FrmD_Configuracion"; "CmpD_NombreSrv"); Temp := @DbColumn("Notes" : "NoCache"; nombreSrv : nombreBD; "VstO_TodosRoles"; 3) + "-" + @DbColumn("Notes" : "NoCache"; nombreSrv : nombreBD; "VstO_TodosRoles"; 2) + "|" + @DbColumn("Notes" : "NoCache"; nombreSrv : nombreBD; "VstO_TodosRoles"; 1); @Trim(@Unique(@Name([CN]; Temp)));

Hotspot Tipo: Pop-up Título: Nombre Formulario: ToolTipText: Escoja el formulario con el que trabajará el

proceso. Field CmpD_LstFormularios

68

Tipo Dato: Keywords Tipo Campo: Computed for display Permite valores que

no están en la lista: No

Formula: CmpD_LstFormularios

Field CmpD_NombreForm Tipo Dato: Text Tipo Campo: Editable Field CmpD_NombreForm_Lectura Tipo Dato: Text Tipo Campo: Computed for display Permite valores que

no están en la lista: No

Formula: CmpD_NombreForm

Field CmpD_Estado Tipo Dato: Text Tipo Campo: Computed Formula Valor Default: "D" Hotspot Tipo: Pop-up Título: Cualquiera inicia el proceso ToolTipText: Elija si cualquier usuario puede iniciar el

proceso. Si elije "Si", esta opción tendrá prioridad sobre rol asignado en la actividad inicial.

Field CmpD_RdoIniciaProceso Tipo Dato: Radio Buttons Tipo Campo: Editable Valores de Radio

buttons: Si|S No|N

Formula Valor Default: "S" Field Lista_de_Actividades Tipo Dato: Section Titulo de Seccion Lista de Actividades Tipo Campo: Editable Separador de Valores: Coma Ocultar Cuando: @IsNewDoc * SubForm: SFrmD_DatosCreacion * Shared Action AccD_Editar * Shared Action AccD_Grabar * Shared Action AccD_Print

69

* Shared Action AccD_Salir

Código LotusScript (Globales)

Option Public Use "ScrD_FuncionesCompartidas"

(Formulario) FrmD_ Procesos Sub Postopen(Source As Notesuidocument)

If Source.IsNewDoc Then Source.EditMode=True Call ListaFormularios If Trim(Source.FieldGetText("CmpD_CodigoPro"))="" Then Call

CodigoSecuencial("VstD_Procesos","CmpD_CodigoPro")

End If '------------- 'Coloca el codigo de la actividad nueva Call Source.FieldSetText("CmpD_Codigo_aux",Cstr(1)) Source.Refresh End If 'Source.IsNewDoc Then End Sub Sub Postmodechange(Source As Notesuidocument)

Source.Refresh End Sub Sub Querysave(Source As Notesuidocument, Continue As Variant)

If GrabarProcesos() Then Else continue=False End If

End Sub

Vistas

VstD_Acciones Listado de las acciones creadas.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección:

70

SELECT (Form = "FrmD_Acciones"); Subcomponentes Columna 1 Titulo Columna: No asignado Formula Columna: CmpD_AccCodigoPro + "-" +

CmpD_AccCodigoAct; Ancho: 10 caracteres Oculta: Si Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 2 Titulo Columna: Cod. Proceso Formula Columna: CmpD_AccCodigoPro Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente, Categorizada Justificación: Izquierda Totales: No Columna 3 Titulo Columna: Cod. Actividad Formula Columna: CmpD_AccCodigoAct Ancho: 10 caracteres Oculta: Si Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrado Totales: No Columna 4 Titulo Columna: Actividad Formula Columna: CmpD_AccNombreActividad Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47

71

Ordenado: Ascendente, Categorizada Justificación: Izquierda Totales: No Columna 5 Titulo Columna: Cod. Accion Formula Columna: CmpD_CodigoAccion Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 6 Titulo Columna: Accion Formula Columna: CmpD_NombreAccion Ancho: 20 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 7 Titulo Columna: _CodiAccion=NombreAccion Formula Columna: "_" + CmpD_CodigoAccion + "=" +

CmpD_NombreAccion; Ancho: 10 caracteres Oculta: Si Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No * Shared Action AccD_NuevoPro * Shared Action AccDNuevaAct * Shared Action AccDNuevaAcc * Shared Action AccD_Print

VstD_Actividades Listado de las actividades creadas.

72

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT Form = "FrmD_Actividades"; Subcomponentes Columna 1 Titulo Columna: No asignado Formula Columna: CmpD_NombreProAct Ancho: 6 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente, Categorizada Justificación: Centro Totales: No Columna 2 Titulo Columna: Códigos Formula Columna: CmpD_CodigoActividad Ancho: 5 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centro Totales: No Columna 3 Titulo Columna: Actividades Formula Columna: CmpD_NombreActividad Ancho: 17 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Centro Totales: No Columna 4 Titulo Columna: Responsable Formula Columna: CmpD_ResponsableAct Ancho: 15 caracteres

73

Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Centro Totales: No Columna 5 Titulo Columna: Descripción Formula Columna: CmpD_DescripcionAct Ancho: 27 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Centro Totales: No Columna 6 Titulo Columna: _Proceso=Actividad Formula Columna: "_" + CmpD_CodigoActividad + "=" +

CmpD_NombreActividad; Ancho: 10 caracteres Oculta: Si Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No * Shared Action AccD_NuevoPro * Shared Action AccDNuevaAct * Shared Action AccDNuevaAcc * Shared Action AccD_Print VstD_Procesos

Listado de los procesos creados.

Vista Default: Si Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT Form = "FrmD_Procesos"; Subcomponentes

74

Columna 1 Titulo Columna: Código Formula Columna: CmpD_CodigoPro Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centro Totales: No Columna 2 Titulo Columna: Nombre de Proceso Formula Columna: CmpD_NombrePro Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 3 Titulo Columna: Descripción Formula Columna: CmpD_DescripcionPro Ancho: 28 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 4 Titulo Columna: Actividades Formula Columna: CmpD_VistaActividades Ancho: 23 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 5 Titulo Columna: Formulario Asociado al Proceso

75

Formula Columna: CmpD_NombreForm Ancho: 20 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 6 Titulo Columna: CodigoYNombrePro Formula Columna: @Trim(@Text(CmpD_CodigoPro)) + "-" +

@Trim(@Text(CmpD_NombrePro)); Ancho: 10 caracteres Oculta: Si Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 7 Titulo Columna: Auditor Formula Columna: CmpD_AuditorProceso Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No * Shared Action AccD_NuevoPro * Shared Action AccDNuevaAct * Shared Action AccDNuevaAcc * Shared Action AccD_Print

VstD_ProcesosProduccion

Listado de los procesos en producción.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección:

76

SELECT Form = "FrmD_Procesos" & CmpD_Estado = "P"; Subcomponentes Columna 1 Titulo Columna: Código Formula Columna: CmpD_CodigoPro Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centro Totales: No Columna 2 Titulo Columna: Nombre de Proceso Formula Columna: CmpD_NombrePro Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 3 Titulo Columna: Descripción Formula Columna: CmpD_DescripcionPro Ancho: 28 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 4 Titulo Columna: Actividades Formula Columna: CmpD_VistaActividades Ancho: 23 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente

77

Justificación: Izquierda Totales: No Columna 5 Titulo Columna: Formulario Asociado al Proceso Formula Columna: CmpD_NombreForm Ancho: 20 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 6 Titulo Columna: CodigoYNombrePro Formula Columna: @Trim(@Text(CmpD_CodigoPro)) + "-" +

@Trim(@Text(CmpD_NombrePro)); Ancho: 10 caracteres Oculta: Si Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No * Shared Action AccD_NuevoPro * Shared Action AccDNuevaAct * Shared Action AccDNuevaAcc * Shared Action AccD_Print

VstD_Procesos_Cmpl Listado de los procesos en producción y desarrollo.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT Form = "FrmD_Procesos"; Subcomponentes Columna 1 Titulo Columna: Código Formula Columna: CmpD_CodigoPro

78

Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centro Totales: No Columna 2 Titulo Columna: Nombre de Proceso Formula Columna: CmpD_NombrePro Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 3 Titulo Columna: Proc. Revisados Formula Columna: @If(@Trim(CmpD_Estado) = "P"; 82; 81); Ancho: 10 caracteres Oculta: No Icono: Si Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 4 Titulo Columna: Descripción Formula Columna: CmpD_DescripcionPro Ancho: 28 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 5 Titulo Columna: Actividades Formula Columna: CmpD_VistaActividades Ancho: 23 caracteres Oculta: No

79

Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 6 Titulo Columna: Formulario Asociado al Proceso Formula Columna: CmpD_NombreForm Ancho: 20 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 7 Titulo Columna: CodigoYNombrePro Formula Columna: @Trim(@Text(CmpD_CodigoPro)) + "-" +

@Trim(@Text(CmpD_NombrePro)); Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Action Acc_RevisarProceso

* Shared Action Acc_Actualizar

VstD_ProcYActividades Listado de códigos de procesos con actividades.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT Form = "FrmD_Actividades"; Subcomponentes Columna 1

80

Titulo Columna: No Asignado Formula Columna: CmpD_CodigoProAct + "-" +

CmpD_CodigoActividad; Ancho: 6 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centro Totales: No Columna 2 Titulo Columna: Cod. Proceso Formula Columna: CmpD_CodigoProAct Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 3 Titulo Columna: Nombre Formula Columna: CmpD_NombreProAct Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 4 Titulo Columna: Cod. Actividad Formula Columna: CmpD_CodigoActividad Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 5 Titulo Columna: Nombre

81

Formula Columna: CmpD_NombreActividad Ancho: 13 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 6 Titulo Columna: Actividad Inicial Formula Columna: CmpD_ActividadInicial Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 7 Titulo Columna: Accione Formula Columna: CmpD_Lista Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 8 Titulo Columna: Descripcion Formula Columna: CmpD_DescripcionAct Ancho: 41 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 9 Titulo Columna: Tipo de Actividad Formula Columna: CmpD_TipoActividad Ancho: 11 caracteres

82

Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 10 Titulo Columna: Responsable de Tarea Formula Columna: CmpD_ResponsableAct Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 11 Titulo Columna: Nombre de Agente Formula Columna: CmpD_NombreAgente Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 12 Titulo Columna: ConSinPlazo Formula Columna: CmpD_EstadoPlazoAct Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 13 Titulo Columna: Cantidad de Tiempo Formula Columna: CmpD_ActTiempoPlazo Ancho: 10 caracteres Oculta: No Icono: No

83

Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 14 Titulo Columna: Unidad de Tiempo Formula Columna: CmpD_ActPlazoDH Ancho: 14 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 15 Titulo Columna: Envia Correo Formula Columna: CmpD_EstadoEnvioCorreoAct Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 16 Titulo Columna: Mensaje Correo Formula Columna: CmpD_CambioMensajeAct Ancho: 11 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No * Shared Action AccD_NuevoPro * Shared Action AccDNuevaAct * Shared Action AccDNuevaAcc * Shared Action AccD_Print

VstD_ProcYActiYAcci

84

Listado de códigos de procesos, actividades y acciones.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT Form = "FrmD_Acciones"; Subcomponentes Columna 1 Titulo Columna: No Asignado Formula Columna: CmpD_AccCodigoPro + "-" +

CmpD_AccCodigoAct + "-" + CmpD_CodigoAccion;

Ancho: 6 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centro Totales: No Columna 2 Titulo Columna: Cod. Proceso Formula Columna: CmpD_AccCodigoPro Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 3 Titulo Columna: Cod. Actividad Formula Columna: CmpD_AccCodigoAct Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 4

85

Titulo Columna: Nombre Formula Columna: CmpD_AccNombreActividad Ancho: 14 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 5 Titulo Columna: Cod. Accion Formula Columna: CmpD_CodigoAccion Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 6 Titulo Columna: Nombre Formula Columna: CmpD_NombreAccion Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 7 Titulo Columna: Accion: S/C Formula Columna: CmpD_RdoTipo Ancho: 7 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 8 Titulo Columna: C=Condición Formula Columna: CmpD_Lista

86

Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 9 Titulo Columna: Siguiente Actividad Formula Columna: CmpD_AccSiguienteActividad Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No * Shared Action AccD_NuevoPro * Shared Action AccDNuevaAct * Shared Action AccDNuevaAcc * Shared Action AccD_Print

VstD_RptAcciones Listado de las acciones creadas para mostrar en menú.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT (Form = "FrmD_Acciones"); Subcomponentes Columna 1 Titulo Columna: Cod. Proceso Formula Columna: CmpD_AccNombrePro Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente, Categorizada

87

Justificación: Izquierda Totales: No Columna 2 Titulo Columna: Cod. Actividad Formula Columna: CmpD_AccCodigoAct Ancho: 10 caracteres Oculta: Si Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centrado Totales: No Columna 3 Titulo Columna: Actividad Formula Columna: CmpD_AccNombreActividad Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente, Categorizada Justificación: Izquierda Totales: No Columna 4 Titulo Columna: Cod. Accion Formula Columna: CmpD_CodigoAccion Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 5 Titulo Columna: Accion Formula Columna: CmpD_NombreAccion Ancho: 20 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No

88

Columna 6 Titulo Columna: _CodiAccion=NombreAccion Formula Columna: "_" + CmpD_CodigoAccion + "=" +

CmpD_NombreAccion; Ancho: 10 caracteres Oculta: Si Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No * Shared Action AccD_NuevoPro * Shared Action AccDNuevaAct * Shared Action AccDNuevaAcc * Shared Action AccD_Print

VstD_RptProcesos Listado de los procesos creados para mostrar en menú.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT Form = "FrmD_Procesos"; Subcomponentes Columna 1 Titulo Columna: No asignado Formula Columna: @If(CmpA_Estado = "P"; 31; 32); Ancho: 1 caracteres Oculta: No Icono: Si Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Centro Totales: No Columna 2 Titulo Columna: Código Formula Columna: CmpD_CodigoPro Ancho: 10 caracteres Oculta: No

89

Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centro Totales: No Columna 3 Titulo Columna: Nombre de Proceso Formula Columna: CmpD_NombrePro Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 4 Titulo Columna: Descripción Formula Columna: CmpD_DescripcionPro Ancho: 28 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 5 Titulo Columna: Actividades Formula Columna: CmpD_VistaActividades Ancho: 23 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 6 Titulo Columna: Formulario Asociado al Proceso Formula Columna: CmpD_NombreForm Ancho: 20 caracteres Oculta: No Icono: No Formato Numero: General

90

Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 7 Titulo Columna: CodigoYNombrePro Formula Columna: @Trim(@Text(CmpD_CodigoPro)) + "-" +

@Trim(@Text(CmpD_NombrePro)); Ancho: 10 caracteres Oculta: Si Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No * Shared Action AccD_NuevoPro * Shared Action AccDNuevaAct * Shared Action AccDNuevaAcc * Shared Action AccD_Print

Agentes

CmpA_Compila Se encarga de compilar los procesos existentes y habilitar su uso dentro en el Motor de WorkFlow.

Agente Compartido: Si Estado: Activo Trigger: Mediante evento. Actuar sobre: Todos los documentos seleccionados. Código LotusScript (Globales) Option Public

Dim Acc_Final As Boolean Sub Initialize

Call ObtieneProcesos End Sub Public Sub ObtieneProcesos() Dim VistaAct As NotesUIWorkspace Dim UIVista As NotesUIView Dim ColeccionDoc As NotesDocumentCollection

91

Dim Doc As NotesDocument Set VistaAct= New NotesUIWorkspace Set UIVista= VistaAct.CurrentView Set ColeccionDoc=UIVista.Documents Set Doc = ColeccionDoc.GetFirstDocument Dim Actividades Dim Cod_Proceso As Integer Dim ListaAct,Parte,Activ As String Dim x As Integer Dim NombreProceso As String Parte="" While Not (Doc Is Nothing) Cod_Proceso=Val(doc.CmpD_CodigoPro(0)) NombreProceso=doc.CmpD_NombrePro(0) Msgbox "Se va ha revisar el proceso de codigo: " +Trim(Str(Cod_Proceso)),,"Revisión de proceso" Acc_Final=False If VerificaProcYActividades (Cod_Proceso)=False Then Msgbox "El flujo no ha sido bien definido y será suspendida su revisión."+Chr(13)+"Corrija el flujo del proceso y vuelva a verificar.",,"Error de Definición de Proceso" Call Doc.ReplaceItemValue("CmpD_Estado","D") Call Doc.Save(True,True) Exit Sub Else If Acc_Final=False Then Msgbox "El proceso: ''"+NombreProceso+"'', no cuenta con una acción que indique su finalización" ,,"Proceso no tiene Acción final" Msgbox "El flujo no ha sido bien definido y será suspendida su revisión."+Chr(13)+"Corrija el flujo del proceso y vuelva a verificar.",,"Error de Definición de Proceso" Call Doc.ReplaceItemValue("CmpD_Estado","D") Call Doc.Save(True,True) Exit Sub Else Msgbox "El proceso ha sido verificado y esta listo para ser ejecutado",,"Proceso listo para producción" Call Doc.ReplaceItemValue("CmpD_Estado","P") Call Doc.Save(True,True) End If End If Set Doc=ColeccionDoc.GetNextDocument(Doc)

92

Wend End Sub Function VerificaProcYActividades(Cod_Proceso As Integer) As Boolean Dim Session As NotesSession Dim db As NotesDatabase Dim Vista As NotesView Dim Doc As NotesDocument Dim ColeccionDoc As NotesDocumentCollection Dim Cod_Proc,Cod_Activ As Integer Dim Cuenta_Act_de_Proceso As Integer Dim Nom_Accion, NombreAct As String Dim Actividad_Inicial As String Dim Cuenta_Cuantas_Act_Iniciales_Hay As Integer Set Session= New NotesSession Set db= Session.CurrentDatabase Set Vista= db.GetView("VstD_ProcYActividades") Cuenta_Act_de_Proceso =0 Cuenta_Cuantas_Act_Iniciales_Hay =0 Dim ProcCod As String ProcCod=Trim(Str(Cod_Proceso)) Set ColeccionDoc = Vista.GetAllDocumentsByKey(ProcCod,False) Set Doc=ColeccionDoc .GetFirstDocument While Not (Doc Is Nothing) Cod_Proc=Val(Doc.CmpD_CodigoProAct(0)) Cod_Activ=Val(Doc.CmpD_CodigoActividad(0)) NombreAct=Cstr(Doc.CmpD_NombreActividad(0)) Actividad_Inicial=Cstr(Doc.CmpD_ActividadInicial(0)) If Cod_Proceso =Cod_Proc Then 'Para validar si alguna de las actividades es inicial If Actividad_Inicial="Si" Then Cuenta_Cuantas_Act_Iniciales_Hay =Cuenta_Cuantas_Act_Iniciales_Hay +1 End If Cuenta_Act_de_Proceso =Cuenta_Act_de_Proceso +1 'Verificar si la actividad tiene o no acciones If VerificaSiLaActividadTieneAcc(Cod_Proceso,Cod_Activ,NombreAct)=False Then VerificaProcYActividades=False Exit Function End If End If Set Doc=ColeccionDoc .GetNextDocument(Doc)

93

Wend If Cuenta_Cuantas_Act_Iniciales_Hay=0 Then Msgbox "El proceso no cuenta con una actividad inicial, es necesario que exista sólo una.",,"Falta actividad inicial" VerificaProcYActividades=False Else VerificaProcYActividades=True End If End Function Function VerificaSiLaActividadTieneAcc(CodProc As Integer,CodAct As Integer,NombreAct As String) As Boolean Dim Session As NotesSession Dim db As NotesDatabase Dim Vista As NotesView Dim Doc As NotesDocument Dim ColeccionDoc As NotesDocumentCollection Dim VstCodProc, VstCodAct As Integer Dim ContadorAcc As Integer Dim Tipo_Acc_Simple_Cond As String Dim NombreAcc As String Dim Lista_Acc Set Session= New NotesSession Set db= Session.CurrentDatabase Set Vista= db.GetView("VstD_ProcYActiYAcci") DocKey =Trim(Str(CodProc ))+"-"+Trim(Str(CodAct )) 'Msgbox DocKey ,, "la clave a buscar" Set ColeccionDoc = Vista.GetAllDocumentsByKey(DocKey,False) Set Doc=ColeccionDoc.GetFirstDocument ContadorAcc =0 While Not (Doc Is Nothing) Tipo_Acc_Simple_Cond=Doc.CmpD_RdoTipo(0) NombreAcc=Doc.CmpD_NombreAccion(0) If Trim(Tipo_Acc_Simple_Cond)="S" Then 'Msgbox Doc.CmpD_AccSiguienteActividad(0) If Trim(Doc.CmpD_AccSiguienteActividad(0))="" Then Msgbox "La acción: ''"+NombreAcc +"'' en la actividad: ''"+NombreAct +"'' no esta bien definida o no se la ha definido",,"Falta indicar actividad siguiente" VerificaSiLaActividadTieneAcc =False Exit Function End If

94

If Trim(Doc.CmpD_AccSiguienteActividad(0))="Final" Then Acc_Final=True End If Else 'Msgbox Doc.CmpD_Lista(0) If Trim(Doc.CmpD_Lista(0))="" Then Msgbox "La condición de la acción: ''"+NombreAcc +"'' en la actividad: ''"+NombreAct +"'' no esta bien definida o no se la ha definido",,"Falta Condición" VerificaSiLaActividadTieneAcc =False Exit Function End If For x=1 To Len(Trim(Doc.CmpD_Lista(0))) If Mid(Trim(Doc.CmpD_Lista(0)),x,5)="Final" Then Acc_Final=True End If Next x End If If Len(Tipo_Acc_Simple_Cond)=0 Then Msgbox "La accion: ''"+ NombreAcc + "'' de la actividad: ''" +NombreAct+"'', no ha sido configurada." + Chr(13) + "Tiene que estar configurada como una acción Siguiente o Condicional." , ,"Acción no configurada" VerificaSiLaActividadTieneAcc =False Exit Function End If 'VstCodProc=Val(Doc.CmpD_AccCodigoPro(0)) 'VstCodAct=Val(Doc.CmpD_AccCodigoAct(0)) ContadorAcc =ContadorAcc +1 Set Doc=ColeccionDoc.GetNextDocument(Doc) Wend If ContadorAcc =0 Then VerificaSiLaActividadTieneAcc =False Msgbox "La actividad: ''" + Trim(NombreAct )+ "'' del proceso de codigo: " + Trim(Str(CodProc )) + " No tiene acciones definidas",,"Error de Definición de Proceso" Exit Function Else VerificaSiLaActividadTieneAcc =True End If

95

End Function

Ag_GrabaDocConfig Se encarga de grabar los documentos de configuración en todas las bases de datos.

Agente Compartido: Si Estado: Activo Trigger: Mediante evento. Actuar sobre: Ninguno. Código LotusScript (Globales) Dim session As NotesSession

Dim db As NotesDatabase Sub Initialize

Dim otherProfile As NotesDocument Dim profile As NotesDocument Set session = New NotesSession Set db = session.CurrentDatabase Set profile = session.DocumentContext Dim dbOther As NotesDatabase Dim nombre As String nombre = profile.CmpP_BDOrganizacion(0) Set dbOther = session.GetDatabase(profile.CmpP_Servidor(0),+"\"+profile.CmpP_BDOrganizacion_dir(0)) Set otherProfile = dbOther.GetProfileDocument("FrmO_Configuracion") Call otherProfile.ReplaceItemValue("CmpO_NombreSrv",profile.CmpP_NombreSrv(0)) Call otherProfile.ReplaceItemValue("CmpO_BDAplicacion",profile.CmpP_BDAplicacion_dir(0)) Call otherProfile.ReplaceItemValue("CmpO_BDProcesos",profile.CmpP_BDProcesos_dir(0)) If (otherProfile.Save(True,False)) Then Msgbox "Grabación Exitosa",MB_OK,"Mensaje del Sistema" End If End Sub

96

SeteaCodigoActividad

Agente Compartido: Si Estado: Activo Trigger: Mediante evento. Actuar sobre: Ninguno. Código LotusScript Sub Initialize

Dim s As New NotesSession Dim db As NotesDatabase Dim workspace As New NotesUIWorkspace Dim UltimoCod As Integer Dim v As NotesView Dim doc As NotesDocument Dim docAc As NotesUIDocument Dim DocCollec As NotesDocumentCollection Dim categoria As String Dim proceso As String Set docAc = workspace.CurrentDocument proceso= docAc.FieldGetText("CmpD_NombreProAct") categoria=Strright(proceso,"-") Set s= New notessession Set db=s.currentdatabase Set v=db.getview("VstD_Actividades") Set DocCollec= v.GetAllDocumentsByKey(categoria) Set doc= DocCollec.GetFirstDocument Mayor=0 Do Until Doc Is Nothing UltimoCod =Val(Doc.CmpD_CodigoActividad(0)) If UltimoCod >Mayor Then Mayor =UltimoCod End If Set Doc= DocCollec.GetNextDocument(Doc) Loop Mayor=Mayor +1 Call docAc.FieldSetText("CmpD_CodigoActividad",Cstr(Mayor)) Call docAc.FieldSetText("CmpD_NombreProAct",Strright(docAc.FieldGetText("CmpD_NombreProAct"),"-")) End Sub

97

Menú

MenuD_outline Menú Principal

Entrada Definición de Flujos Alias: No Nivel: 0 Tipo: Ninguno Frame: No Asignado Nunca usar imagen: Si Entrada Procesos definidos Alias: No Nivel: 1 Tipo: Ninguno Frame: No Asignado Nunca usar imagen: Si Entrada Procesos Alias: No Nivel: 2 Tipo: Elemento Vista Nombre: VstD_Procesos Frame: Fr_Principal Nunca usar imagen: Si Entrada Revisión de Procesos Alias: No Nivel: 2 Tipo: Elemento Vista Nombre: VstD_Procesos_Cmpl Frame: Fr_Principal Nunca usar imagen: Si Entrada Actividades Alias: No Nivel: 1 Tipo: Elemento Vista Nombre: VstD_Actividades Frame: Fr_Principal Nunca usar imagen: Si Entrada Acciones Alias: No Nivel: 1 Tipo: Elemento Vista Nombre: VstD_RptAcciones Frame: Fr_Principal

98

Nunca usar imagen: Si Entrada Mantenimiento Alias: No Nivel: 0 Tipo: Ninguno Frame: No Asignado Nunca usar imagen: Si Entrada Doc de Configuración Alias: No Nivel: 1 Tipo: Accion Formula: @Command([EditProfile];

"FrmD_Configuracion"); Frame: No asignado Nunca usar imagen: Si

Subformularios

SFrmD_DatosCreacion Datos de la creación de un documento, nombre y fecha de creación.

Incluir en lista de subformularios a insertar:

Si

Subcomponentes Field CmpD_Autor Tipo Dato: Texto Tipo Campo: Computado cuando compone Formula: @V3UserName Field CmpD_FechaHora Tipo Dato: Fecha Hora Tipo Campo: Computado cuando compone Formula: @Created

SFrmD_DBName Información de la base de datos de la aplicación.

Incluir en lista de subformularios a insertar:

Si

99

Subcomponentes * Shared Field CmpD_Servidor * Shared Field CmpD_Base * Shared Field CmpD_Dominio Field CmpD_Path Tipo Dato: Texto Tipo Campo: Computado para mostrar Formula: @FileDir(CmpO_Base); Código LotusScript (Formulario) SFrmO_DBName Postmodechange

@Command([ViewRefreshFields]);

SFrmD_Listado Datos para la creación de actividades o acciones.

Incluir en lista de subformularios a insertar:

Si

Subcomponentes Field CmpD_Codigo_aux Tipo Dato: Numérico Tipo Campo: Editable Formula input

traslation: @If(CmpD_Listado != ""; @Left(@Right(CmpD_Listado; @Length(CmpD_Listado) - 1); "="); @ThisValue);

Formula input validation:

@All;

Field CmpD_Codigo Tipo Dato: Numérico Tipo Campo: Computado para mostrar Formula: CmpD_Codigo_aux Field CmpD_Nombre Tipo Dato: Texto Tipo Campo: Editable Formula Default: @Right(CmpD_Listado; "=");

100

Formula input traslation:

@Trim(CmpD_Nombre);REM {@If(SetFlagNuevo=@False;};@If(CmpD_Listado != ""; @Right(CmpD_Listado; "="); @ThisValue);REM { CmpD_Nombre)};

Field CmpD_Prefijo Tipo Dato: Texto Tipo Campo: Computado para mostrar Formula: @If(@Elements(Lista) <= 0; "*";

@If(CmpD_Listado != ""; @Left(CmpD_Listado; 1); @ThisValue));

Field CmpD_Contador Tipo Dato: Texto Tipo Campo: Computado para mostrar Formula: @If(@Elements(Lista) <= 0;

FIELDContador:=1; FIELDContador:=Contador);@All;

SFrmD_ListadoMotor Datos para la creación de actividades o acciones.

Incluir en lista de subformularios a insertar:

Si

Subcomponentes Field CmpD_SetFlagNuevo Tipo Dato: Texto Tipo Campo: Computado para mostrar Formula: FIELD SetFlagNuevo := @If(SetFlagNuevo =

@True; @True; SetFlagNuevo);@All; Field CmpD_Listado Tipo Dato: Lista Tipo Campo: Editable Formula Input

Validation: @Success

Field CmpD_Lista Tipo Dato: Texto Tipo Campo: Computado Separador de lista: Coma Formula: Lista Código LotusScript (Field) CmpD_Listado Sub Onfocus(Source As Field)

Dim workspace As New NotesUIWorkspace

101

Dim uidoc As NotesUIDocument Set uidoc = workspace.CurrentDocument Call uidoc.Refresh End Sub

Campos

CmpD_Base Nombre de la Base de Datos.

Tipo Dato: Texto Tipo Campo: Computado para mostrar Formula: @Implode(@Subset(@DbName; -1));

CmpD_Codigo_aux

Tipo Dato: Texto Tipo Campo: Editable Formula Input

Tralation: @If(CmpD_Listado != ""; @Left(@Right(CmpD_Listado; @Length(CmpD_Listado) - 1); "="); @ThisValue);

Formula Input Validation:

@All

CmpD_Dominio Nombre del Dominio.

Tipo Dato: Texto Tipo Campo: Computado para mostrar Formula: @Domain

CmpD_Servidor Nombre del Servidor.

Tipo Dato: Texto Tipo Campo: Computado para mostrar Formula: @Name([CN]; @Subset(@DbName; 1));

102

CmpD_Titulo Nombre del Formulario.

Tipo Dato: Texto Tipo Campo: Computado Formula: “Definición de:”

Acción

AccD_Editar Coloca el documento en modo de edicion.

Formula: @Command([EditDocument]);

AccD_Print Botón para imprimir.

Formula: @Command([FilePrint]);

AccD_Grabar Botón para guardar el documento.

Formula: @If(@Command([FileSave]); @Do(@Prompt([Ok]; "Mensaje del

Sistema"; "Grabación Exitosa"); @Command([FileCloseWindow])); @Do(@StatusBar("Problemas al grabar"); @Prompt([Ok]; "Mensaje del Sistema"; "No se guardarán los cambios")));

AccD_Salir Botón para cerrar la ventana actual.

Formula: @Command([FileCloseWindow]);

AccD_Cerrar Botón para cerrar la ventana actual.

103

Formula: @Command([FileCloseWindow]);

Acc_Actualizar Botón para actualizar la vista actual.

LotusScript Sub Click(Source As Button)

Dim Workspace As New NotesUiWorkspace Workspace.ViewRefresh

End Sub

Librerías Script

ScrD_AccesoOtrasBases Contiene procedimientos y funciones para acceder a las otras bases que conforman el Workflow.

LotusScript (Declaraciones)

Option Public Dim session As notessession Dim db As NotesDatabase Dim profile As NotesDocument Dim view As NotesView Dim dbDefProceso As NotesDatabase Dim docProceso As NotesDocument Dim docActividad As NotesDocument Dim tipoCliente As String %INCLUDE "LSCONST.LSS"

Sub OpenDocPerfil If session Is Nothing Then Set session = New NotesSession End If If db Is Nothing Then Set db = session.CurrentDatabase End If If profile Is Nothing Then 'Documento de configuracion Set profile = db.GetProfileDocument("FrmD_Configuracion") End If

104

End Sub Function CuentaProcEnBDApp (codProc As String) As Long Dim dbApp As NotesDatabase Dim collection As NotesDocumentCollection Dim contador As Long contador = -1 OpenDocPerfil Set dbApp = session.GetDatabase(profile.GetItemValue("CmpD_NombreSrv")(0),profile.GetItemValue("CmpD_BDProcesos_dir")(0)) If Not dbApp.IsOpen Then Msgbox "No se encuentra base " +profile.GetItemValue("CmpD_NombreSrv")(0)+"\"+profile.GetItemValue("CmpD_BDProcesos_dir")(0), _ MB_ICONEXCLAMATION,"Mensaje del Sistema" Goto salir End If 'Filtro busqueda de los procesos definidos que tengan este rol como Auditor searchFormula$ = {CmpA_CodProceso = "} + codProc + {" & @Trim(CmpA_CodActividadActual) != "Final" } Set collection = dbApp.Search(searchFormula$, Nothing,0) contador = collection.Count Salir: CuentaRolEnBDDefinicion = contador End Function Function CuentaActiEnBDApp (codProc As String,codActi As String) As Long Dim dbApp As NotesDatabase Dim collection As NotesDocumentCollection Dim contador As Long contador = -1 OpenDocPerfil Set dbApp = session.GetDatabase(profile.GetItemValue("CmpD_NombreSrv")(0),profile.GetItemValue("CmpD_BDAplicacion_dir")(0)) If Not dbApp.IsOpen Then Msgbox "No se encuentra base " +profile.GetItemValue("CmpD_NombreSrv")(0)+"\"+profile.GetItemValue("CmpD_BDAplicacion_dir")(0),MB_ICONEXCLAMATION,"Mensaje del Sistema" Goto salir End If searchFormula$ = {CmpA_CodProceso = "} + codProc + {" &

105

@Trim(CmpA_CodActividadActual) = "} _ + codActi + {" & @Trim(CmpA_CodActividadActual) != "Final" } Set collection = dbApp.Search(searchFormula$, Nothing,0) contador = collection.Count Salir: CuentaActiEnBDApp = contador End Function

ScrD_FuncionesCompartidas Contiene procedimientos y funciones para la aplicación de Definición de Procesos.

LotusScript Option Public

Use "ScrD_AccesoOtrasBases" (Declaraciones) Dim s As notessession 'Dim db As NotesDatabase Dim doc As NotesDocument Dim Mayor As Integer Dim docAc As NotesUIDocument Dim UltimoCod As Integer Dim v As NotesView Dim DocCollec As NotesDocumentCollection Dim categoria As String Dim proceso As String

Sub CodigoSiguiente(NombreVst As String, NombreCmpFiltro As String, NombreCmp As String) Dim workspace As New NotesUIWorkspace Set s= New notessession Set docAc = workspace.CurrentDocument proceso= docAc.FieldGetText(NombreCmpFiltro) 'Filtro categoria=Strright(proceso,"-") Set s= New notessession Set db=s.currentdatabase Set v=db.getview(NombreVst) 'Vista de la que consultara las actividades Set DocCollec= v.GetAllDocumentsByKey(categoria)

106

Set doc= DocCollec.GetFirstDocument Mayor=0 Do Until Doc Is Nothing UltimoCod =Val(NombreCmp) If UltimoCod >Mayor Then Mayor =UltimoCod End If Set Doc= DocCollec.GetNextDocument(Doc) Loop Mayor=Mayor +1 Call docAc.FieldSetText(NombreCmp,Cstr(Mayor)) End Sub Sub CreaDocAct() Dim session As New NotesSession ' la sesion de este agente con el servidor Domino Dim db As NotesDatabase Dim DocProceso As NotesUIDocument Dim DocActividad As NotesDocument Dim ws As NotesUIWorkspace Dim cont As Integer Dim Lista_Actividades As String cont=1 Set db = session.currentdatabase Set ws= New NotesUIWorkspace Set DocProceso= ws.CurrentDocument Lista_Actividades=DocProceso.FieldGetText("CmpD_ListaActividades") Msgbox Lista_Actividades Set DocActividad= New NotesDocument ( db ) DocActividad.Form = "FrmD_Actividades" Call DocActividad.Save( False, True ) End Sub Function GrabaDocConfiguracion (inicialOri As String, inicialDes As String, nombreBase As String) As Boolean Dim session As NotesSession Dim otherProfile As NotesDocument Dim profile As NotesDocument Dim workspace As New NotesUIWorkspace Dim uidoc As NotesUIDocument Set session = New NotesSession Set db = session.CurrentDatabase Set uidoc = workspace.CurrentDocument Set profile = uidoc.Document Dim dbOther As NotesDatabase

107

Set dbOther = session.GetDatabase(profile.GetItemValue("Cmp"+inicialOri +"_NombreSrv")(0),nombreBase) If Not dbOther.IsOpen Then Msgbox "No se encuentra base " +profile.GetItemValue("Cmp"+inicialOri +"_NombreSrv")(0)+"\"+ nombreBase,MB_ICONEXCLAMATION,"Mensaje del Sistema" GrabaDocConfiguracion = False Exit Function End If Set otherProfile = dbOther.GetProfileDocument("Frm"+inicialDes+"_Configuracion") Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_NombreSrv",profile.GetItemValue("Cmp"+inicialOri +"_NombreSrv")(0)) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_BDAplicacion",profile.GetItemValue("Cmp"+inicialOri +"_BDAplicacion")(0)) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_BDAplicacion_dir",profile.GetItemValue("Cmp"+inicialOri +"_BDAplicacion_dir")(0)) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_BDProcesos",profile.GetItemValue("Cmp"+inicialOri +"_BDProcesos")(0)) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_BDProcesos_dir",profile.GetItemValue("Cmp"+inicialOri +"_BDProcesos_dir")(0)) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_BDOrganizacion",profile.GetItemValue("Cmp"+inicialOri +"_BDOrganizacion")(0)) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_BDOrganizacion_dir",profile.GetItemValue("Cmp"+inicialOri +"_BDOrganizacion_dir")(0)) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_BDArchive",profile.GetItemValue("Cmp"+inicialOri +"_BDArchive")(0)) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_BDArchive_dir",profile.GetItemValue("Cmp"+inicialOri +"_BDArchive_dir")(0)) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_PermiteDuplicado",profile.GetItemValue("Cmp"+inicialOri +"_PermiteDuplicado")(0)) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_DiasLab",profile.GetItemValue("Cmp"+inicialOri +"_DiasLab")) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_HoraInicio",profile.GetItemValue("Cmp"+inicialOri +"_HoraInicio")(0))

108

Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_HoraSalida",profile.GetItemValue("Cmp"+inicialOri +"_HoraSalida")(0)) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_Migracion",profile.GetItemValue("Cmp"+inicialOri +"_Migracion")(0)) If (otherProfile.Save(True,False)) Then GrabaDocConfiguracion = True Else GrabaDocConfiguracion = False End If End Function Sub CodigoSecuencial(NombreVst As String, NombreCmp As String) Dim workspace As New NotesUIWorkspace Set docAc = workspace.CurrentDocument Set s= New notessession Set db=s.currentdatabase Set v=db.getview(NombreVst) Set Doc= v.getfirstdocument Dim UltimoCod As Integer Mayor=0 Do Until Doc Is Nothing If NombreCmp="CmpD_CodigoActividad" Then UltimoCod =Val(Doc.CmpD_CodigoActividad(0)) End If If NombreCmp="CmpD_CodigoPro" Then UltimoCod =Val(Doc.CmpD_CodigoPro(0)) End If If UltimoCod >Mayor Then Mayor =UltimoCod End If Set Doc= v.getnextdocument(Doc) Loop Mayor=Mayor +1 Call docAc.FieldSetText(NombreCmp,Cstr(Mayor)) End Sub Sub SeteaCodigoEstadoProceso(codigo As String) Set s= New NotesSession Set db= s.CurrentDatabase Set v= db.GetView("VstD_Procesos") Set DocCollec=v.GetAllDocumentsByKey(codigo) Set Doc=v.GetDocumentByKey(codigo) If DocCollec.Count>0 Then Set doc= DocCollec.GetFirstDocument

109

doc.CmpD_Estado="D" Call doc.Save(True,True) Else Msgbox "Estado del proceso no cambió",,"Mensaje del Sistema" End If End Sub Function GrabarProcesos() As Boolean Dim ws As NotesUIWorkspace Set ws = New NotesUIWorkspace Dim Doc As NotesUIDocument Set Doc = ws.CurrentDocument Dim v As NotesView Dim db As NotesDatabase Dim session As New NotesSession ' la sesion de este agente con Dim NuevoDoc As NotesDocument Set db = session.currentdatabase Dim DocActividad As NotesDocument Dim Lista Dim Parte As String Parte ="" If Trim(Doc.FieldGetText("CmpD_CodigoPro"))="" Then Msgbox "Debe escoger un proceso para continuar" GrabarProcesos=0 'Continue=False Exit Function End If If Trim(Doc.FieldGetText("CmpD_NombrePro"))="" Then Msgbox "Debe ingresar un nombre para continuar" GrabarProcesos=0 'Continue=False Exit Function End If If Trim(doc.FieldGetText( "CmpD_NombreForm"))="" Then Msgbox "Debe escoger el formulario con el cual trabajará el proceso" GrabarProcesos=0 'Continue=False Exit Function End If If Trim(doc.FieldGetText( "CmpD_Lista"))="" Then Msgbox "Debe ingresar actividades para este proceso" GrabarProcesos=0 'Continue=False Exit Function End If If Trim(doc.FieldGetText("CmpD_AuditorProceso"))="" Then

110

Msgbox "Seleccione el auditor del proceso" GrabarProcesos=0 Exit Function End If If Doc.IsNewDoc Then Call CodigoSecuencial("VstD_Procesos","CmpD_CodigoPro") End If Lista=Doc.FieldGetText ("CmpD_Lista") For x=1 To Len(Lista) If Mid(Lista,x,1)<>"," Then Parte = Parte +Mid(Lista,x,1) Else Parte = Trim (Parte) 'Si es un nuevo documento o si no es un documento nuevo pero las actividades son nuevas 'entonces crea los documentos de las actividades If doc.IsNewDoc Or (Not doc.IsNewDoc And Mid(Parte,1,1) = "*") Then Set DocActividad= New NotesDocument ( db ) DocActividad.Form = "FrmD_Actividades" DocActividad.CmpD_CodigoProAct=Doc.FieldGetText ("CmpD_CodigoPro") DocActividad.CmpD_NombreProAct=Doc.FieldGetText ("CmpD_NombrePro") DocActividad.CmpD_NombreActividad=Strright(Parte,"=") Else Set v=db.getview("VstD_ProcYActividades") Set DocActividad = v.GetDocumentByKey(Doc.FieldGetText ("CmpD_CodigoPro")+"-"+Strleft(Mid (Parte,2),"=")) If Not (DocActividad Is Nothing) Then DocActividad.CmpD_NombreProAct=Doc.FieldGetText ("CmpD_NombrePro") DocActividad.CmpD_NombreActividad=Strright(Parte,"=") Else Messagebox "No se encontro Actividad: " +Doc.FieldGetText ("CmpD_CodigoPro")+"-"+Strleft(Mid (Parte,2),"=") +"-"+ Strright(Parte,"="),, "Mensaje del Sistema" End If End If 'If doc.IsNewDoc o si es nueva actividad

111

Then Call DocActividad.Save( False, True ) Parte="" End If 'If Mid(Lista,x,1)<>"," Then Next Call doc.FieldSetText("CmpD_Estado","D") GrabarProcesos=1 End Function Function GrabarActividades() As Boolean Dim ws As NotesUIWorkspace Dim validacalendario As Boolean Set ws = New NotesUIWorkspace Dim Doc As NotesUIDocument Set Doc = ws.CurrentDocument Dim v As NotesView Dim agent As NotesAgent Dim session As New NotesSession ' la sesion de este agente con Dim NuevoDoc As NotesDocument Set db = session.currentdatabase Dim DocAccion As NotesDocument Dim Lista Dim Parte As String Parte ="" If Trim(Doc.FieldGetText("CmpD_NombreProAct"))="" Then Msgbox "Debe escoger un proceso para continuar" GrabarActividades=0 Exit Function End If If Trim(Doc.FieldGetText("CmpD_NombreActividad"))="" Then Msgbox "Debe escoger una actividad para continuar" GrabarActividades=0 'Continue=False Exit Function End If If Trim(doc.FieldGetText( "CmpD_ResponsableAct"))="" And Trim(doc.FieldGetText("CmpD_TipoActividad"))="Manual" Then Msgbox "Debe escoger el rol responsable de la actividad" GrabarActividades=0 'Continue=False Exit Function End If If Trim(doc.FieldGetText( "CmpD_EstadoPlazoAct"))="" Then Msgbox "Debe escoger el estado de la actividad" GrabarActividades=0 'Continue=False

112

Exit Function End If If Trim(doc.FieldGetText( "CmpD_EstadoPlazoAct"))="Con plazo" And Trim(doc.FieldGetText("CmpD_ActTiempoPlazo"))=""Then Msgbox "Debe ingresar un plazo para la actividad" GrabarActividades=0 'Continue=False Exit Function End If If Trim(doc.FieldGetText( "CmpD_EstadoEnvioCorreoAct"))="Activo" And Trim(doc.FieldGetText("CmpD_CambioMensajeAct"))=""Then Msgbox "Debe ingresar un mensaje para el envío de correo electrónico" GrabarActividades=0 Exit Function End If If Trim(doc.FieldGetText( "CmpD_Lista"))="" Then Msgbox "Debe ingresar actividades" GrabarActividades=0 'Continue=False Exit Function End If If Trim(doc.FieldGetText( "CmpD_Lista"))="" Then Msgbox "Debe ingresar actividades" GrabarActividades=0 'Continue=False Exit Function End If If Trim(doc.FieldGetText( "CmpD_EstadoPlazoAct"))="Con plazo" And Trim(doc.FieldGetText("CmpD_ActPlazoDH"))="Hora" Then validacalendario=calculahoras(doc.FieldGetText("CmpD_ActTiempoPlazo")) If validacalendario Then Msgbox "Debe ingresar un valor en horas menor al definido en las horas laborables",,"Mensaje del Sistema" GrabarActividades=0 Exit Function End If End If If doc.FieldGetText("CmpD_ActividadInicial") ="Si" Then Call TodasActSinInicio(Doc.Document) End If Lista=Doc.FieldGetText ("CmpD_Lista")

113

Lista=Lista+"," 'Dim ContAct As Integer If doc.IsNewDoc Then Call CodigoSecuencial("VstD_Actividades","CmpD_CodigoActividad") 'Call doc.Save End If Call SeteaCodigoEstadoProceso(doc.FieldGetText("CmpD_CodigoProAct")) 'ContAct =0 'Recorre la lista de las actividades For x=1 To Len(Lista) If Mid(Lista,x,1)<>"," Then Parte = Parte +Mid(Lista,x,1) Else Parte = Trim (Parte) 'Si es un nuevo documento o si no es un documento nuevo pero las actividades son nuevas 'entonces crea los documentos de las actividades If doc.IsNewDoc Or (Not doc.IsNewDoc And Mid(Parte,1,1) = "*") Then Set DocAccion= New NotesDocument ( db ) DocAccion.Form = "FrmD_Acciones" DocAccion.CmpD_AccCodigoPro=Doc.FieldGetText ("CmpD_CodigoProAct") DocAccion.CmpD_AccNombrePro=Doc.FieldGetText ("CmpD_NombreProAct") DocAccion.CmpD_AccCodigoAct =Doc.FieldGetText ("CmpD_CodigoActividad") DocAccion.CmpD_AccNombreActividad =Doc.FieldGetText ("CmpD_NombreActividad") DocAccion.CmpD_CodigoAccion= Strleft(Mid (Parte,2),"=") DocAccion.CmpD_NombreAccion=Strright(Parte,"=") Else 'Si no es una actividad nueva, actualiza el nombre del proceso y la actividad Set v=db.getview("VstD_ProcYActiYAcci") Set DocAccion = v.GetDocumentByKey(Doc.FieldGetText ("CmpD_CodigoProAct")+"-"+Doc.FieldGetText ("CmpD_CodigoActividad")+"-"+Strleft(Mid

114

(Parte,2),"=")) If Not (DocAccion Is Nothing) Then DocAccion.CmpD_AccNombreActividad =Doc.FieldGetText ("CmpD_NombreActividad") DocAccion.CmpD_AccNombrePro=Doc.FieldGetText ("CmpD_NombreProAct") DocAccion.CmpD_NombreAccion=Strright(Parte,"=") Else Messagebox "No se encontro Accion: " +Doc.FieldGetText ("CmpD_CodigoPro")+"-"+Strleft(Mid (Parte,2),"=") +"-"+ Strright(Parte,"="),, "Mensaje del Sistema" End If End If 'If doc.IsNewDoc o si es nueva actividad Then Call DocAccion.Save( False, True ) Parte="" End If 'If Mid(Lista,x,1)<>"," Then Next GrabarActividades=1 End Function Function GrabarAcciones() As Boolean Dim NuevoDoc As NotesDocument Dim ws As NotesUIWorkspace Dim Doc As NotesUIDocument Set ws = New NotesUIWorkspace Set Doc = ws.CurrentDocument If Trim(Doc.FieldGetText("CmpD_RdoTipo"))="" Then Msgbox "Debe escoger un tipo de acción" 'Continue=False GrabarAcciones=0 Exit Function End If If Trim(Doc.FieldGetText("CmpD_AccSiguienteActividad"))="" And Trim(Doc.FieldGetText("CmpD_RdoTipo"))="Simple" Then Msgbox "Debe escoger la siguiente actividad en la seccion Detalle de la Acción" doc.GotoField("CmpD_AccSiguienteActividad") 'Continue=False GrabarAcciones=0 Exit Function End If If Trim(Doc.FieldGetText("CmpD_Lista"))="" And Trim(Doc.FieldGetText("CmpD_RdoTipo"))="Condición" Then Msgbox "Debe ingresar condiciones en la seccion

115

Detalle de la Acción" doc.GotoField("CmpD_Nombre") 'Continue=False GrabarAcciones=0 Exit Function End If Call SeteaCodigoEstadoProceso(doc.FieldGetText("CmpD_AccCodigoPro")) GrabarAcciones=1 End Function Function calculahoras(horas As Integer) As Boolean Dim session As NotesSession Dim profile As NotesDocument Dim db As NotesDatabase Dim horaini As NotesDateTime Dim horafin As NotesDateTime Dim diferencia As Long Set session = New NotesSession Set db = session.CurrentDatabase Set profile = db.GetProfileDocument("FrmD_Configuracion") Set horaini= New NotesDateTime(profile.GetItemValue("CmpD_HoraInicio")(0)) Set horafin= New NotesDateTime(profile.GetItemValue("CmpD_HoraSalida")(0)) Set horaini= New NotesDateTime(horaini.TimeOnly) Set horafin= New NotesDateTime(horafin.TimeOnly) diferencia= horafin.TimeDifference(horaini) diferencia=diferencia/60 diferencia=diferencia/60 If horas>=diferencia Then calculahoras=True Else calculahoras=False End If End Function Sub TodasActSinInicio (docActual As NotesDocument) selection$ = {Form = "FrmD_Actividades" & CmpD_CodigoProAct = "} + docActual.CmpD_CodigoProAct(0) + _ {" & CmpD_CodigoActividad != "} + docActual.CmpD_CodigoActividad(0) + {"} Set collectionAct = db.Search( selection$, Nothing, 0 ) Call collectionAct.StampAll("CmpD_ActividadInicial","") End Sub

116

Imágenes

Background_process_1024.jpg Background para los documentos

barra_titulo_procesos.jpg Background para el menú de las vistas

Fondo_menu_procesos.jpg Background para el menú.

ImgO_cancel.JPG Imagen botón cancelar.

ImgO_edit.JPG Imagen botón editar.

ImgO_new.JPG Imagen botón nuevo.

ImgO_Save.gif Imagen botón grabar.

ImgO_save.gif Imagen botón grabar del documento de configuración.

ImgP_new.JPG Imagen nuevo.

ImgP_no.JPG Imagen eliminar.

ImgP_si.JPG Imagen agregar.

117

logo.jpg Logo de aplicación.

update.gif Imagen actualizar.

Otra Información

Database Script

Código LotusScript Sub Querydocumentdelete(Source As Notesuidatabase, Continue

As Variant) Msgbox "Usted no puede realizar esta acción", MB_OK, "Accion no Valida" Continue=False End Sub

1.4. Base de Aplicación

Nombre: WFE_Aplicacion Descripción: Ejecutor del WorkFlow. Título: Aplicaciones Roles: [AdministradorWF]

Framesets

Frs_main

Descripción: Es el front – end Está conformado por seis frames: Fr_menu, FrA_IniciarProceso, Fr_logo, Fr_titulo, Fr_Principal, Fr_WFE

Frame

118

Fr_menu Elemento: Page Valor: PgA_menu Default target: Fr_Principal

FrA_IniciarProceso

Elemento: Formulario Valor: FrmA_IniciarProceso Default target: Fr_Principal

Fr_logo

Elemento: Page Valor: pgA_Logo

Fr_titulo

Elemento: Page Valor: PgA_Titulo

Fr_principal

Elemento: Vista Valor: VstA_MisActividadesXProc

Fr_WFE

Elemento: Page Valor: PgA_WFE

Páginas

PgA_Logo Gráfico del logo del software

PgA_Logout Página de confirmación de LogOut.

Subcomponentes Hotspot Logout & Cerrar Ventana Tipo: Button Hotspot Cancelar Tipo: Button Código JavaScript & HTML

Page PgA_Logout

119

JS Header var parentwnd = window.opener; function LogoutCloseWin() { var strLocation = new String(parentwnd.parent.location); var str1 = new String(parentwnd.parent.location.protocol + "//" + parentwnd.parent.location.host + "/"); var str2 = new String(strLocation.substring(str1.length, (strLocation.indexOf("nsf")+3))); var str3 = new String("?Logout"); strLocation = str1 + str2 + str3; parentwnd.parent.location=strLocation; parentwnd.parent.close(); self.close(); } Button onClick

LogoutCloseWin(); Button onClick

self.close(); PgA_Menu

Menu de la aplicación.

PgA_Titulo Título de la aplicación.

PgA_WFE Logo de la aplicación.

Formularios

FrmA_Configuracion Documento de configuración. Permite configurar: la ruta y nombre de las bases de datos, definición sobre el proceso, calendario de la organización y el manejo del Archive (Histórico).

Tipo: Documento Formula Título: CmpA_Path + CmpA_BDOrganizacion; Incluido en Menú

Compones No

120

Formulario Default: No Automáticamente

Refresca Campos: Si

Subcomponentes * Shared Field: CmpA_Titulo * SubForm: SFrmA_DBName Hotspot Tipo: Pop-up Título: Nombre ToolTipText: Nombre del Servidor Field CmpA_NombreSrv Tipo Dato: Texto Tipo Campo: Computado Formula:

CmpA_Servidor Hotspot Tipo: Pop-up Título: Aplicación ToolTipText: Nombre de la Base de Datos de

Aplicación Field CmpA_BDAplicacion Tipo Dato: Texto Tipo Campo: Computado Formula: @Right(CmpA_Base;

@FileDir(CmpA_Base)); Field CmpA_BDAplicacion_dir Tipo Dato: Texto Tipo Campo: Computado Formula: CmpA_Path + CmpA_BDAplicacion; Hotspot Tipo: Pop-up Título: Definición Procesos: ToolTipText: Nombre de la base de datos de Definición

de Procesos Field CmpA_BDProcesos Tipo Dato: Texto Tipo Campo: Editable Formula: @If(@ThisValue = ""; ""; @ThisValue); Field CmpA_BDProcesos_dir Tipo Dato: Texto Tipo Campo: Computado Formula: CmpA_Path + CmpA_BDProcesos; Hotspot

121

Tipo: Pop-up Título: Organización: ToolTipText: Nombre de la base de datos de

Organización Field CmpA_BDOrganizacion Tipo Dato: Texto Tipo Campo: Editable Formula default: @If(@ThisValue = ""; ""; @ThisValue); Field CmpA_BDOrganizacion_dir Tipo Dato: Texto Tipo Campo: Computado Formula: CmpA_Path + CmpA_BDOrganizacion; Hotspot Tipo: Pop-up Título: Permitir nombres duplicados: ToolTipText: Permitir o no crear instancias del proceso

con nombre duplicados Field CmpA_PermiteDuplicado Tipo Dato: Keywords Tipo Campo: Editable Permite valores que

no están en la lista: No

Valores Lista Si|S No|N

Field CmpA_DiasLab Tipo Dato: Check Separador de Lista Coma Tipo Campo: Editable Valores Lista Domingo|1

Lunes|2 Martes|3 Miercoles|4 Jueves|5 Viernes|6 Sabado|7

Field CmpA_HoraInicio Tipo Dato: Time Tipo Campo: Editable Formato: 20:03 Field CmpA_HoraSalida Tipo Dato: Time Tipo Campo: Editable Formato: 20:03 Field CmpA_BDArchive Tipo Dato: Texto Tipo Campo: Editable

122

Formula: @If(@ThisValue = ""; ""; @ThisValue); Field CmpA_BDArchive_dir Tipo Dato: Texto Tipo Campo: Computado Formula: CmpA_Path + CmpA_BDArchive; Field CmpA_ Migracion Tipo Dato: Number Tipo Campo: Editable

Action AccO_Grabar Formula:

@If(@Command([FileSave]); @Do(@Prompt([Ok]; "Mensaje del Sistema"; "Grabación Exitosa." + @Char(13) + " Salga de la aplicacion para que sus cambios tengan efecto."); @Command([FileCloseWindow])); @Do(@StatusBar("Problemas al grabar"); @Prompt([Ok]; "Mensaje del Sistema"; "Problemas en la grabación")));

* Shared Action AccA_Cerrar Código LotusScript (Globales)

Option Public Use "ScrA_FuncionesCompartidas"

(Formulario) FrmA_Configuracion Sub Querysave(Source As Notesuidocument, Continue As Variant)

Source.Refresh If source.FieldGetText("CmpA_DiasLab")="" Then Msgbox "Debe seleccionar los dias laborables",,"Mensaje del Sistema" continue=False Exit Sub End If If source.FieldGetText("CmpA_HoraInicio")="" Then Msgbox "Debe ingresar el horario de inicio de labores",,"Mensaje del Sistema" continue=False Exit Sub End If If source.FieldGetText("CmpA_HoraSalida")="" Then Msgbox "Debe ingresar el horario de finalizacion de labores",,"Mensaje del Sistema" continue=False Exit Sub End If If

123

source.FieldGetText("CmpA_HoraInicio")>=source.FieldGetText("CmpA_HoraSalida") Then Msgbox "Debe volver a ingresar los horarios de labores",,"Mensaje del Sistema" continue=False Exit Sub End If If Trim(source.FieldGetText("CmpA_Migracion"))="" Then Msgbox "Debe ingresar el periodo de migracion de archivos finalizados",,"Mensaje del Sistema" continue=False Exit Sub End If If (GrabaDocConfiguracion("A","O",source.FieldGetText("CmpA_BDOrganizacion_dir"))) Then If (GrabaDocConfiguracion("A","D",source.FieldGetText("CmpA_BDProcesos_dir"))) Then continue = True End If Else continue = False End If End Sub

FrmA_Delegar Delega la responsabilidad de una actividad a otro usuario.

Tipo: Documento de respuesta Formula Título: "Delegar" Incluido en Menú

Compones No

Formulario Default: No Automáticamente

Refresca Campos: Si

WebQuerySave @Command([ToolsRunMacro]; "(AgA_GrabaDelegar)");

QuerySave: @Command([ToolsRunMacro]; "(AgA_GrabaDelegar)");

Subcomponentes * Shared Field: CmpA_TipoCliente Field SaveOptions Tipo Dato: Texto

124

Tipo Campo: Computado Oculto: Si Formula:

“0” Field CmpA_ListaRoles Tipo Dato: Texto Tipo Campo: Computado para mostrar Separadores Lista: Coma Oculto: Si Formula:

nombreBD := @GetProfileField("FrmA_Configuracion";"CmpA_BDOrganizacion_dir"); nombreSrv := @GetProfileField("FrmA_Configuracion";"CmpA_NombreSrv"); nombreDepa := @DbColumn("Notes":"NoCache";nombreSrv:nombreBD;"VstO_TodosRoles";3); @IfError(nombreDepa;@Return("")); Temp:= nombreDepa +" - "+@DbColumn("Notes":"NoCache";nombreSrv:nombreBD;"VstO_TodosRoles";2)+ "|" +@DbColumn("Notes":"NoCache";nombreSrv:nombreBD;"VstO_TodosRoles";1); @Trim(@Unique(@Name([CN];Temp)))

Field CmpA_RTrabajoUNID Tipo Dato: Texto Tipo Campo: Computado Oculto: Si Formula:

@If(@ClientType = "Notes"; CmpA_TrabajoUNID; @UrlQueryString("docID"));

Field CmpA_NombreProceso Tipo Dato: Texto Tipo Campo: Computado para mostrar Formula:

@If(@ClientType = "Notes"; CmpA_NombreProceso; @UrlQueryString("proceso"));

Field CmpA_NombreJob Tipo Dato: Texto Tipo Campo: Computado para mostrar Formula:

@If(@ClientType = "Notes"; CmpA_NombreJob; @UrlQueryString("trabajo"));

Field CmpA_NombreActividad Tipo Dato: Texto Tipo Campo: Computado para mostrar

125

Formula: @If(@ClientType = "Notes"; CmpA_NombreActividad; @UrlQueryString("actividad"));

Field CmpA_NombreAccion Tipo Dato: Texto Tipo Campo: Computado para mostrar Formula: "Actividad Delegada" Field CmpA_ Responsable Tipo Dato: Texto Tipo Campo: Computado Formula: CmpA_Responsable Field CmpA_NuevoResponsable Tipo Dato: Lista Tipo Campo: Editable Permitir valores no

listados No

Formula de Valores permitidos:

@If(@ClientType = "Notes"; CmpA_ListaRoles; " " : "." : "." : "." : "." : ".");

Field CmpA_Observacion Tipo Dato: Texto Tipo Campo: Editable Field CmpA_NuevoResponsable Tipo Dato: Check Tipo Campo: Editable Separador Lista Coma Valores permitidos: Notificar por correo|Si

Action AccA_Aceptar Formula:

@Command([FileSave]);@Command([CloseWindow]); Action AccA_Cancelar Formula:

@Command([CloseWindow]);@Command([OpenDocument]; 0; CmpA_TrabajoUNID);

Código LotusScript (Formulario) FrmA_Delegar JS Header

function LoadProcessList() { //clean process list for(i=document.forms[0].CmpA_NuevoResponsable.options.length-1; i>=0; i--) {

126

document.forms[0].CmpA_NuevoResponsable[i] = null; } //add available process z=1; varProcessList = document.forms[0].CmpA_ListaRoles.value.split(", "); document.forms[0].asdf; //x = document.forms[0].CmpA_ListaProce.value.split("; ") document.forms[0].CmpA_NuevoResponsable[0] = new Option( " " ); for(i=0; i<varProcessList.length; i++) { nPosAlias = varProcessList[i].indexOf("|") if( nPosAlias > 0 ) { varProcess = varProcessList[i].split("|") document.forms[0].CmpA_NuevoResponsable[z] = new Option( varProcess[0], varProcess[1] ) } else { document.forms[0].CmpA_NuevoResponsable[z] = new Option( varProcessList[i] ) } z++; } document.forms[0].CmpA_NuevoResponsable[0].selected = true } onLoad LoadProcessList()

(Action) AccA_Aceptar onClick

window.document.forms[0].submit(); (Action) AccA_Cancelar onClick

window.history.back();

FrmA_IniciarProceso Formulario encargado de iniciar los procesos.

Tipo: Documento Formula Título: "Flujo de Trabajos" Incluido en Menú

Compones No

Formulario Default: No

127

Automáticamente Refresca Campos:

No

WebQuerySave @Command([ToolsRunMacro]; "(AgA_IniciaTrabajo)");

Subcomponentes * Shared Field: CmpA_FuenteEnHTML * Shared Field: CmpA_Servidor * Shared Field: CmpA_FamiliaFuenteEnCSS * Subform: "(SFrmA_IniciarProceso)" Código JavaScript & HTML HTML Head Content "<STYLE TYPE=\"text/CSS\">" + "BODY { " +

CmpA_FamiliaFuenteEnCSS + " color:#FFFFFF; text-align: left; margin-left: 5px}" + "</STYLE>";

HTML Attributes "onload=\"LoadProcessList()\"" (Formulario) FrmA_IniciarProceso onSubmit

if(typeof(NewJob)=="function"){NewJob()}; return(false)

Client onSubmit if(typeof(NewJob)=="function"){NewJob()}; return(false)

$$ViewTemplateDefault Formulario encargado de formatear todas las vistas.

Tipo: Documento Incluido en Menú

Compones No

Formulario Default: No Automáticamente

Refresca Campos: No

WebQueryOpen @Command([ToolsRunMacro]; "(AgA_Refresh)");

Vistas

128

VstA_MisActividadesAtrasadas Actividades en la q el usuario conectado es el responsable y que ya se encuentran retrasadas.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & (@Trim(CmpA_Responsable) =

@V3UserName) & @Trim(CmpA_NombreActividad) != "Final" & @Trim(CmpA_Atrasado) = "SI";

Formula PostOpen: @Command([ViewRefreshFields]); Subcomponentes Columna 1 Titulo Columna: No asignado Formula Columna: @If(CmpA_Accion = "Final"; 115;

@If(CmpA_TipoActividad = "M"; 114; 120));

Ancho: 2 caracteres Oculta: No Icono: Si Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ninguna Justificación: Izquierda Totales: No Columna 2 Titulo Columna: Nombre Trabajo Formula Columna: CmpA_NombreJob Ancho: 16 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 3 Titulo Columna: Responsable Formula Columna: CmpA_Responsable Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General

129

Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ninguna Justificación: Izquierda Totales: No Columna 4 Titulo Columna: Proceso Formula Columna: CmpA_NombreProceso Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ninguna Justificación: Izquierda Totales: No Columna 5 Titulo Columna: Actividad Formula Columna: CmpA_NombreActividad Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ninguna Justificación: Izquierda Totales: No * Shared Action AccA_Imprimir * Shared Action AccA_LogOut

VstA_MisActividadesXAct Trabajos en el que usted es el responsable categorizados por Actividad.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & (@Trim(CmpA_Responsable) =

@Trim(@V3UserName)) & @Trim(CmpA_NombreActividad) != "Final";

Formula PostOpen: @Command([ViewRefreshFields]); VstA_MisProcesosXAct

Trabajos que inicio el usuario que se conecta categorizados por Actividad.

130

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & (@Trim(CmpA_Autor) =

@Trim(@V3UserName)) & @Trim(CmpA_NombreActividad) != "Final";

Formula PostOpen: @Command([ViewRefreshFields]); Subcomponentes Columna 1 Titulo Columna: Actividad Formula Columna: CmpA_NombreActividad Ancho: 14 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Categorizado Justificación: Izquierda Totales: No Columna 2 Titulo Columna: Proceso Formula Columna: CmpA_NombreProceso Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 3 Titulo Columna: No asignado Formula Columna: @If(@Trim(CmpA_NombreActividad) =

"Final"; 115; @If(@Trim(CmpA_TipoActividad) = "M"; 114; 120));

Ancho: 2 caracteres Oculta: No Icono: Si Formato Numero: General Formato Fecha: 26/09/2006 20:17:47

131

Ordenado: No Justificación: Centro Totales: No Columna 4 Titulo Columna: Nombre Trabajo Formula Columna: CmpA_NombreJob Ancho: 16 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 5 Titulo Columna: Responsable Formula Columna: CmpA_Responsable Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 6 Titulo Columna: Tipo Actividad Formula Columna: CmpA_TipoActividad Ancho: 10 caracteres Oculta: Si Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 7 Titulo Columna: Accion Formula Columna: CmpA_NombreAccion Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda

132

Totales: No Columna 8 Titulo Columna: Creacion Formula Columna: CmpA_FechaHora Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 9 Titulo Columna: Modificacion Formula Columna: CmpA_Date Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 10 Titulo Columna: Autor Formula Columna: CmpA_Autor Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No * Shared Action AccA_Imprimir * Shared Action AccA_LogOut

VstA_MisActividadesXAutor Actividades en la q el usuario conectado es el responsable categorizadas por autor.

Vista Default: No Frecuencia de

Refrescamiento: Automático

133

Formula de Selección: SELECT @All & (@Trim(CmpA_Responsable) =

@Trim(@V3UserName)) & @Trim(CmpA_NombreActividad) != "Final";

Formula PostOpen: @Command([ViewRefreshFields]); VstA_TodosProcesosAuditXAutor

Todos los trabajos que puedo auditar categorizados por autor.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & @Trim(CmpA_NombreActividad) != "Final" &

@Trim(CmpD_AuditorProceso) = @Trim(@V3UserName); Formula PostOpen: @Command([ViewRefreshFields]); VstA_TodosProcesosFinalizadosAuditXAutor

Actividades finalizadas categorizadas por autor y que puedo auditar.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & @Trim(CmpA_NombreActividad) = "Final" &

@Trim(CmpD_AuditorProceso) = @Trim(@V3UserName); Formula PostOpen: @Command([ViewRefreshFields]); VstA_TodosProcesosFinalizadosXAutor

Actividades finalizadas categorizadas por autor.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & @Trim(CmpA_NombreActividad) = "Final"; Formula PostOpen: @Command([ViewRefreshFields]); VstA_TodosProcesosXAutor

Actividades en el flujo categorizadas por autor.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & @Trim(CmpA_NombreActividad) != "Final";

134

Formula PostOpen: @Command([ViewRefreshFields]); Subcomponentes Columna 1 Titulo Columna: Autor Formula Columna: CmpA_Autor Ancho: 14 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Categorizado Justificación: Izquierda Totales: No Columna 2 Titulo Columna: Proceso Formula Columna: CmpA_NombreProceso Ancho: 11 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 3 Titulo Columna: No asignado Formula Columna: @If(@Trim(CmpA_NombreActividad) =

"Final"; 115; @If(@Trim(CmpA_TipoActividad) = "M"; 114; 120));

Ancho: 2 caracteres Oculta: No Icono: Si Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 4 Titulo Columna: Nombre Trabajo Formula Columna: CmpA_NombreJob Ancho: 12 caracteres Oculta: No Icono: No

135

Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 5 Titulo Columna: Responsable Formula Columna: CmpA_Responsable Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 6 Titulo Columna: Actividad Formula Columna: CmpA_NombreActividad Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No * Shared Action AccA_Imprimir * Shared Action AccA_LogOut

VstA_MisActividadesXFecha Actividades en la q el usuario conectado es el responsable categorizadas por fecha.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & (@Trim(CmpA_Responsable) =

@Trim(@V3UserName)) & @Trim(CmpA_NombreActividad) != "Final";

Formula PostOpen: @Command([ViewRefreshFields]); VstA_MisProcesosXFecha

Trabajos que inicio el usuario que se conecta categorizados por

136

Fecha.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & (@Trim(CmpA_Autor) =

@Trim(@V3UserName)) & @Trim(CmpA_NombreActividad) != "Final";

Formula PostOpen: @Command([ViewRefreshFields]); Subcomponentes Columna 1 Titulo Columna: Fecha Formula Columna: @Text(CmpA_Date; "D0S0"); Ancho: 8 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Categorizado Justificación: Izquierda Totales: No Columna 2 Titulo Columna: Proceso Formula Columna: CmpA_NombreProceso Ancho: 11 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 3 Titulo Columna: No asignado Formula Columna: @If(@Trim(CmpA_NombreActividad) =

"Final"; 115; @If(@Trim(CmpA_TipoActividad) = "M"; 114; 120));

Ancho: 2 caracteres Oculta: No Icono: Si Formato Numero: General

137

Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 4 Titulo Columna: Nombre Trabajo Formula Columna: CmpA_NombreJob Ancho: 12 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 5 Titulo Columna: Responsable Formula Columna: CmpA_Responsable Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 6 Titulo Columna: Actividad Formula Columna: CmpA_NombreActividad Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No * Shared Action AccA_Imprimir * Shared Action AccA_LogOut

VstA_MisActividadesXProc Actividades en la q el usuario conectado es el responsable categorizadas por proceso.

Vista Default: No

138

Frecuencia de Refrescamiento:

Automático

Formula de Selección: SELECT @All & (@Trim(CmpA_Responsable) =

@Trim(@V3UserName)) & @Trim(CmpA_NombreActividad) != "Final";

Formula PostOpen: @Command([ViewRefreshFields]); VstA_MisProcesosFinalizadosXProc

Trabajos que inicio el usuario y que estan finalizados.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & (@Trim(CmpA_Autor) =

@Trim(@V3UserName)) & @Trim(CmpA_NombreActividad) = "Final";

Formula PostOpen: @Command([ViewRefreshFields]); VstA_MisProcesosXProc

Trabajos que inicio el usuario que se conecta categorizados por proceso

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & (@Trim(CmpA_Autor) =

@Trim(@V3UserName)) & @Trim(CmpA_NombreActividad) != "Final";

Formula PostOpen: @Command([ViewRefreshFields]); VstA_TodosProcesosAtrasadosAuditXProc

Trabajos que puedo auditar y que se encuentran en estado atrasado.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & @Trim(CmpA_NombreActividad) != "Final" &

@Trim(CmpA_Atrasado) = "SI" & @Trim(CmpD_AuditorProceso) = @Trim(@V3UserName);

Formula PostOpen: @Command([ViewRefreshFields]);

139

VstA_TodosProcesosAtrasadosXProc

Trabajos que se han iniciado pero que están retrasados.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & @Trim(CmpA_NombreActividad) != "Final" &

@Trim(CmpA_Atrasado) = "SI"; Formula PostOpen: @Command([ViewRefreshFields]); VstA_TodosProcesosAuditXProc

Trabajos que se han iniciado y que puedo auditar.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & @Trim(CmpA_NombreActividad) != "Final" &

@Trim(CmpD_AuditorProceso) = @Trim(@V3UserName); Formula PostOpen: @Command([ViewRefreshFields]); VstA_TodosProcesosFinalizadosAuditXProc

Trabajos que se han finalizado en el que soy el auditor.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & @Trim(CmpA_NombreActividad) = "Final" &

@Trim(CmpD_AuditorProceso) = @Trim(@V3UserName); Formula PostOpen: @Command([ViewRefreshFields]); VstA_TodosProcesosFinalizadosXProc

Trabajos que se han finalizado.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & @Trim(CmpA_NombreActividad) = "Final"; Formula PostOpen: @Command([ViewRefreshFields]); VstA_TodosProcesosXProc

Trabajos que se han iniciado.

140

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & @Trim(CmpA_NombreActividad) != "Final"; Formula PostOpen: @Command([ViewRefreshFields]); Subcomponentes Columna 1 Titulo Columna: Proceso Formula Columna: CmpA_NombreProceso Ancho: 11 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Categorizado Justificación: Izquierda Totales: No Columna 2 Titulo Columna: No asignado Formula Columna: @If(@Trim(CmpA_NombreActividad) =

"Final"; 115; @If(@Trim(CmpA_TipoActividad) = "M"; 114; 120));

Ancho: 2 caracteres Oculta: No Icono: Si Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 3 Titulo Columna: Nombre Trabajo Formula Columna: CmpA_NombreJob Ancho: 12 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No

141

Columna 4 Titulo Columna: Responsable Formula Columna: CmpA_Responsable Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 5 Titulo Columna: Actividad Formula Columna: CmpA_NombreActividad Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No * Shared Action AccA_Imprimir * Shared Action AccA_LogOut

VstA_MisActividades Actividades en la q el usuario conectado es el responsable.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & (@Trim(CmpA_Responsable) =

@V3UserName) & @Trim(CmpA_NombreActividad) != "Final"; Formula PostOpen: @Command([ViewRefreshFields]); Subcomponentes Columna 1 Titulo Columna: No asignado Formula Columna: @If(@Trim(CmpA_NombreActividad) =

"Final"; 115; @If(@Trim(CmpA_TipoActividad) = "M"; 114; 120));

142

Ancho: 2 caracteres Oculta: No Icono: Si Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 2 Titulo Columna: Nombre Trabajo Formula Columna: CmpA_NombreJob Ancho: 16 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 3 Titulo Columna: Responsable Formula Columna: CmpA_Responsable Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 4 Titulo Columna: Proceso Formula Columna: CmpA_NombreProceso Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 5 Titulo Columna: Actividad Formula Columna: CmpA_NombreActividad Ancho: 10 caracteres Oculta: No

143

Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No * Shared Action AccA_Imprimir * Shared Action AccA_LogOut

VstA_MisProcesosAtrasados Trabajos que inicio el usuario que se conecta y que se encuentran retrasados.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & (@Trim(CmpA_Autor) = @V3UserName) &

@Trim(CmpA_NombreActividad) != "Final" & @Trim(CmpA_Atrasado) = "SI";

Formula PostOpen: @Command([ViewRefreshFields]); Subcomponentes Columna 1 Titulo Columna: No asignado Formula Columna: @If(@Trim(CmpA_NombreActividad) =

"Final"; 115; @If(@Trim(CmpA_TipoActividad) = "M"; 114; 120));

Ancho: 2 caracteres Oculta: No Icono: Si Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 2 Titulo Columna: Nombre Trabajo Formula Columna: CmpA_NombreJob Ancho: 16 caracteres Oculta: No Icono: No

144

Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 3 Titulo Columna: Responsable Formula Columna: CmpA_Responsable Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 4 Titulo Columna: Proceso Formula Columna: CmpA_NombreProceso Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 5 Titulo Columna: Actividad Formula Columna: CmpA_NombreActividad Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 6 Titulo Columna: Tipo Actividad Formula Columna: CmpA_TipoActividad Ancho: 10 caracteres Oculta: Si Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47

145

Ordenado: No Justificación: Izquierda Totales: No Columna 7 Titulo Columna: Accion Formula Columna: CmpA_NombreAccion Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 8 Titulo Columna: Creacion Formula Columna: CmpA_FechaHora Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 9 Titulo Columna: Modificacion Formula Columna: CmpA_Date Ancho: 13 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 10 Titulo Columna: Autor Formula Columna: CmpA_Autor Ancho: 15 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda

146

Totales: No * Shared Action AccA_Imprimir * Shared Action AccA_LogOut

VstA_MisProcesosFinalizadosXDia Trabajos que inicio el usuario y que estan finalizados.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & (@Trim(CmpA_Autor) =

@Trim(@V3UserName)) & @Trim(CmpA_NombreActividad) = "Final";

Formula PostOpen: @Command([ViewRefreshFields]); Subcomponentes Columna 1 Titulo Columna: Fecha Formula Columna: @Text(CmpA_Date; "D0S0"); Ancho: 9 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Descendente Categorizado Justificación: Izquierda Totales: No Columna 2 Titulo Columna: Proceso Formula Columna: CmpA_NombreProceso Ancho: 12 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 3 Titulo Columna: No asignado Formula Columna: @If(@Trim(CmpA_NombreActividad) =

"Final"; 115;

147

@If(@Trim(CmpA_TipoActividad) = "M"; 114; 120));

Ancho: 2 caracteres Oculta: No Icono: Si Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Centro Totales: No Columna 4 Titulo Columna: Nombre Trabajo Formula Columna: CmpA_NombreJob Ancho: 16 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 5 Titulo Columna: Responsable Formula Columna: CmpA_Responsable Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 6 Titulo Columna: Actividad Formula Columna: CmpA_NombreActividad Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 7 Titulo Columna: Tipo Actividad Formula Columna: CmpA_TipoActividad

148

Ancho: 10 caracteres Oculta: Si Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 8 Titulo Columna: Accion Formula Columna: CmpA_NombreAccion Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 9 Titulo Columna: Autor Formula Columna: CmpA_Autor Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No * Shared Action AccA_Imprimir * Shared Action AccA_LogOut

VstA_MisProcesosFinalizadosXMes Trabajos que inicio el usuario y que estan finalizados.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & (@Trim(CmpA_Autor) =

@Trim(@V3UserName)) & @Trim(CmpA_NombreActividad) = "Final";

Formula PostOpen: @Command([ViewRefreshFields]);

149

Subcomponentes Columna 1 Titulo Columna: Fecha Formula Columna: mes := @Month(CmpA_Date);@If(mes =

1; mes := "Enero"; "");@If(mes = 2; mes := "Febrero"; "");@If(mes = 3; mes := "Marzo"; "");@If(mes = 4; mes := "Abril"; "");@If(mes = 5; mes := "Mayo"; "");@If(mes = 6; mes := "Junio"; "");@If(mes = 7; mes := "Julio"; "");@If(mes = 8; mes := "Agosto"; "");@If(mes = 9; mes := "Septiembre"; "");@If(mes = 10; mes := "Octubre"; "");@If(mes = 11; mes := "Noviembre"; "");@If(mes = 12; mes := "Diciembre"; "");anio := @Year(@Modified);mostrar := @Text(mes) + " " + @Text(anio);mostrar;

Ancho: 9 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Categorizado Justificación: Izquierda Totales: No Columna 2 Titulo Columna: Día Formula Columna: @Day(CmpA_Date); Ancho: 4 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Centro Totales: No Columna 3 Titulo Columna: Proceso Formula Columna: CmpA_NombreProceso Ancho: 12 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47

150

Ordenado: No Justificación: Izquierda Totales: No Columna 4 Titulo Columna: No asignado Formula Columna: @If(@Trim(CmpA_NombreActividad) =

"Final"; 115; @If(@Trim(CmpA_TipoActividad) = "M"; 114; 120));

Ancho: 2 caracteres Oculta: No Icono: Si Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Centro Totales: No Columna 5 Titulo Columna: Nombre Trabajo Formula Columna: CmpA_NombreJob Ancho: 16 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 6 Titulo Columna: Responsable Formula Columna: CmpA_Responsable Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 7 Titulo Columna: Actividad Formula Columna: CmpA_NombreActividad Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General

151

Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 8 Titulo Columna: Tipo Actividad Formula Columna: CmpA_TipoActividad Ancho: 10 caracteres Oculta: Si Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 9 Titulo Columna: Accion Formula Columna: CmpA_NombreAccion Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 10 Titulo Columna: Autor Formula Columna: CmpA_Autor Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No * Shared Action AccA_Imprimir * Shared Action AccA_LogOut

VstA_MisProcesosFinalizados Trabajos que inicio el usuario y que estan finalizados.

Vista Default: No

152

Frecuencia de Refrescamiento:

Automático

Formula de Selección: SELECT @All & (@Trim(CmpA_Autor) =

@Trim(@V3UserName)) & @Trim(CmpA_NombreActividad) = "Final";

Formula PostOpen: @Command([ViewRefreshFields]); Subcomponentes Columna 1 Titulo Columna: No asignado Formula Columna: @If(@Trim(CmpA_NombreActividad) =

"Final"; 115; @If(@Trim(CmpA_TipoActividad) = "M"; 114; 120));

Ancho: 2 caracteres Oculta: No Icono: Si Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 2 Titulo Columna: Nombre Trabajo Formula Columna: CmpA_NombreJob Ancho: 16 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 3 Titulo Columna: Proceso Formula Columna: CmpA_NombreProceso Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Categorizada Justificación: Izquierda Totales: No

153

Columna 4 Titulo Columna: Actividad Formula Columna: CmpA_NombreActividad Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 5 Titulo Columna: Accion Formula Columna: CmpA_NombreAccion Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 6 Titulo Columna: Responsable Formula Columna: CmpA_Responsable Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 7 Titulo Columna: Tipo Actividad Formula Columna: CmpA_TipoActividad Ancho: 10 caracteres Oculta: Si Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 8 Titulo Columna: Creacion

154

Formula Columna: CmpA_FechaHora Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 9 Titulo Columna: Modificacion Formula Columna: CmpA_Date Ancho: 13 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 10 Titulo Columna: Autor Formula Columna: CmpA_Autor Ancho: 15 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No * Shared Action AccA_Imprimir * Shared Action AccA_LogOut

VstA_MisProcesos Trabajos que inicio el usuario que se conecta.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & (@Trim(CmpA_Autor) = @V3UserName) &

@Trim(CmpA_NombreActividad) != "Final"; Formula PostOpen: @Command([ViewRefreshFields]);

155

Subcomponentes Columna 1 Titulo Columna: No asignado Formula Columna: @If(@Trim(CmpA_NombreActividad) =

"Final"; 115; @If(@Trim(CmpA_TipoActividad) = "M"; 114; 120));

Ancho: 2 caracteres Oculta: No Icono: Si Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 2 Titulo Columna: Nombre Trabajo Formula Columna: CmpA_NombreJob Ancho: 16 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 3 Titulo Columna: Responsable Formula Columna: CmpA_Responsable Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 4 Titulo Columna: Proceso Formula Columna: CmpA_NombreProceso Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47

156

Ordenado: No Justificación: Izquierda Totales: No Columna 5 Titulo Columna: Actividad Formula Columna: CmpA_NombreActividad Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 6 Titulo Columna: Tipo Actividad Formula Columna: CmpA_TipoActividad Ancho: 10 caracteres Oculta: Si Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Columna 7 Titulo Columna: Accion Formula Columna: CmpA_NombreAccion Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 8 Titulo Columna: Creacion Formula Columna: CmpA_FechaHora Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No

157

Columna 9 Titulo Columna: Modificacion Formula Columna: CmpA_Date Ancho: 13 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 10 Titulo Columna: Autor Formula Columna: CmpA_Autor Ancho: 15 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No * Shared Action AccA_Imprimir * Shared Action AccA_LogOut

VstA_PlazoAct Vista en la q se muestran solo las actividades con plazo.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & CmpA_EstadoPlazo = "P" &

@Trim(CmpA_PlazoActividadEnHoras) != "" & @Trim(CmpA_NombreActividad) != "Final";

Subcomponentes Columna 1 Titulo Columna: Estado Plazo Formula Columna: CmpA_EstadoPlazo Ancho: 10 caracteres Oculta: No Icono: No

158

Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 2 Titulo Columna: Tiempo de plazo Formula Columna: CmpA_PlazoActividadEnHoras Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No

VstA_TodosProcesosAuditXMes Trabajos que puedo auditar.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & @Trim(CmpA_NombreActividad) != "Final" &

@Trim(CmpD_AuditorProceso) = @Trim(@V3UserName); Formula PostOpen: @Command([ViewRefreshFields]); Subcomponentes Columna 1 Titulo Columna: Fecha Formula Columna: mes := @Month(CmpA_Date);@If(mes =

1; mes := "Enero"; "");@If(mes = 2; mes := "Febrero"; "");@If(mes = 3; mes := "Marzo"; "");@If(mes = 4; mes := "Abril"; "");@If(mes = 5; mes := "Mayo"; "");@If(mes = 6; mes := "Junio"; "");@If(mes = 7; mes := "Julio"; "");@If(mes = 8; mes := "Agosto"; "");@If(mes = 9; mes := "Septiembre"; "");@If(mes = 10; mes := "Octubre"; "");@If(mes = 11; mes := "Noviembre"; "");@If(mes = 12; mes := "Diciembre"; "");anio := @Year(@Modified);mostrar :=

159

@Text(mes) + " " + @Text(anio);mostrar; Ancho: 9 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Categorizado Justificación: Izquierda Totales: No Columna 2 Titulo Columna: Día Formula Columna: @Day(CmpA_Date); Ancho: 4 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Descendente Justificación: Centro Totales: No Columna 3 Titulo Columna: Proceso Formula Columna: CmpA_NombreProceso Ancho: 12 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 4 Titulo Columna: No asignado Formula Columna: @If(@Trim(CmpA_NombreActividad) =

"Final"; 115; @If(@Trim(CmpA_TipoActividad) = "M"; 114; 120));

Ancho: 2 caracteres Oculta: No Icono: Si Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Centro Totales: No Columna 5

160

Titulo Columna: Nombre Trabajo Formula Columna: CmpA_NombreJob Ancho: 16 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 6 Titulo Columna: Responsable Formula Columna: CmpA_Responsable Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 7 Titulo Columna: Actividad Formula Columna: CmpA_NombreActividad Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 8 Titulo Columna: Tipo Actividad Formula Columna: CmpA_TipoActividad Ancho: 10 caracteres Oculta: Si Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 9 Titulo Columna: Accion Formula Columna: CmpA_NombreAccion

161

Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 10 Titulo Columna: Autor Formula Columna: CmpA_Autor Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No * Shared Action AccA_Imprimir * Shared Action AccA_LogOut

VstA_TodosProcesosFinalizadosAuditXMes Trabajos que estan finalizados y que puedo auditar.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & @Trim(CmpA_NombreActividad) = "Final" &

@Trim(CmpD_AuditorProceso) = @Trim(@V3UserName); Formula PostOpen: @Command([ViewRefreshFields]); Subcomponentes Columna 1 Titulo Columna: Fecha Formula Columna: mes := @Month(CmpA_Date);@If(mes =

1; mes := "Enero"; "");@If(mes = 2; mes := "Febrero"; "");@If(mes = 3; mes := "Marzo"; "");@If(mes = 4; mes := "Abril"; "");@If(mes = 5; mes := "Mayo"; "");@If(mes = 6; mes := "Junio"; "");@If(mes = 7; mes := "Julio"; "");@If(mes = 8; mes := "Agosto";

162

"");@If(mes = 9; mes := "Septiembre"; "");@If(mes = 10; mes := "Octubre"; "");@If(mes = 11; mes := "Noviembre"; "");@If(mes = 12; mes := "Diciembre"; "");anio := @Year(@Modified);mostrar := @Text(mes) + " " + @Text(anio);mostrar;

Ancho: 9 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Categorizado Justificación: Izquierda Totales: No Columna 2 Titulo Columna: Día Formula Columna: @Day(CmpA_Date); Ancho: 4 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Descendente Justificación: Centro Totales: No Columna 3 Titulo Columna: Proceso Formula Columna: CmpA_NombreProceso Ancho: 12 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 4 Titulo Columna: No asignado Formula Columna: @If(@Trim(CmpA_NombreActividad) =

"Final"; 115; @If(@Trim(CmpA_TipoActividad) = "M"; 114; 120));

Ancho: 2 caracteres Oculta: No Icono: Si Formato Numero: General

163

Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Centro Totales: No Columna 5 Titulo Columna: Nombre Trabajo Formula Columna: CmpA_NombreJob Ancho: 16 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 6 Titulo Columna: Responsable Formula Columna: CmpA_Responsable Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 7 Titulo Columna: Actividad Formula Columna: CmpA_NombreActividad Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 8 Titulo Columna: Tipo Actividad Formula Columna: CmpA_TipoActividad Ancho: 10 caracteres Oculta: Si Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No

164

Justificación: Izquierda Totales: No Columna 9 Titulo Columna: Accion Formula Columna: CmpA_NombreAccion Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 10 Titulo Columna: Autor Formula Columna: CmpA_Autor Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No * Shared Action AccA_Imprimir * Shared Action AccA_LogOut

VstA_TodosProcesosFinalizadosXMes Trabajos que estan finalizados.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & @Trim(CmpA_NombreActividad) = "Final"; Formula PostOpen: @Command([ViewRefreshFields]); Subcomponentes Columna 1 Titulo Columna: Fecha Formula Columna: mes := @Month(CmpA_Date);@If(mes =

1; mes := "Enero"; "");@If(mes = 2; mes := "Febrero"; "");@If(mes = 3; mes := "Marzo"; "");@If(mes = 4; mes := "Abril";

165

"");@If(mes = 5; mes := "Mayo"; "");@If(mes = 6; mes := "Junio"; "");@If(mes = 7; mes := "Julio"; "");@If(mes = 8; mes := "Agosto"; "");@If(mes = 9; mes := "Septiembre"; "");@If(mes = 10; mes := "Octubre"; "");@If(mes = 11; mes := "Noviembre"; "");@If(mes = 12; mes := "Diciembre"; "");anio := @Year(@Modified);mostrar := @Text(mes) + " " + @Text(anio);mostrar;

Ancho: 9 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Categorizado Justificación: Izquierda Totales: No Columna 2 Titulo Columna: Día Formula Columna: @Day(CmpA_Date); Ancho: 4 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Descendente Justificación: Centro Totales: No Columna 3 Titulo Columna: Proceso Formula Columna: CmpA_NombreProceso Ancho: 12 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 4 Titulo Columna: No asignado Formula Columna: @If(@Trim(CmpA_NombreActividad) =

"Final"; 115; @If(@Trim(CmpA_TipoActividad) = "M"; 114; 120));

166

Ancho: 2 caracteres Oculta: No Icono: Si Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Centro Totales: No Columna 5 Titulo Columna: Nombre Trabajo Formula Columna: CmpA_NombreJob Ancho: 16 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 6 Titulo Columna: Responsable Formula Columna: CmpA_Responsable Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 7 Titulo Columna: Actividad Formula Columna: CmpA_NombreActividad Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 8 Titulo Columna: Tipo Actividad Formula Columna: CmpA_TipoActividad Ancho: 10 caracteres Oculta: Si

167

Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 9 Titulo Columna: Accion Formula Columna: CmpA_NombreAccion Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 10 Titulo Columna: Autor Formula Columna: CmpA_Autor Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No * Shared Action AccA_Imprimir * Shared Action AccA_LogOut

VstA_TodosProcesosXMes Trabajos que no estan finalizados.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & @Trim(CmpA_NombreActividad) != "Final"; Formula PostOpen: @Command([ViewRefreshFields]); Subcomponentes Columna 1

168

Titulo Columna: Fecha Formula Columna: mes := @Month(CmpA_Date);@If(mes =

1; mes := "Enero"; "");@If(mes = 2; mes := "Febrero"; "");@If(mes = 3; mes := "Marzo"; "");@If(mes = 4; mes := "Abril"; "");@If(mes = 5; mes := "Mayo"; "");@If(mes = 6; mes := "Junio"; "");@If(mes = 7; mes := "Julio"; "");@If(mes = 8; mes := "Agosto"; "");@If(mes = 9; mes := "Septiembre"; "");@If(mes = 10; mes := "Octubre"; "");@If(mes = 11; mes := "Noviembre"; "");@If(mes = 12; mes := "Diciembre"; "");anio := @Year(@Modified);mostrar := @Text(mes) + " " + @Text(anio);mostrar;

Ancho: 9 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Categorizado Justificación: Izquierda Totales: No Columna 2 Titulo Columna: Día Formula Columna: @Day(CmpA_Date); Ancho: 4 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Descendente Justificación: Centro Totales: No Columna 3 Titulo Columna: Proceso Formula Columna: CmpA_NombreProceso Ancho: 12 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 4

169

Titulo Columna: No asignado Formula Columna: @If(@Trim(CmpA_NombreActividad) =

"Final"; 115; @If(@Trim(CmpA_TipoActividad) = "M"; 114; 120));

Ancho: 2 caracteres Oculta: No Icono: Si Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Centro Totales: No Columna 5 Titulo Columna: Nombre Trabajo Formula Columna: CmpA_NombreJob Ancho: 16 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 6 Titulo Columna: Responsable Formula Columna: CmpA_Responsable Ancho: 18 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 7 Titulo Columna: Actividad Formula Columna: CmpA_NombreActividad Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No

170

Columna 8 Titulo Columna: Tipo Actividad Formula Columna: CmpA_TipoActividad Ancho: 10 caracteres Oculta: Si Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 9 Titulo Columna: Accion Formula Columna: CmpA_NombreAccion Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 10 Titulo Columna: Autor Formula Columna: CmpA_Autor Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No * Shared Action AccA_Imprimir * Shared Action AccA_LogOut

VstA_TodosTrabajos Reporte de todos los trabajos creados.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All; Formula PostOpen: @Command([ViewRefreshFields]);

171

Subcomponentes Columna 1 Titulo Columna: Nombre Trabajo Formula Columna: CmpA_NombreJob Ancho: 16 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 2 Titulo Columna: No asignado Formula Columna: @If(@Trim(CmpA_NombreActividad) =

"Final"; 115; @If(@Trim(CmpA_TipoActividad) = "M"; 114; 120));

Ancho: 2 caracteres Oculta: No Icono: Si Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Centro Totales: No Columna 3 Titulo Columna: Responsable Formula Columna: CmpA_Responsable Ancho: 16 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 4 Titulo Columna: CodProceso Formula Columna: CmpA_NombreProceso Ancho: 10 caracteres Oculta: Si Icono: No Formato Numero: General

172

Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 5 Titulo Columna: Actividad Formula Columna: CmpA_NombreActividad Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 6 Titulo Columna: Tipo Actividad Formula Columna: CmpA_TipoActividad Ancho: 10 caracteres Oculta: Si Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 7 Titulo Columna: Accion Formula Columna: CmpA_NombreAccion Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No Columna 8 Titulo Columna: Creacion Formula Columna: CmpA_FechaHora Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No

173

Justificación: Izquierda Totales: No Columna 9 Titulo Columna: Modificacion Formula Columna: CmpA_Date Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 10 Titulo Columna: Autor Formula Columna: CmpA_Autor Ancho: 10 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No * Shared Action AccA_Imprimir * Shared Action AccA_LogOut

(VstA_ActAutomat) Reporte de todos los trabajos que deben ejecutar una actividad automática.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & CmpA_TipoActividad = "A"; Subcomponentes Columna 1 Titulo Columna: Tipo Actividad Formula Columna: CmpA_TipoActividad Ancho: 10 caracteres Oculta: Si

174

Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 2 Titulo Columna: Nombre Agente Formula Columna: CmpA_NombreAgente Ancho: 15 caracteres Oculta: No Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No

(VstA_Migracion) Reporte de todos los trabajos que están en estado finalizado.

Vista Default: No Frecuencia de

Refrescamiento: Automático

Formula de Selección: SELECT @All & @Trim(CmpA_NombreActividad) = "Final"; Subcomponentes Columna 1 Titulo Columna: NombreActividad Formula Columna: CmpA_NombreActividad Ancho: 10 caracteres Oculta: Si Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: Ascendente Justificación: Izquierda Totales: No Columna 2 Titulo Columna: Fecha ult modif Formula Columna: CmpA_Date Ancho: 15 caracteres Oculta: No

175

Icono: No Formato Numero: General Formato Fecha: 26/09/2006 20:17:47 Ordenado: No Justificación: Izquierda Totales: No

Agentes

AgA_ActividadesAutomaticas Agente programado que ejecutará actividades automáticas.

Agente Compartido: Si Estado: Activo Trigger: Calendarizado Intervalo: Mas de una vez al día Actuar sobre: Todos los documentos nuevos y

modificados desde la última ejecución. Código LotusScript (Globales) Option Public

Use "ScrA_WorkFlow" Dim doc As NotesDocument

Sub Initialize Dim session As New NotesSession Dim db As NotesDatabase Dim vw As NotesView Dim colecciondoc As NotesDocumentCollection Dim AgenteActividadAutomatica As NotesAgent Set db= session.CurrentDatabase Set vw=db.GetView("(VstA_ActAutomat)") Set colecciondoc=vw.GetAllDocumentsByKey("A") If Not colecciondoc.Count=0 Then Set doc=colecciondoc.GetFirstDocument While Not (doc Is Nothing) If doc.GetItemValue("CmpA_TipoActividad")(0)="A" Then Set AgenteActividadAutomatica=db.GetAgent(doc.GetItemValue("CmpA_NombreAgente")(0)) If AgenteActividadAutomatica.Run<>0 Then

176

Print "No se pudo ejecutar agente "+doc.GetItemValue("CmpA_NombreAgente")(0) Else Print "Se ejecutó agente "+doc.GetItemValue("CmpA_NombreAgente")(0) Call GrabaLogAgent() Call CargarSiguienteActividad(doc) Call doc.Save(True,True) End If End If Set doc=colecciondoc.GetNextDocument(doc) Wend End If Print "Fin de ejecucion de tareas automaticas" End Sub Sub GrabaLogAgent() Dim db As NotesDatabase Dim session As New NotesSession Dim ws As NotesUIWorkspace Dim uidoc As NotesUIDocument Dim actividad As Variant Dim responsable As Variant Dim accion As Variant Dim observacion As Variant Dim datetime As Variant Dim nombreproceso As String Dim nombreactividad As String Dim actividadstr As String Dim responsablestr As String Dim accionstr As String Dim observacionstr As String Dim datetimestr As String 'Set db=session.CurrentDatabase 'Set ws= New NotesUIWorkspace 'Set uidoc=ws.CurrentDocument If doc.IsNewNote Then nombreproceso= doc.GetItemValue("CmpA_NombreProceso")(0) Call doc.ReplaceItemValue("CmpA_LCodProceso",nombreproceso) Call doc.ReplaceItemValue("CmpA_LNombreJob",uidoc.FieldGetText("CmpA_NombreJob")) nombreactividad=doc.GetItemValue("CmpA_NombreActividad")(0)

177

Call doc.ReplaceItemValue("CmpA_LCodActividadActual",nombreactividad) Call doc.ReplaceItemValue("CmpA_LResponsable", doc.GetItemValue("CmpA_Responsable")) Call doc.ReplaceItemValue("CmpA_LDateTime",Format(Now, "General Date")) Else nombreactividad=doc.GetItemValue("CmpA_NombreActividad")(0) actividad=doc.CmpA_LCodActividadActual Forall i In actividad actividadstr=actividadstr+i+"," End Forall Call doc.ReplaceItemValue("CmpA_LCodActividadActual",actividadstr+nombreactividad) responsable=doc.CmpA_LResponsable Forall i In responsable responsablestr=responsablestr+i+"," End Forall Call doc.ReplaceItemValue("CmpA_LResponsable",responsablestr+ "ACTIVIDAD AUTOMATICA") accion=doc.CmpA_LAccion Forall i In accion accionstr=accionstr+i+"," End Forall Call doc.ReplaceItemValue("CmpA_LAccion",accionstr+ "...") observacion=doc.CmpA_LObservacion Forall i In observacion observacionstr=observacionstr+i+"," End Forall Call doc.ReplaceItemValue("CmpA_LObservacion",observacionstr+ "...") datetime=doc.CmpA_LDateTime Forall i In datetime datetimestr=datetimestr+i+"," End Forall Call doc.ReplaceItemValue("CmpA_LDateTime",datetimestr+Format(Now, "General Date")) End If End Sub Function CargarSiguienteActividad(DocContext As

178

NotesDocument) As String Dim Vista_ProActAcc As NotesView Dim Vista_ProAct As NotesView Dim DocProc As NotesDocument Dim DocProcAct As NotesDocument Dim DocProAct As NotesDocument Dim DocCollecProActAcc As NotesDocumentCollection Dim DocAccion As NotesDocument Dim KeyLookFor As String Dim Siguient_Actividad As String Dim TipoAccionSimpleCondicion As String Dim DecicionSeleccionada As String Dim CondiciondeAcc As String Dim ResponsableTarea As String Dim Acciones As String Dim SecuenciaAcciones As String Dim Tipo_Accion As String Dim CondiciónSinAsterisco As String Dim Opciones As String Dim NombreAccion As String Dim CondicionSeleccionadaporUsuario As String Dim ActividadConSinPlazo As String Dim CantidadTiempo As Integer Dim Unidad_Tiempo As String Dim NOMBRE_AGENTE As String Dim NombreActiv As String Dim EsInicial As String Dim IniciadordeFlujo As String Dim SessionSig_Act As New NotesSession Dim DocumSave As NotesDocument Dim Vista As NotesView Dim BaseActual As NotesDatabase Dim DocumClose As NotesDocument Dim VistaVar As String Dim item As NotesItem Dim tipoclient As Variant Cod_Pro=DocContext.CmpA_CodProceso(0) Cod_Act=DocContext.CmpA_CodActividadActual(0) Cod_Acc="1" If Trim(Cod_Acc)="" Then 'Msgbox "no selecciono la opcion" Call MostrarMensaje("No ha seleccionado ninguna acción." , "Web") Else Dim dbApp As NotesDatabase Set dbApp = SessionSig_Act.CurrentDatabase

179

End If If Not ConexionBDDefProcesos Then 'Msgbox "La base no ha sido abierta",,"Error de acceso a base" CargarSiguienteActividad="BaseNoAbierta" Exit Function End If Dim Opcion As String Opcion=DocContext.CmpA_ListaOpciones(0) DecicionSeleccionada=DocContext.CmpA_Condicion(0) KeyLookFor=Trim(Cod_Pro)+"-"+Trim(Cod_Act)+"-"+Trim(Cod_Acc) Set Vista_ProActAcc=dbDefProceso.GetView("VstD_ProcYActiYAcci") Set DocAccion = Vista_ProActAcc.GetDocumentByKey(KeyLookFor) If Not (DocAccion Is Nothing) Then Siguient_Actividad=Implode(DocAccion.CmpD_AccSiguienteActividad) TipoAccionSimpleCondicion=DocAccion.CmpD_RdoTipo(0) CondiciondeAcc=Implode(DocAccion.CmpD_Lista,",") NombreAccion=DocAccion.CmpD_NombreAccion(0) End If DocContext.CmpA_NombreAccion=NombreAccion If Trim(TipoAccionSimpleCondicion)="C" Then Dim CondicionesIguales As Boolean CondiciónSinAsterisco ="" For x=1 To Len(CondiciondeAcc) Chara=Mid(CondiciondeAcc,x,1) If chara<>"*" Then CondiciónSinAsterisco =CondiciónSinAsterisco +Chara End If Next CondiciónSinAsterisco =CondiciónSinAsterisco +"," For x=1 To Len(CondiciónSinAsterisco ) If Mid(CondiciónSinAsterisco,x,1)<>"," Then Opciones=Opciones+Mid(CondiciónSinAsterisco,x,1) Else CondicionSeleccionadaporUsuario= DocContext.CmpA_Condicion(0) Dim Condicon As String Dim CodigoAccion As String

180

Dim Parte_Accion As Variant Dim Cond As Integer Parte_Accion = Split(Opciones,"=") 'Con el Split logramos partir a partir del = los datos que estan antes y despues de el. en la posicion 0 y 1 Condicon=Parte_Accion(0) Siguient_Actividad=Parte_Accion(1) If Trim(CondicionSeleccionadaporUsuario)="" Then CargarSiguienteActividad="CampoCondicionVacio" Exit Function End If If Trim(Condicon)=Trim(CondicionSeleccionadaporUsuario) Then CondicionesIguales =True DocContext.CmpA_CodActividadActual=Siguient_Actividad DocContext.CmpA_NombreAccion=NombreAccion Exit For End If Opciones="" End If Next x If CondicionesIguales =False Then CargarSiguienteActividad="CondicionNoIgual" Exit Function End If Else DocContext.CmpA_CodActividadActual=Siguient_Actividad DocContext.CmpA_NombreAccion=NombreAccion End If Acciones="" SecuenciaAcciones="" If Siguient_Actividad ="Final" Then DocContext.CmpA_NombreActividad="Final" DocContext.CmpA_Time=Now DocContext.CmpA_Date=Now CargarSiguienteActividad="FlujoYaFinalizo" Call DocContext.Save(True,False) Exit Function End If KeyLookFor=Trim(Str(Cod_Pro))+"-"+Trim(Siguient_Actividad)+"-"

181

Set Vista_ProAct=dbDefProceso.GetView("VstD_ProcYActiYAcci") Set DocCollecProAct = Vista_ProAct.GetAllDocumentsByKey(KeyLookFor) Set DocProcAct =DocCollecProAct.GetFirstDocument While Not (DocProcAct Is Nothing) CodAccion=Implode(DocProcAct.CmpD_CodigoAccion) Tipo_Accion=Implode(DocProcAct.CmpD_RdoTipo) SecuenciaAcciones =SecuenciaAcciones +CodAccion+"-"+Tipo_Accion+"," Acciones=Acciones+Trim(DocProcAct.CmpD_NombreAccion(0))+"|"+CodAccion +"," Set DocProcAct =DocCollecProAct.GetNextDocument(DocProcAct ) Wend Acciones=Mid(Acciones,1,Len(Acciones)-1) DocContext.Opciones=Acciones DocContext.CmpA_TipoAccion=SecuenciaAcciones IniciadordeFlujo=DocContext.CmpA_Autor(0) KeyLookFor=Trim(Str(Cod_Pro))+"-"+Trim(Siguient_Actividad) Set Vista_ProAct=dbDefProceso.GetView("VstD_ProcYActividades") Set DocProAct = Vista_ProAct.GetDocumentByKey(KeyLookFor,False) If Not DocProAct Is Nothing Then EsInicial$= DocProAct.CmpD_ActividadInicial(0) If EsInicial$="Si" Then ResponTarea=IniciadordeFlujo Else ResponsableTarea=DocProAct.CmpD_ResponsableAct(0) ResponTarea=ObtieneNombreResponsable(ResponsableTarea) End If ActividadConSinPlazo=Implode(DocProAct.CmpD_EstadoPlazoAct) CantidadTiempo=Val(DocProAct.CmpD_ActTiempoPlazo(0)) Unidad_Tiempo=Implode(DocProAct.CmpD_ActPlazoDH) TipoActividad=DocProAct.CmpD_TipoActividad(0) NOMBRE_AGENTE=Implode(DocProAct.CmpD_NombreAgente)

182

NombreActiv=Implode(DocProAct.CmpD_NombreActividad) End If DocContext.CmpA_Responsable=ResponTarea DocContext.CmpA_CodRol=ResponsableTarea If Trim(ActividadConSinPlazo)="A" Then 'La A significa que si hay plazo en la actividad DocContext.CmpA_EstadoPlazo="P" DocContext.CmpA_PlazoActividadEnHoras=Trim(Str(CantidadTiempo)) DocContext.CmpA_TipoPlazo=Unidad_Tiempo Else DocContext.CmpA_EstadoPlazo="NP" End If DocContext.CmpA_NombreActividad=NombreActiv DocContext.CmpA_TipoActividad=TipoActividad DocContext.CmpA_Time=Now DocContext.CmpA_Date=Now If Trim(TipoActividad)="A" Then DocContext.CmpA_NombreAgente=NOMBRE_AGENTE Else DocContext.CmpA_NombreAgente="-" End If DocContext.CmpA_Observacion="" CargarSiguienteActividad="Ejecutado" Call DocContext.Save(True,False) End Function

AgA_CargarSiguienteActNotes Agente que cargará la actividad siguiente si se ejecuta desde el cliente notes.

Agente Compartido: Si Estado: Activo Trigger: Manual Actuar sobre: Ninguno. Código LotusScript (Globales) Option Public

Use "ScrA_WorkFlow" Use "ScrA_EnvioAlertas" Dim Vista_ProActAcc As NotesView

183

Dim Vista_ProAct As NotesView Dim DocProc As NotesDocument Dim DocProcAct As NotesDocument Dim DocCollec As NotesDocumentCollection Dim DocCollecProAct As NotesDocumentCollection Dim DocCollecProActAcc As NotesDocumentCollection Dim uidocu As NotesUIDocument Dim Doc As NotesDocument Dim KeyLookFor As String Dim Siguient_Actividad As String Dim TipoAccionSimpleCondicion As String Dim DecicionSeleccionada As String Dim CondiciondeAcc As String Dim ResponsableTarea As String Dim Acciones As String Dim SecuenciaAcciones As String Dim Tipo_Accion As String Dim CondiciónSinAsterisco As String Dim Opciones As String Dim NombreAccion As String Dim CondicionSeleccionadaporUsuario As String Dim ActividadConSinPlazo As String Dim CantidadTiempo As Integer Dim Unidad_Tiempo As String Dim NOMBRE_AGENTE As String Dim NombreActiv As String Dim CondicionesIguales As Boolean Dim Condicon As String Dim CodigoAccion As String Dim Parte_Accion As Variant Dim Cond As Integer Dim EstadoEnviaCorreo As String Dim MensajeAresp As String

Sub Initialize

Dim workspace As New NotesUIWorkspace Dim OpcSel As String Dim Cod_Pro,Cod_Act,Cod_Acc As String Set uidocu = workspace.CurrentDocument Set Doc =uidocu.Document OpcSel =uidocu.FieldGetText("CmpA_ListaOpciones") If Trim(OpcSel )="" Then Msgbox "Debe seleccionar la opción que desea ejecutar",,"Seleccione una opción" Else Call uidocu.FieldsetText("CmpA_Accion",Doc.CmpA_ListaOpciones(0)) Call uidocu.FieldsetText("CmpA_Atrasado","")

184

Cod_Pro=uidocu.FieldgetText("CmpA_CodProceso") Cod_Act=uidocu.FieldgetText("CmpA_CodActividadActual") Cod_Acc =uidocu.FieldgetText("CmpA_Accion") estado$ = CargarSiguienteActividad(Val(Cod_Pro),Val(Cod_Act) ,Val(Cod_Acc)) If estado$= "Ejecutado" Or estado$= "FlujoYaFinalizo" Then Call uidocu.FieldsetText("CmpA_Observacion","") Call uidocu.Save() Call uidocu.Close(True) Else If estado$="BaseNoAbierta" Then Error_Log$="ERROR: "+Format(Now, "General Date")+" - No se encuentra la base de datos, revise el documento de configuración." Call uidocu.FieldClear("CmpA_LogError") Call uidocu.FieldSetText("CmpA_LogError",Error_Log$) End If If estado$="CondicionNoIgual" Then Error_Log$="ERROR: "+Format(Now, "General Date")+" - La condición de la actividad de código: ''"+Cod_Act+"'' no esta bien definida en el formulario." Call uidocu.FieldClear("CmpA_LogError") Call uidocu.FieldSetText("CmpA_LogError",Error_Log$) End If If estado$="CampoCondicionVacio" Then Error_Log$="ERROR: "+Format(Now, "General Date")+ "- El campo requerido para la condición del flujo no esta lleno, el flujo se detendra. Informe de este error al administrador." Call uidocu.FieldClear("CmpA_LogError") Call uidocu.FieldSetText("CmpA_LogError",Error_Log$) End If Call uidocu.Save() End If End If End Sub Private Function CargarSiguienteActividad(Cod_Pro As Integer, Cod_Act As Integer, Cod_Acc As Integer) As String Dim workspace As New NotesUIWorkspace Set uidocu = workspace.CurrentDocument Dim IniciadordeFlujo As String

185

Dim EsInicial As String If Not ConexionBDDefProcesos Then Msgbox "La base no ha sido abierta",,"Error de acceso a base" CargarSiguienteActividad="BaseNoAbierta" Exit Function End If DecicionSeleccionada=uidocu.FieldGetText("CmpA_Condicion") KeyLookFor=Trim(Str(Cod_Pro))+"-"+Trim(Str(Cod_Act))+"-"+Trim(Str(Cod_Acc)) Set Vista_ProActAcc=dbDefProceso.GetView("VstD_ProcYActiYAcci") Set DocCollecProActAcc = Vista_ProActAcc.GetAllDocumentsByKey(KeyLookFor) Set DocProcActAcc =DocCollecProActAcc.GetFirstDocument While Not (DocProcActAcc Is Nothing) Siguient_Actividad=Implode(DocProcActAcc.CmpD_AccSiguienteActividad) TipoAccionSimpleCondicion=DocProcActAcc.CmpD_RdoTipo(0) CondiciondeAcc=Implode(DocProcActAcc.CmpD_Lista,",") NombreAccion=DocProcActAcc.CmpD_NombreAccion(0) Set DocProcActAcc =DocCollecProActAcc.GetNextDocument(DocProcActAcc) Wend Doc.CmpA_NombreAccion = NombreAccion Call GrabaLog(Doc) If Trim(TipoAccionSimpleCondicion)="C" Then CondiciónSinAsterisco ="" For x=1 To Len(CondiciondeAcc) Chara=Mid(CondiciondeAcc,x,1) If chara<>"*" Then CondiciónSinAsterisco =CondiciónSinAsterisco +Chara End If Next CondiciónSinAsterisco =CondiciónSinAsterisco +"," For x=1 To Len(CondiciónSinAsterisco ) If Mid(CondiciónSinAsterisco,x,1)<>"," Then Opciones=Opciones+Mid(CondiciónSinAsterisco,x,1)

186

Else CondicionSeleccionadaporUsuario= Trim(uidocu.FieldGetText ("CmpA_Condicion")) Parte_Accion = Split(Opciones,"=") Condicon=Parte_Accion(0) Siguient_Actividad=Parte_Accion(1) If Trim(CondicionSeleccionadaporUsuario)="" Then Msgbox "El usuario no ha selecionado el campo de condicion, requerido para el flujo",,"Mensaje del Sistema" CargarSiguienteActividad="CampoCondicionVacio" Exit Function End If If Trim(Condicon)=Trim(CondicionSeleccionadaporUsuario) Then CondicionesIguales =True Call uidocu.FieldSetText ("CmpA_CodActividadActual",Siguient_Actividad) Call uidocu.FieldSetText ("CmpA_NombreAccion",NombreAccion) Exit For End If Opciones="" End If Next x If CondicionesIguales =False Then Msgbox "La condicion definida en el proceso no coincide con la programada."+Chr(13)+"El documento no podra ser transferido.",,"Mensaje del Sistema" CargarSiguienteActividad="CondicionNoIgual" Exit Function End If Else 'CmpA_NombreAgente Call uidocu.FieldSetText ("CmpA_CodActividadActual",Trim(Siguient_Actividad)) Call uidocu.FieldSetText ("CmpA_NombreAccion",NombreAccion) End If Acciones="" SecuenciaAcciones="" If Siguient_Actividad ="Final" Then 'Msgbox "Se ha finalizado el flujo del proceso",,"Mensaje del sistema"

187

Call uidocu.FieldSetText("CmpA_NombreActividad","Final") Call uidocu.FieldSetText("CmpA_Time",Format(Now, "General Date")) Call uidocu.FieldSetText("CmpA_Date",Format(Now, "General Date")) CargarSiguienteActividad="FlujoYaFinalizo" Exit Function End If KeyLookFor=Trim(Str(Cod_Pro))+"-"+Trim(Siguient_Actividad)+"-" Set Vista_ProAct=dbDefProceso.GetView("VstD_ProcYActiYAcci") Set DocCollecProAct = Vista_ProAct.GetAllDocumentsByKey(KeyLookFor) Set DocProcAct =DocCollecProAct.GetFirstDocument While Not (DocProcAct Is Nothing) CodAccion=Implode(DocProcAct.CmpD_CodigoAccion) Tipo_Accion=Implode(DocProcAct.CmpD_RdoTipo) SecuenciaAcciones =SecuenciaAcciones +CodAccion+"-"+Tipo_Accion+"," Acciones=Acciones+Trim(DocProcAct.CmpD_NombreAccion(0))+"|"+CodAccion +"," Set DocProcAct =DocCollecProAct.GetNextDocument(DocProcAct ) Wend Acciones=Mid(Acciones,1,Len(Acciones)-1) Call uidocu.FieldSetText ("Opciones",Acciones) Call uidocu.FieldSetText ("CmpA_TipoAccion",SecuenciaAcciones) IniciadordeFlujo=uidocu.FieldGetText("CmpA_Autor") KeyLookFor=Trim(Str(Cod_Pro))+"-"+Trim(Siguient_Actividad) Set Vista_ProAct=dbDefProceso.GetView("VstD_ProcYActividades") Set DocCollecProAct = Vista_ProAct.GetAllDocumentsByKey(KeyLookFor) Set DocProcAct =DocCollecProAct.GetFirstDocument While Not (DocProcAct Is Nothing) EsInicial= Implode(DocProcAct.CmpD_ActividadInicial) 'Msgbox "Es tarea inicial o no :" + EsInicial ActividadConSinPlazo=Implode(DocProcAct.CmpD_EstadoPlazoAct)

188

CantidadTiempo=Val(DocProcAct.CmpD_ActTiempoPlazo(0)) Unidad_Tiempo=Implode(DocProcAct.CmpD_ActPlazoDH) TipoActividad=DocProcAct.CmpD_TipoActividad(0) If EsInicial="Si" Then ResponTarea=IniciadordeFlujo Else If Trim(TipoActividad)="A" Then ResponTarea="" Else ResponsableTarea=DocProcAct.CmpD_ResponsableAct(0) ResponTarea=ObtieneNombreResponsable(ResponsableTarea) End If End If NOMBRE_AGENTE=Implode(DocProcAct.CmpD_NombreAgente) NombreActiv=Implode(DocProcAct.CmpD_NombreActividad) EstadoEnviaCorreo=DocProcAct.CmpD_EstadoEnvioCorreoAct(0) If Trim(EstadoEnviaCorreo)="A" Then MensajeAresp$= DocProcAct.CmpD_CambioMensajeAct(0) End If Set DocProcAct =DocCollecProAct.GetNextDocument(DocProcAct ) Wend If Trim(EstadoEnviaCorreo)="A" Then

Call EnvioAlerta(Cstr(ResponTarea),Cstr(MensajeAresp$),Cstr(NombreActiv))

Msgbox "Su actividad ha sido notificada a: ''" + Cstr(ResponTarea)+ "'' siguiente responsable. " +Chr(13)+ "Mediante un E-Mail.",,"Mensaje del Sistema" End If Call uidocu.FieldSetText ("CmpA_CodRol",ResponsableTarea) Call uidocu.FieldSetText ("CmpA_Responsable",ResponTarea)

189

If Trim(ActividadConSinPlazo)="A" Then 'La A significa que si hay plazo en la actividad Call uidocu.FieldSetText ("CmpA_EstadoPlazo","P") Call uidocu.FieldSetText ("CmpA_PlazoActividadEnHoras",Trim(Str(CantidadTiempo))) Call uidocu.FieldSetText ("CmpA_TipoPlazo",Unidad_Tiempo) Else Call uidocu.FieldSetText ("CmpA_EstadoPlazo","NP") End If Call uidocu.FieldSetText ("CmpA_NombreActividad",NombreActiv) Call uidocu.FieldSetText ("CmpA_TipoActividad",TipoActividad) If Trim(TipoActividad)="A" Then Call uidocu.FieldSetText ("CmpA_NombreAgente",NOMBRE_AGENTE) Else Call uidocu.FieldSetText ("CmpA_NombreAgente","-") End If Call uidocu.FieldSetText("CmpA_Time",Format(Now, "General Date")) Call uidocu.FieldSetText("CmpA_Date",Format(Now, "General Date")) Call uidocu.RefreshHideFormulas CargarSiguienteActividad="Ejecutado" End Function

AgA_GrabarBorrador Agente que guardará la tarea en el estado que se encuentre.

Agente Compartido: Si Estado: Activo Trigger: Manual Actuar sobre: Ninguno. Código LotusScript (Globales) Option Public Sub Initialize

190

Dim uidocu As NotesUIDocument Dim workspace As New NotesUIWorkspace Set uidocu = workspace.CurrentDocument Dim OpcSel As String OpcSel =uidocu.FieldGetText("CmpA_ListaOpciones") Call uidocu.Save() Call uidocu.Close(True) End Sub

AgA_MigracionArchive Agente que enviará documentos a la base de archive.

Agente Compartido: Si Estado: Activo Trigger: Calendarizado Actuar sobre: Todos los documentos nuevos o

modificados desde la última ejecución. Código LotusScript (Globales) Option Public

Use "ScrA_FuncionesCompartidas" Sub Initialize

Dim session As New NotesSession Dim db As NotesDatabase Dim collection As NotesDocumentCollection Dim doc As NotesDocument Dim vw As NotesView Dim diasmigracion As Integer Dim fechadoc As NotesDateTime Dim fechaact As NotesDateTime Dim diference As Long Dim band As Boolean Dim cont As String cont=0 Set db=session.CurrentDatabase Set vw = db.GetView("(VstA_Migracion)") Set collection= vw.GetAllDocumentsByKey("Final") If collection.Count>0 Then Dim dbOther As NotesDatabase Dim docparaborrar As NotesDocument cont=collection.Count

191

Print "Se encontraron "+cont + " documentos finalizados" cont=0 Set doc= collection.GetFirstDocument OpenDocPerfil Set dbOther = session.GetDatabase(profile.GetItemValue("CmpA_NombreSrv")(0), profile.GetItemValue("CmpA_BDArchive_dir")(0)) diasmigracion=profile.GetItemValue("CmpA_Migracion")(0) While Not (doc Is Nothing) Set fechadoc=New NotesDateTime(doc.GetItemValue("CmpA_Date")(0)) fechadoc.AdjustDay(diasmigracion) Set fechaact= New NotesDateTime(Now) diference=fechadoc.TimeDifference(fechaact) If diference<0 Then Call doc.CopyToDatabase(dbOther) Set docparaborrar = doc band=True 'Msgbox "aqui copia el doc a la base de archive" End If Set doc= collection.GetNextDocument(doc) If band Then Call docparaborrar.Remove(1) cont=cont+1 band=False End If Wend End If Print "Se migraron "+cont + " documentos. Ejecucion exitosa." End Sub

AgA_SetearCampos Agente que cambia de estado a los documentos.

Agente Compartido: Si Estado: Activo Trigger: Manual Actuar sobre: Ninguno.

192

Código LotusScript (Globales) Option Public Sub Initialize

Dim SessionSig_Act As New NotesSession Dim DocContext As NotesDocument Set DocContext = SessionSig_Act.DocumentContext 'Msgbox "Voy a Setear" Call DocContext.replaceItemValue("CmpA_Auxiliar", "Reclamado") Call DocContext.Save(True,True) 'Msgbox "Ya setie" End Sub

Ag_Calendario Este agente verifica si existen actividades fuera de plazo..

Agente Compartido: Si Estado: Activo Trigger: Mas de una vez al día Actuar sobre: Todos los documentos nuevos o

modificados desde la última ejecución. Código LotusScript (Globales) Option Public

Use "ScrA_EnvioAlertas" Dim sessionGL As notessession Dim dbGL As NotesDatabase Dim profile As NotesDocument

Sub Initialize

Dim session As New NotesSession Dim db As NotesDatabase Dim collection As NotesDocumentCollection Dim doc As NotesDocument Dim vw As NotesView Dim horafecha As NotesDateTime Dim horafechaactual As NotesDateTime Dim superior As String Dim mensaje As String Dim actividad As String

193

Dim diaslab As Variant Dim plazo As Integer Set db=session.CurrentDatabase Set vw = db.GetView("VstA_PlazoAct") Set collection= vw.GetAllDocumentsByKey("P") If collection.Count>0 Then Set doc= collection.GetFirstDocument OpenDocPerfil Dim HorainiProfile As NotesDateTime Dim HorafinProfile As NotesDateTime Dim datetimefinal As String Set HorainiProfile= New NotesDateTime(profile.GetItemValue("CmpA_HoraInicio")(0)) Set HorafinProfile= New NotesDateTime(profile.GetItemValue("CmpA_HoraSalida")(0)) diaslab=profile.GetItemValue("CmpA_DiasLab") While Not (doc Is Nothing) If Trim(doc.GetItemValue("CmpA_TipoPlazo")(0))="H" Then Set horafecha=New NotesDateTime(doc.GetItemValue("CmpA_Date")(0)) plazo=Cint(doc.GetItemValue("CmpA_PlazoActividadEnHoras")(0)) datetimefinal=Calculadatetimefinal(horafecha,HorainiProfile,HorafinProfile,plazo,diaslab) Elseif Trim(doc.GetItemValue("CmpA_TipoPlazo")(0))="D" Then Set horafecha=New NotesDateTime(doc.GetItemValue("CmpA_Date")(0)) plazo=Cint(doc.GetItemValue("CmpA_PlazoActividadEnHoras")(0)) plazo=calculadiasplazo(horafecha,plazo,diaslab) 'Call horafecha.AdjustDay(plazo) datetimefinal=horafecha.LocalTime End If Set horafechaactual= New NotesDateTime(Now) Set horafecha= New NotesDateTime(datetimefinal) If horafecha.TimeDifference(horafechaactual) < 0

194

Then superior=ObtieneNombreSuperior(doc.GetItemValue("CmpA_CodRol")(0)) If superior="" Then mensaje=" Existe una actividad pendiente que no ha sido atendida en el tiempo " &_ "correspondiente por el usuario "+doc.GetItemValue("CmpA_Responsable")(0) actividad=doc.GetItemValue("CmpA_NombreActividad")(0) 'Aqui debo obtener el usuario q tenga el rol AdministradorWF Else mensaje="Existe una actividad pendiente que no ha sido atendida en el tiempo " &_ "correspondiente por el usuario "+doc.GetItemValue("CmpA_Responsable")(0)+Chr(13) actividad=doc.GetItemValue("CmpA_NombreActividad")(0) End If Call doc.ReplaceItemValue("CmpA_Atrasado","SI") Call doc.Save(False,False) Call EnvioAlerta(superior,mensaje, actividad) End If Set doc=collection.GetNextDocument(doc) Wend End If Print "Fin de la ejecucion de Agente de Calendario" End Sub Function ObtieneNombreSuperior (rolResponsable As String) As String Dim dbOrganizacion As NotesDatabase Dim nombreResponsable As String Dim docRol As NotesDocument Dim view As NotesView nombreResponsable = "" '---------------------- 'Abre base de Organizacion Set dbOrganizacion = sessionGL.GetDatabase(profile.GetItemValue("CmpA_NombreSrv")(0),profile.GetItemValue("CmpA_BDOrganizacion_dir")(0)) If Not dbOrganizacion.IsOpen Then Msgbox "No se encuentra base " +profile.GetItemValue("CmpA_NombreSrv")(0)+"\"+profile.GetItemValue("CmpA_BDOrganizacion_dir")(0),MB_ICONEXCLAMATION,"Mensaje del Sistema"

195

Goto salir End If 'Consulta rol Set view = dbOrganizacion .GetView("VstO_TodosRoles") Set docRol = view.GetDocumentByKey(rolResponsable) If docRol Is Nothing Then Messagebox "No se encuentra el rol",, "Mensaje del Sistema" Exit Function End If nombreResponsable = docRol.CmpO_SupervisorRol(0) If nombreResponsable = "" Then ObtieneNombreSuperior=ObtieneNombreJefeDpto(rolResponsable) nombreResponsable =ObtieneNombreSuperior 'Msgbox "El rol responsable no tiene asignado un superior",,"Mensaje del Sistema" End If salir: ObtieneNombreSuperior = nombreResponsable End Function Sub OpenDocPerfil If sessionGL Is Nothing Then Set sessionGL = New NotesSession End If If dbGL Is Nothing Then Set dbGL = sessionGL.CurrentDatabase End If If profile Is Nothing Then Set profile = dbGL.GetProfileDocument("FrmA_Configuracion") End If End Sub Function Calculadatetimefinal(horafechaplusplazo As NotesDateTime,HorainiProfile As NotesDateTime,HorafinProfile As NotesDateTime,plazo As Integer,diaslab As Variant)As String 'Dim addtimeout As NotesDateTime Dim Timehorafechaplusplazo As NotesDateTime Dim horatemp As String Dim hora As Integer Dim tmp As Integer

196

Dim band As Boolean Dim dia As String Dim diaslaborables As String Dim fecha As String band=False horatemp=horafechaplusplazo.TimeOnly hora=Hour(horatemp)+plazo If hora>23 Then Call horafechaplusplazo.AdjustHour(plazo) Else Call horafechaplusplazo.AdjustHour(plazo) End If Set Timehorafechaplusplazo=New NotesDateTime(horafechaplusplazo.TimeOnly) Dim horasdiasig As Long Dim horaini As String If HorafinProfile.TimeDifference(Timehorafechaplusplazo)<0 Then horasdiasig =Timehorafechaplusplazo.TimeDifference(HorafinProfile) Call horafechaplusplazo.AdjustDay(1) While band=False fecha=horafechaplusplazo.DateOnly dia=Weekday(fecha) diaslaborables=Implode(diaslab,":") cadena$="@Elements("+diaslaborables+")" y= Evaluate(cadena$) For x=0 To y(0)-1 If dia=diaslab(x) Then band=True End If Next If band=False Then Call horafechaplusplazo.AdjustDay(1) End If Wend hora=Hour(horafechaplusplazo.TimeOnly) Call horafechaplusplazo.AdjustHour(-(hora)) hora=Minute(horafechaplusplazo.TimeOnly) Call horafechaplusplazo.AdjustMinute(-(hora)) horaini=horainiprofile.TimeOnly horaini=Hour(horaini) Call horafechaplusplazo.AdjustHour(horaini) Call horafechaplusplazo.AdjustSecond(horasdiasig) Calculadatetimefinal=horafechaplusplazo.LocalTime

197

Elseif HorainiProfile.TimeDifference(Timehorafechaplusplazo)>0 Then horasdiasig =Hour(Timehorafechaplusplazo.TimeOnly) hora=Hour(horafechaplusplazo.TimeOnly) Call horafechaplusplazo.AdjustHour(-(hora)) horaini=horainiprofile.TimeOnly horaini=Hour(horaini) Call horafechaplusplazo.AdjustHour(horaini) Call horafechaplusplazo.AdjustHour(horasdiasig) Calculadatetimefinal=horafechaplusplazo.LocalTime Else Calculadatetimefinal=horafechaplusplazo.LocalTime End If End Function Function ObtieneNombreJefeDpto(rolResponsable As String) As String Dim dbOrganizacion As NotesDatabase Dim codDpto As String Dim docRol As NotesDocument Dim nombrejefedpto As String Dim view As NotesView nombrejefedpto = "" Set dbOrganizacion = sessionGL.GetDatabase(profile.GetItemValue("CmpA_NombreSrv")(0),profile.GetItemValue("CmpA_BDOrganizacion_dir")(0)) If Not dbOrganizacion.IsOpen Then Msgbox "No se encuentra base " +profile.GetItemValue("CmpA_NombreSrv")(0)+"\"+profile.GetItemValue("CmpA_BDOrganizacion_dir")(0),MB_ICONEXCLAMATION,"Mensaje del Sistema" Goto salir End If Set view = dbOrganizacion .GetView("VstO_TodosRoles") Set docRol = view.GetDocumentByKey(rolResponsable) If docRol Is Nothing Then Messagebox "No se encuentra el rol",, "Mensaje del Sistema" Exit Function End If codDpto = docRol.CmpO_CodigoDep(0) If codDpto = "" Then Msgbox "El jefe del departamento del nuevo responsable no puede ser retornado",,"Mensaje del Sistema" Goto salir End If Set view = dbOrganizacion

198

.GetView("VstO_DepartamentosJefes") Set docRol = view.GetDocumentByKey(codDpto) If docRol Is Nothing Then Messagebox "No se encuentra Departamento",, "Mensaje del Sistema" Exit Function End If nombrejefedpto = docRol.CmpO_JefeDepartamento(0) salir: ObtieneNombreJefeDpto = nombrejefedpto End Function Function calculadiasplazo(horafecha As NotesDateTime,plazo As Integer,diaslab As Variant) As Integer Dim band As Integer Dim dia As String Dim diaslaborables As String Dim resp As Boolean Dim fecha As String band=0 While band<plazo Call horafecha.AdjustDay(1) fecha=horafecha.DateOnly dia=Weekday(fecha) diaslaborables=Implode(diaslab,":") cadena$="@Elements("+diaslaborables+")" y= Evaluate(cadena$) For x=0 To y(0)-1 If dia=diaslab(x) Then band=+1 End If Next Wend calculadiasplazo=band End Function

AgA_ActualizaDatosTrabajos Actualizar en plantilla los cambios realizados.

Agente Compartido: Si Estado: Activo Trigger: Manual Actuar sobre: Ninguno.

199

Código LotusScript (Globales) Option Public

Use "ScrA_WorkFlow" Dim doc As NotesDocument

Sub Initialize

Dim view As NotesView Dim formulario As String Dim inicioCualkiera As Boolean Dim nombreProceso As String Dim nombreAuditor As String Dim tipoActividad As String Dim rolResponsable As String Dim nombreActividad As String Dim nombreResponsable As String Dim nombreAgente As String Dim valorPlazo As String Dim tipoPlazo As String Dim msgError As String inicioCualkiera = False msgError = "" Set session = New NotesSession Set db = session.CurrentDatabase Set view = db.GetView("VstA_TodosTrabajos") Set doc = view.GetFirstDocument() While Not(doc Is Nothing) formulario = "" nombreProceso = "" nombreAuditor = "" tipoActividad = "" rolResponsable = "" nombreActividad = "" nombreResponsable = "" nombreAgente = "" valorPlazo = "" tipoPlazo = "" If ObtieneDatosProceso (doc.CmpA_CodProceso(0),nombreProceso,codActividadIni$,formulario,inicioCualkiera,nombreAuditor) Then If ObtieneDatosActividad (doc.CmpA_CodProceso(0),doc.CmpA_CodActividadActual(0),nombreActividad,tipoActividad,_

200

rolResponsable,nombreAgente,valorPlazo,tipoPlazo) Then doc.CmpA_NombreProceso = nombreProceso doc.CmpA_NombreActividad= nombreActividad doc.CmpA_CodRol = rolResponsable doc.CmpA_Responsable = ObtieneNombreResponsable(rolResponsable) doc.CmpA_TipoActividad = tipoActividad doc.CmpA_nombreAgente = nombreAgente doc.CmpD_AuditorProceso = nombreAuditor doc.Opciones = ObtieneLstAcciones(doc.CmpA_CodProceso(0),doc.CmpA_CodActividadActual(0)) doc.CmpA_PlazoActividadEnHoras = valorPlazo doc.CmpA_TipoPlazo = tipoPlazo If valorPlazo = "" Then doc.CmpA_EstadoPlazo = "NP" Else doc.CmpA_EstadoPlazo = "P" End If Call doc.Save(False,False) Else '--else If ObtieneDatosActividad msgError = Format(Now, "General Date") + ": No se pudo obtener datos de la actividad " + doc.CmpA_CodActividadActual(0) _ +"-"+doc.CmpA_NombreActividad(0)+Chr(13)+msgError End If '-- If ObtieneDatosActividad '----- Else '--If ObtieneDatosProceso msgError = Format(Now, "General Date") + ": No se pudo obtener datos del proceso " + doc.CmpA_CodProceso(0) + "-"+doc.CmpA_NombreProceso(0)+Chr(13)+msgError End If '--End If ObtieneDatosProceso Set doc = view.GetNextDocument(doc) Wend Call view.Refresh If Not msgError = "" Then msgError = Format(Now, "General Date") + ": Problemas encontrados en la actualizacion: " + Chr(13) + msgError Msgbox msgError End If End Sub

AgA_CargarSiguienteActWeb

201

Agente que cargará la actividad siguiente si se ejecuta desde un cliente web.

Agente Compartido: Si Estado: Activo Trigger: Manual Actuar sobre: Ninguno. Código LotusScript (Globales) Option Public

Use "ScrA_WorkFlow" Use "ScrA_EnvioAlertas" Dim doc As NotesDocument Public Cod_Pro,Cod_Act,Cod_Acc As String Dim SessionSig_Act As NotesSession Dim DocGrabar As NotesDocument Dim DocContext As NotesDocument Dim EstadoEnviaCorreo As String Dim MensajeAresp As String Dim Resp As String

Sub Initialize

Dim SessionSig_Act As New NotesSession Set DocContext = SessionSig_Act.DocumentContext Dim DocumSave As NotesDocument Dim Vista As NotesView Dim BaseActual As NotesDatabase Dim DocumClose As NotesDocument Dim VistaVar As String Dim item As NotesItem Dim tipoclient As Variant 'Dim tipoclientestr As String Msgbox "Estoy en el initialize" Cod_Pro=DocContext.CmpA_CodProceso(0) Cod_Act=DocContext.CmpA_CodActividadActual(0) Cod_Acc=DocContext.CmpA_Accion(0) DocContext.CmpA_Atrasado="" If Trim(Cod_Acc)="" Then Msgbox "no selecciono la opcion" Call MostrarMensaje("No ha seleccionado ninguna acción." , "Web") Else

202

Dim dbApp As NotesDatabase Set dbApp = SessionSig_Act.CurrentDatabase estado$ = CargarSiguienteActividad() If estado$= "Ejecutado" Or estado$= "FlujoYaFinalizo" Then url$ = "'/"+CorreccionWebPath(dbApp.FilePath)+"/VstA_MisActividades?OpenView" If Trim(EstadoEnviaCorreo)="A" Then Msgbox "!!!!!!!!!!!!!Estoy listo para presentar mensaje" mensaje ="La actividad ha sido notificada a: "+Resp+" Via E-Mail." Print "<SCRIPT LANGUAGE='JavaScript'>" Print "window.alert('" + mensaje + "');document.location="+url$+"';" Print "</SCRIPT>" Else Msgbox "!!!!!!!No presento presentar mensaje" Print "<SCRIPT LANGUAGE='JavaScript'>" Print "document.location="+url$+"';" Print "</SCRIPT>" End If Else If estado$="BaseNoAbierta" Then Error_Log$="ERROR: "+Format(Now, "General Date")+" - No se encuentra la base de datos, revise el documento de configuración." Set item = DocContext.GetFirstItem( "CmpA_LogError" ) Call item.AppendToTextList(Error_Log$) 'Msgbox Error_Log$ End If If estado$="CondicionNoIgual" Then Error_Log$="ERROR: "+Format(Now, "General Date")+" - La condición de la actividad de código: ''"+Cod_Act+"'' no esta bien definida en el formulario." Set item = DocContext.GetFirstItem( "CmpA_LogError" ) Call item.AppendToTextList(Error_Log$) 'Msgbox Error_Log$ End If If estado$="CampoCondicionVacio" Then

203

Error_Log$="ERROR: "+Format(Now, "General Date")+ "- El campo requerido para la condición del flujo no esta lleno, el flujo se detendra. Informe de este error al administrador." Set item = DocContext.GetFirstItem( "CmpA_LogError" ) Call item.AppendToTextList(Error_Log$) 'Msgbox Error_Log$ End If Call DocContext.Save(True,False) End If End If Msgbox "Ya ejecute el Sub" End Sub Function CargarSiguienteActividad() As String Dim Vista_ProActAcc As NotesView Dim Vista_ProAct As NotesView Dim DocProc As NotesDocument Dim DocProcAct As NotesDocument Dim DocProAct As NotesDocument Dim DocCollecProActAcc As NotesDocumentCollection Dim DocAccion As NotesDocument Dim KeyLookFor As String Dim Siguient_Actividad As String Dim TipoAccionSimpleCondicion As String Dim DecicionSeleccionada As String Dim CondiciondeAcc As String Dim ResponsableTarea As String Dim Acciones As String Dim SecuenciaAcciones As String Dim Tipo_Accion As String Dim CondiciónSinAsterisco As String Dim Opciones As String Dim NombreAccion As String Dim CondicionSeleccionadaporUsuario As String Dim ActividadConSinPlazo As String Dim CantidadTiempo As Integer Dim Unidad_Tiempo As String Dim NOMBRE_AGENTE As String Dim NombreActiv As String Dim EsInicial As String Dim IniciadordeFlujo As String If Not ConexionBDDefProcesos Then Msgbox "La base no ha sido abierta",,"Error de acceso a base" CargarSiguienteActividad="BaseNoAbierta" Exit Function

204

End If Dim Opcion As String Opcion=DocContext.CmpA_ListaOpciones(0) Msgbox Opcion DecicionSeleccionada=DocContext.CmpA_Condicion(0) KeyLookFor=Trim(Cod_Pro)+"-"+Trim(Cod_Act)+"-"+Trim(Cod_Acc) Set Vista_ProActAcc=dbDefProceso.GetView("VstD_ProcYActiYAcci") Set DocAccion = Vista_ProActAcc.GetDocumentByKey(KeyLookFor) If Not (DocAccion Is Nothing) Then Siguient_Actividad=Implode(DocAccion.CmpD_AccSiguienteActividad) TipoAccionSimpleCondicion=DocAccion.CmpD_RdoTipo(0) CondiciondeAcc=Implode(DocAccion.CmpD_Lista,",") NombreAccion=DocAccion.CmpD_NombreAccion(0) End If DocContext.CmpA_NombreAccion=NombreAccion Call GrabaLog(DocContext) If Trim(TipoAccionSimpleCondicion)="C" Then Dim CondicionesIguales As Boolean CondiciónSinAsterisco ="" For x=1 To Len(CondiciondeAcc) Chara=Mid(CondiciondeAcc,x,1) If chara<>"*" Then CondiciónSinAsterisco =CondiciónSinAsterisco +Chara End If Next CondiciónSinAsterisco =CondiciónSinAsterisco +"," For x=1 To Len(CondiciónSinAsterisco ) If Mid(CondiciónSinAsterisco,x,1)<>"," Then Opciones=Opciones+Mid(CondiciónSinAsterisco,x,1) Else CondicionSeleccionadaporUsuario= DocContext.CmpA_Condicion(0) Dim Condicon As String Dim CodigoAccion As String Dim Parte_Accion As Variant Dim Cond As Integer

205

Parte_Accion = Split(Opciones,"=") Condicon=Parte_Accion(0) Siguient_Actividad=Parte_Accion(1) If Trim(CondicionSeleccionadaporUsuario)="" Then CargarSiguienteActividad="CampoCondicionVacio" Exit Function End If If Trim(Condicon)=Trim(CondicionSeleccionadaporUsuario) Then CondicionesIguales =True DocContext.CmpA_CodActividadActual=Siguient_Actividad DocContext.CmpA_NombreAccion=NombreAccion Exit For End If Opciones="" End If Next x If CondicionesIguales =False Then CargarSiguienteActividad="CondicionNoIgual" Exit Function End If Else DocContext.CmpA_CodActividadActual=Siguient_Actividad DocContext.CmpA_NombreAccion=NombreAccion End If Acciones="" SecuenciaAcciones="" If Siguient_Actividad ="Final" Then DocContext.CmpA_NombreActividad="Final" DocContext.CmpA_Time=Now DocContext.CmpA_Date=Now CargarSiguienteActividad="FlujoYaFinalizo" Call DocContext.Save(True,False) Exit Function End If KeyLookFor=Trim(Str(Cod_Pro))+"-"+Trim(Siguient_Actividad)+"-" Set Vista_ProAct=dbDefProceso.GetView("VstD_ProcYActiYAcci")

206

Set DocCollecProAct = Vista_ProAct.GetAllDocumentsByKey(KeyLookFor) Set DocProcAct =DocCollecProAct.GetFirstDocument While Not (DocProcAct Is Nothing) CodAccion=Implode(DocProcAct.CmpD_CodigoAccion) Tipo_Accion=Implode(DocProcAct.CmpD_RdoTipo) SecuenciaAcciones =SecuenciaAcciones +CodAccion+"-"+Tipo_Accion+"," Acciones=Acciones+Trim(DocProcAct.CmpD_NombreAccion(0))+"|"+CodAccion +"," Set DocProcAct =DocCollecProAct.GetNextDocument(DocProcAct ) Wend Acciones=Mid(Acciones,1,Len(Acciones)-1) DocContext.Opciones=Acciones DocContext.CmpA_TipoAccion=SecuenciaAcciones IniciadordeFlujo=DocContext.CmpA_Autor(0) KeyLookFor=Trim(Str(Cod_Pro))+"-"+Trim(Siguient_Actividad) Set Vista_ProAct=dbDefProceso.GetView("VstD_ProcYActividades") Set DocProAct = Vista_ProAct.GetDocumentByKey(KeyLookFor,False) If Not DocProAct Is Nothing Then EsInicial$= DocProAct.CmpD_ActividadInicial(0) Msgbox "Es tarea inicial o no :" + EsInicial$ If EsInicial$="Si" Then ResponTarea=IniciadordeFlujo Else ResponsableTarea=DocProAct.CmpD_ResponsableAct(0) ResponTarea=ObtieneNombreResponsable(ResponsableTarea) End If ActividadConSinPlazo=Implode(DocProAct.CmpD_EstadoPlazoAct) CantidadTiempo=Val(DocProAct.CmpD_ActTiempoPlazo(0)) Unidad_Tiempo=Implode(DocProAct.CmpD_ActPlazoDH) TipoActividad=DocProAct.CmpD_TipoActividad(0) NOMBRE_AGENTE=Implode(DocProAct.CmpD_Nombre

207

Agente) NombreActiv=Implode(DocProAct.CmpD_NombreActividad) EstadoEnviaCorreo=DocProAct.CmpD_EstadoEnvioCorreoAct(0) If Trim(EstadoEnviaCorreo)="A" Then MensajeAresp=DocProAct.CmpD_CambioMensajeAct(0) End If End If If Trim(EstadoEnviaCorreo)="A" Then Call EnvioAlerta(Cstr(ResponTarea),Cstr(MensajeAresp),Cstr(NombreActiv)) End If Resp=ResponTarea DocContext.CmpA_Responsable=ResponTarea DocContext.CmpA_CodRol=ResponsableTarea If Trim(ActividadConSinPlazo)="A" Then DocContext.CmpA_EstadoPlazo="P" DocContext.CmpA_PlazoActividadEnHoras=Trim(Str(CantidadTiempo)) DocContext.CmpA_TipoPlazo=Unidad_Tiempo Else DocContext.CmpA_EstadoPlazo="NP" End If DocContext.CmpA_NombreActividad=NombreActiv DocContext.CmpA_TipoActividad=TipoActividad DocContext.CmpA_Time=Now DocContext.CmpA_Date=Now If Trim(TipoActividad)="A" Then DocContext.CmpA_NombreAgente=NOMBRE_AGENTE Else DocContext.CmpA_NombreAgente="-" End If DocContext.CmpA_Observacion="" CargarSiguienteActividad="Ejecutado" Call DocContext.Save(True,False) Msgbox "Termine" End Function Sub MensajeNotificacion(mensaje As String , tipoCliente As String) If tipoCliente = "Notes" Then

208

Messagebox mensaje,,"Mensaje del Sistema" Else Print "<SCRIPT LANGUAGE='JavaScript'>window.alert('" + mensaje + "');</SCRIPT>" End If End Sub

AgA_GrabaDelegar Graba la delegacion.

Agente Compartido: Si Estado: Activo Trigger: Manual Actuar sobre: Ninguno. Código LotusScript (Globales) Option Public

Use "ScrA_WorkFlow" Use "ScrA_EnvioAlertas" Dim doc As NotesDocument %INCLUDE "LSCONST.LSS"

Sub Initialize

Set session = New NotesSession Set db = session.CurrentDatabase If Not SeteaDocumento(doc) Then Exit Sub End If If Not ValidaDatosCompletos Then Exit Sub End If Call GrabaDelegacion() End Sub Function ValidaDatosCompletos() As Boolean If Trim(doc.CmpA_NuevoResponsable(0)) = "" Then Call MostrarMensaje ("Seleccione el nuevo responsable", tipoCliente) 'Print "<SCRIPT LANGUAGE='JavaScript'>window.history.back();window.alert('Seleccione el nuevo responsable');</SCRIPT>" Msgbox "vacipo"

209

'Print "<SCRIPT LANGUAGE='JavaScript'>window.alert('El documento esta vacio');</SCRIPT>" 'Print "<A HREF='javascript:alert('You are Anonymous unless you supply a login name')'>Read me</A>" 'Print "<SCRIPT LANGUAGE=JavaScript>kjkjjj" 'Print "alert(""Status changed to '" & arg & _ '"' in all documents"")" 'Print "location.href = document.referrer" 'Print "</SCRIPT>" Msgbox "Termino los print" ValidaDatosCompletos = False Exit Function End If ValidaDatosCompletos = True End Function Function GrabaDelegacion() As Boolean Dim docJob As NotesDocument Dim responOriginal As String Set docJob = db.GetDocumentByUNID(doc.CmpA_RTrabajoUNID(0)) If docJob Is Nothing Then Call MostrarMensaje ("No se encuentra el documento", tipoCliente) GrabaDelegacion = False Exit Function End If nuevoRespon$ = ObtieneNombreResponsable(doc.CmpA_NuevoResponsable(0)) Msgbox "NUEVO RESPONSABLE - "+nuevoRespon$,MB_ICONINFORMATION,"Mensaje del Sistema" If nuevoRespon$ = "" Then GrabaDelegacion = False Call MostrarMensaje ("No se grabo la delegacion", tipoCliente) Exit Function End If responOriginal = docJob.CmpA_Responsable(0) docJob.CmpA_CodRol = doc.CmpA_NuevoResponsable(0) Call docJob.ReplaceItemValue("CmpA_Responsable",nuevoRespon$) docJob.CmpA_Observacion = doc.CmpA_Observacion(0) docJob.CmpA_Responsable = nuevoRespon$

210

docJob.CmpA_NombreAccion = doc.CmpA_NombreAccion(0) If Not docJob.Save(False,False) Then Call MostrarMensaje ("Problemas al grabar 'Delegar', comuniqueselo al administrador", tipoCliente) GrabaDelegacion = False Exit Function Else If doc.CmpA_Notificar(0) = "Si" Then Call EnvioAlerta (nuevoRespon$,"Actividad ha sido delegada a usted."+Chr(13)+" Mensaje del Usuario: " +doc.CmpA_Observacion(0),doc.CmpA_NombreActividad(0)) End If End If docJob.CmpA_Responsable = responOriginal Call GrabaLog(docJob) docJob.CmpA_Responsable = nuevoRespon$ Call docJob.Save(False,False) If doc.CmpA_TipoCliente(0) = "Notes" Then Msgbox "Delegacion grabada",MB_ICONINFORMATION,"Mensaje del Sistema" Else Dim notesUNID As String Dim dbApp As NotesDatabase Set session = New NotesSession Set dbApp = session.CurrentDatabase notesUNID = doc.CmpA_RTrabajoUNID(0) Print "<SCRIPT LANGUAGE='JavaScript'>window.alert('Delegacion Grabada');window.location = ""VstA_MisActividades?OpenView"";</SCRIPT>" 'url$ = "'/"+CorreccionWebPath(dbApp.FilePath)+"/0/"+notesUNID+"?OpenDocument" 'Msgbox url$ 'Print "<SCRIPT LANGUAGE='JavaScript'>window.alert('Delegacion Grabada');document.location="+url$+"'</SCRIPT>" 'Print "<SCRIPT LANGUAGE='JavaScript'>" 'Print "document.location="+url$+"';" 'Print "</SCRIPT>" End If GrabaDelegacion = True End Function

AgA_IniciaTrabajo

211

Inicia una instancia del proceso seleccionado.

Agente Compartido: Si Estado: Activo Trigger: Manual Actuar sobre: Ninguno. Código LotusScript (Globales) Option Public

Use "ScrA_WorkFlow" Dim doc As NotesDocument

Sub Initialize

Dim result As Variant Set session = New NotesSession Set db = session.CurrentDatabase If Not SeteaDocumento(doc) Then Exit Sub End If If Not ValidaDatosCompletos Then Exit Sub End If If Not EsNombreUnico Then Exit Sub End If Dim formulario As String Dim inicioCualkiera As Boolean Dim codActividadIni As String Dim nombreProceso As String Dim codAuditor As String Dim nombreAuditor As String If Not ObtieneDatosProceso (doc.CmpA_LstProcesos(0),nombreProceso,codActividadIni,formulario,inicioCualkiera,codAuditor) Then Call MostrarMensaje("No se pudo obtener datos del proceso seleccionado",tipoCliente) Exit Sub End If nombreAuditor = ObtieneNombreResponsable(codAuditor) Dim tipoActividad As String Dim rolResponsable As String Dim nombreActividad As String

212

Dim nombreResponsable As String Dim nombreAgente As String Dim valorPlazo As String Dim tipoPlazo As String If Not ObtieneDatosActividad (doc.CmpA_LstProcesos(0),codActividadIni,nombreActividad,tipoActividad,_ rolResponsable,nombreAgente,valorPlazo,tipoPlazo) Then Call MostrarMensaje("No se pudo obtener datos de la actividad inicial",tipoCliente) Exit Sub End If result = Evaluate("@V3UserName",doc) If Not inicioCualkiera Then nombreResponsable = ObtieneNombreResponsable(rolResponsable) If nombreResponsable <> result(0) Then Call MostrarMensaje("No tiene permisos para inciar este proceso",tipoCliente) Exit Sub End If 'responsable <> session.UserName Else nombreResponsable = result(0) End If 'inicioCualkiera = "N" Dim docNuevo As NotesDocument Dim noteidNuevo As String Dim notesUNID As String Set docNuevo = New NotesDocument(db) docNuevo.Form = formulario docNuevo.CmpA_CodProceso = doc.CmpA_LstProcesos(0) docNuevo.CmpA_NombreProceso = nombreProceso docNuevo.CmpA_NombreJob = doc.CmpA_nombreInstancia(0) docNuevo.CmpA_CodActividadActual = codActividadIni docNuevo.CmpA_NombreActividad = nombreActividad docNuevo.CmpA_CodRol = rolResponsable docNuevo.CmpA_Responsable = nombreResponsable docNuevo.CmpA_TipoActividad = tipoActividad docNuevo.Opciones = ObtieneLstAcciones(doc.CmpA_LstProcesos(0),codActividadIni) docNuevo.CmpA_nombreAgente = nombreAgente docNuevo.CmpA_Autor = nombreResponsable docNuevo.CmpA_FechaHora = Now docNuevo.CmpA_TrabajoUNID = docNuevo.UniversalID docNuevo.CmpD_CodAuditor = codAuditor

213

docNuevo.CmpD_AuditorProceso = nombreAuditor docNuevo.CmpA_PlazoActividadEnHoras = valorPlazo docNuevo.CmpA_TipoPlazo = tipoPlazo docNuevo.CmpA_Time = Now '",Format(Now, "General Date")) docNuevo.CmpA_Date= Now '",Format(Now, "General Date")) If valorPlazo = "" Then docNuevo.CmpA_EstadoPlazo = "NP" Else docNuevo.CmpA_EstadoPlazo = "P" End If Call docNuevo.Save (False,False) noteidNuevo = docNuevo.NoteID notesUNID = docNuevo.UniversalID '-- doc.CmpA_nombreInstancia = "" '-Si el tipo de actividad es manual, carga el documento (formulario) If (tipoActividad = "M") Then Set docNuevo = Nothing Set docNuevo = session.currentdatabase.GetDocumentByID(noteidNuevo) If (docNuevo Is Nothing ) Then Exit Sub Else 'doc.ReplaceItemValue "CmpA_nombreInstancia","" If tipoCliente = "Notes" Then Dim ws As New NotesUIworkspace doc.CmpA_nombreInstancia = "" Call ws.currentdocument.fieldsettext("CmpA_nombreInstancia", "") Call ws.EditDocument(False, docNuevo) Else url$ = "'/"+CorreccionWebPath(db.FilePath)+"/0/"+notesUNID+"?OpenDocument" Print "<SCRIPT LANGUAGE='JavaScript'>" Print "document.location="+url$+"';" Print "</SCRIPT>" End If End If Else 'If (tipoActividad = "M") Then If tipoCliente = "Notes" Then Msgbox "Trabajo iniciado.",MB_ICONINFORMATION,"Mensaje del Sistema"

214

Else Print "<SCRIPT LANGUAGE='JavaScript'>window.alert('Trabajo iniciado');window.location = ""VstA_MisActividades?OpenView"";</SCRIPT>" End If End If 'If (tipoActividad = "M") Then End Sub Function ValidaDatosCompletos() As Boolean If Trim(doc.GetItemValue("CmpA_LstProcesos")(0)) = "" Then Call MostrarMensaje("Seleccione un proceso",tipoCliente) ValidaDatosCompletos = False Exit Function End If If Trim(doc.CmpA_nombreInstancia(0)) = "" Then Call MostrarMensaje("Especifique un nombre para el proceso a Iniciar",tipoCliente) ValidaDatosCompletos = False Exit Function End If ValidaDatosCompletos = True End Function Function EsNombreUnico() As Boolean

If doc.CmpA_PermitirNombresDuplicados(0) = "N" Then result = Evaluate(|test:=@DbLookup( "": "NoCache" ; ""; "VstA_TodosTrabajos\\Reporte de todos los trabajos creados" ;"| +doc.CmpA_nombreInstancia(0) + |"; 1); @if(@IsError(test);"pass";"fail") |,doc) If result(0) = "fail" Then Call MostrarMensaje("El nombre ingresado ya existe. Escriba otro nombre",tipoCliente) EsNombreUnico = False Exit Function End If End If EsNombreUnico = True End Function

AgA_Refresh Refresca ventana del cliente web.

Agente Compartido: Si Estado: Activo Trigger: Manual

215

Actuar sobre: Ninguno. Código LotusScript (Globales) Option Public Sub Initialize

Print "<SCRIPT LANGUAGE='JavaScript'>" Print "window.location.reload();" Print "</SCRIPT>" End Sub

Menú

MenuA_outline Menú Principal

Entrada Mis trabajos pendientes Alias: No Nivel: 0 Tipo: Ninguno Frame: No Asignado Nunca usar imagen: Si Entrada Por proceso Alias: No Nivel: 1 Tipo: Elemento Vista Nombre: VstA_MisActividadesXProc Frame: Fr_Principal Nunca usar imagen: Si Entrada Por Fecha Alias: No Nivel: 1 Tipo: Elemento Vista Nombre: VstA_MisActividadesXFecha Frame: Fr_Principal Nunca usar imagen: Si Entrada Por Autor Alias: No Nivel: 1 Tipo: Elemento Vista Nombre: VstA_MisActividadesXAutor Frame: Fr_Principal Nunca usar imagen: Si

216

Entrada Todos Alias: No Nivel: 1 Tipo: Elemento Vista Nombre: VstA_MisActividades Frame: Fr_Principal Nunca usar imagen: Si Entrada Mis Trabajos Iniciados Alias: No Nivel: 0 Tipo: Ninguno Frame: No Asignado Nunca usar imagen: Si Entrada Por procesos Alias: No Nivel: 1 Tipo: Elemento Vista Nombre: VstA_MisProcesosXProc Frame: Fr_Principal Nunca usar imagen: Si Entrada Por Actividad Alias: No Nivel: 1 Tipo: Elemento Vista Nombre: VstA_MisProcesosXAct Frame: Fr_Principal Nunca usar imagen: Si Entrada Por Fecha Alias: No Nivel: 1 Tipo: Elemento Vista Nombre: VstA_MisProcesosXFecha Frame: Fr_Principal Nunca usar imagen: Si Entrada Todos Alias: No Nivel: 1 Tipo: Elemento Vista Nombre: VstA_MisProcesos Frame: Fr_Principal Nunca usar imagen: Si Entrada Mis Trabajos Finalizados Alias: No Nivel: 0 Tipo: Ninguno Frame: No Asignado

217

Nunca usar imagen: Si Entrada Por Proceso Alias: No Nivel: 1 Tipo: Elemento Vista Nombre: VstA_MisProcesosFinalizadosXProc Frame: Fr_Principal Nunca usar imagen: Si Entrada Por Fecha Alias: No Nivel: 1 Tipo: Ninguno Frame: No Asignado Nunca usar imagen: Si Entrada Mes y Año Alias: No Nivel: 2 Tipo: Elemento Vista Nombre: VstA_MisProcesosFinalizadosXMes Frame: Fr_Principal Nunca usar imagen: Si Entrada Dia Alias: No Nivel: 2 Tipo: Elemento Vista Nombre: VstA_MisProcesosFinalizadosXDia Frame: Fr_Principal Nunca usar imagen: Si Entrada Todos Alias: No Nivel: 1 Tipo: Elemento Vista Nombre: VstA_MisProcesosFinalizados Frame: Fr_Principal Nunca usar imagen: Si Entrada Todos los trabajos Alias: No Nivel: 0 Tipo: Elemento Vista Nombre: VstA_TodosTrabajos Frame: Fr_Principal Nunca usar imagen: Si Entrada Mantenimiento Alias: No Nivel: 0 Tipo: Ninguno

218

Frame: No Asignado Nunca usar imagen: Si Entrada Doc de Configuración Alias: No Nivel: 1 Tipo: Action Origen: @Command( [EditProfile] ;

"FrmA_Configuracion") Frame: No Asignado Nunca usar imagen: Si

Subformularios

SFrmA_DatosCreacion Datos de la creación de un documento, nombre y fecha de creación.

Incluir en lista de subformularios a insertar:

Si

Subcomponentes Field CmpA_Autor Tipo Dato: Texto Tipo Campo: Computado cuando compone Formula: @V3UserName Field CmpA_FechaHora Tipo Dato: Fecha Hora Tipo Campo: Computado cuando compone Formula: @Created

SFrmA_DBName Información de la base de datos de la aplicación.

Incluir en lista de subformularios a insertar:

Si

Subcomponentes * Shared Field CmpD_Servidor * Shared Field CmpD_Base * Shared Field CmpD_Dominio

219

Field CmpD_Path Tipo Dato: Texto Tipo Campo: Computado para mostrar Formula: @FileDir(CmpA_Base); Código LotusScript (Formulario) SFrmO_DBName Postmodechange

@Command([ViewRefreshFields]);

SFrmA_LogJob Log de acciones realizadas en el documento.

Incluir en lista de subformularios a insertar:

Si

Subcomponentes Field CmpA_LCodProceso Tipo Dato: Texto Tipo Campo: Computado Formula: CmpA_LCodProceso Field CmpA_LNombreJob Tipo Dato: Texto Tipo Campo: Computado Formula: CmpA_LNombreJob Field CmpA_LCodActividadActual Tipo Dato: Texto Tipo Campo: Computado Separador Lista: Coma Formula: CmpA_LCodActividadActual Field CmpA_LResponsable Tipo Dato: Texto Tipo Campo: Computado Separador Lista: Coma Formula: CmpA_LResponsable Field CmpA_LAccion Tipo Dato: Texto Tipo Campo: Computado Separador Lista: Coma Formula: CmpA_LAccion

220

Field CmpA_LObservacion Tipo Dato: Texto Tipo Campo: Computado Separador Lista: Coma Formula: CmpA_LObservacion Field CmpA_LDateTime Tipo Dato: Texto Tipo Campo: Computado Separador Lista: Coma Formula: CmpA_LDateTime

SFrmA_MasterSubForm Plantilla para controlar el documento durante el flujo.

Incluir en lista de subformularios a insertar:

Si

Subcomponentes Hotspot Tipo: Botón Valor: Reclamar actividad Formula: @Command([RunAgent];

"AgA_SetearCampos");@Command([EditDocument]);

Hotspot Tipo: Botón Valor: Salir sin grabar act Formula: @Command([RunAgent];

"AgA_SetearCamposAEspacio");@Command([OpenView]; "VstA_MisActividadesXProc");

Field CmpA_Usuario Tipo Dato: Texto Tipo Campo: Computado para mostrar Formula: @V3UserName Field CmpA_LogError Tipo Dato: Texto Tipo Campo: Computado Formula: CmpA_LogError Field CmpA_CodProceso Tipo Dato: Texto

221

Tipo Campo: Editable Field CmpA_NombreProceso Tipo Dato: Texto Tipo Campo: Editable Field CmpA_NombreJob Tipo Dato: Texto Tipo Campo: Editable Field CmpA_Autor Tipo Dato: Texto Tipo Campo: Computado para mostrar Formula: CmpA_Autor Field CmpA_ CodActividadActual Tipo Dato: Texto Tipo Campo: Editable Field CmpA_ Responsable Tipo Dato: Texto Tipo Campo: Editable Field CmpA_ NombreActividad Tipo Dato: Texto Tipo Campo: Editable Field CmpA_ TipoActividad Tipo Dato: Texto Tipo Campo: Editable Field CmpA_ Accion Tipo Dato: Texto Tipo Campo: Computado Formula: CmpA_ ListaOpciones Field CmpA_ NombreAccion Tipo Dato: Texto Tipo Campo: Editable Field CmpA_ TipoAccion Tipo Dato: Texto Tipo Campo: Editable Field CmpA_ Condicion Tipo Dato: Texto Tipo Campo: Editable Field CmpA_ NombreAgente Tipo Dato: Texto Tipo Campo: Editable Field CmpA_ CodRol Tipo Dato: Texto Tipo Campo: Editable Field CmpA_ Atrasado Tipo Dato: Texto Tipo Campo: Editable

222

Field CmpA_ CodAuditor Tipo Dato: Texto Tipo Campo: Computado al crear Formula: CmpA_ CodAuditor Field CmpA_ AuditorProceso Tipo Dato: Texto Tipo Campo: Computado al crear Formula: CmpA_ AuditorProceso Field CmpA_ Time Tipo Dato: Texto Tipo Campo: Computado Formula: CmpA_ Time Field CmpA_ Date Tipo Dato: Texto Tipo Campo: Computado Formula: CmpA_ Date Field Opciones Tipo Dato: Texto Tipo Campo: Editable Formula: @If(@IsNewDoc; "Registrar Credito|1";

Opciones); Field CmpA_TrabajoUNID Tipo Dato: Texto Tipo Campo: Computado al crear Formula: @If(@IsNewDoc;

@Text(@DocumentUniqueID); CmpA_TrabajoUNID);

Field CmpA_ EstadoPlazo Tipo Dato: Texto Tipo Campo: Editable Field CmpA_ PlazoActividadEnHoras Tipo Dato: Texto Tipo Campo: Editable Field CmpA_ TipoPlazo Tipo Dato: Texto Tipo Campo: Editable Field CmpA_ ListaOpciones Tipo Dato: Radio Buttons Formula Valores

Permitidos: @Explode(Opciones; ",");

Hotspot Tipo: Botón Valor: Ejecutar Opción Formula: FIELD CmpA_Accion :=

CmpA_ListaOpciones;temp := @ClientType;@If(temp = "Notes";

223

@Command([RunAgent]; "AgA_CargarSiguienteActNotes"); @Command([RunAgent]; "(AgA_CargarSiguienteActWeb)"));

Hotspot Tipo: Botón Valor: Guardar Borrador Formula: FIELD CmpA_ListaOpciones := "";FIELD

CmpA_Accion := "";@If(@ClientType = "Notes"; @Command([RunAgent]; "AgA_GrabarBorrador"); "");@Command([OpenView]; "VstA_MisActividadesXProc");

Field CmpA_ Observacion Tipo Dato: Texto Tipo Campo: Editable Código JavaScript & HTML (SubFormulario) SFrmA_ MasterSubForm onLoad

window.location.reload(); Client onLoad

window.location.reload(); Código LotusScript Globals

Option Public Use "ScrA_WorkFlow"

(Formulario) SFrmA_MasterSubForm Sub Querymodechange(Source As Notesuidocument, Continue

As Variant) Dim session As New NotesSession If Not(Source.FieldGetText("CmpA_Responsable") = Source.FieldGetText("CmpA_Usuario")) Then Messagebox( "Usted No tiene permisos para editar") continue = False Else continue = True End If End Sub

224

(SFrmA_IniciarProceso) Inicia nuevas instancias de flujos definidos.

Incluir en lista de subformularios a insertar:

Si

Subcomponentes Field CmpA_ListaProcesos Tipo Dato: Texto Tipo Campo: Computado Separador Lista: Coma Formula: nombreSrv :=

@GetProfileField("FrmA_Configuracion"; "CmpA_NombreSrv");nombreBD := @GetProfileField("FrmA_Configuracion"; "CmpA_BDProcesos_dir");nombreProceso := @DbColumn("Notes" : "NoCache"; nombreSrv : nombreBD; "VstD_ProcesosProduccion"; 2);@IfError(nombreProceso; @Return(""));Temp := nombreProceso + "|" + @DbColumn("Notes" : "NoCache"; nombreSrv : nombreBD; "VstD_ProcesosProduccion"; 1);@Trim(@Unique(@Name([CN]; Temp)));

Field CmpA_WebServidor Tipo Dato: Texto Tipo Campo: Computado para mostrar Formula: @WebDbName Field whichColumn Tipo Dato: Texto Tipo Campo: Computado Formula: @If(@ClientType = "Notes"; 2; 3); Field CmpA_Mensajes Tipo Dato: Texto Tipo Campo: Computado Formula: "Seleccione un proceso" : "Especifique un

nombre para el proceso a Iniciar" : "Este nombre del proceso a Iniciar ya se está usando. Seleccione otro nombre";

Field CmpA_PermitirNombresDuplicados Tipo Dato: Texto Tipo Campo: Computado para mostrar

225

Formula: Resultado := @GetProfileField("FrmA_Configuracion"; "CmpA_PermiteDuplicado");@If(@IsError(Resultado); ""; Resultado);

Field CmpA_LstProcesos Tipo Dato: Lista Tipo Campo: Editable Formula Valores

Permitidos: @If(@ClientType = "Notes"; CmpA_ListaProcesos; " " : "." : "." : "." : "." : ".");

Field CmpA_nombreInstancia Tipo Dato: Texto Tipo Campo: Editable Hotspot Tipo: Botón Valor: Iniciar Formula: @Command([ToolsRunMacro];

"(AgA_IniciaTrabajo)"); * Shared Field CmpA_TipoCliente Código JavaScript & HTML (SubFormulario) SFrmA_IniciarProceso function LoadProcessList()

{ for(i=document.forms[0].CmpA_LstProcesos.options.length-1; i>=0; i--) { document.forms[0].CmpA_LstProcesos[i] = null; } z=1; varProcessList = document.forms[0].CmpA_ListaProcesos.value.split(", ") document.forms[0].CmpA_LstProcesos[0] = new Option( " " ) for(i=0; i<varProcessList.length; i++) { nPosAlias = varProcessList[i].indexOf("|") if( nPosAlias > 0 ) { varProcess = varProcessList[i].split("|") document.forms[0].CmpA_LstProcesos[z] = new Option( varProcess[0], varProcess[1] ) } else { document.forms[0].CmpA_LstProcesos[z] = new Option( varProcessList[i] )

226

} z++; } document.forms[0].CmpA_LstProcesos[0].selected = true } Button

onClick window.document.forms[0].submit();

Código LotusScript Globals

Option Public Use "ScrA_WorkFlow"

(SubFormulario) SFrmA_IniciarProceso Sub Querysave(Source As Notesuidocument, Continue As

Variant) continue = False End Sub

Campos

CmpA_Base Nombre de la Base de Datos.

Tipo Dato: Texto Tipo Campo: Computado Formula: @Implode(@Subset(@DbName; -1))

CmpA_Dominio Nombre del Dominio.

Tipo Dato: Texto Tipo Campo: Computado Formula: @Domain

CmpA_Servidor Nombre del Servidor.

Tipo Dato: Texto Tipo Campo: Computado

227

Formula: @Name([CN]; @Subset(@DbName; 1))

CmpA_TipoCliente Tipo de cliente que inicia la aplicación.

Tipo Dato: Texto Tipo Campo: Computado Formula: @ClientType

CmpA_Titulo Tipo de cliente que inicia la aplicación.

Tipo Dato: Texto Tipo Campo: Computado Formula: @ClientType

Acción

AccA_Cerrar Cierra la ventana actual.

Formula @Command([FileCloseWindow])

AccA_Actualizar Botón para actualizar la vista que se muestra.

LotusScript: Sub Click(Source As Button)

Dim Workspace As New NotesUiWorkspace Workspace.ViewRefresh End Sub

AccA_Delegar Botón para delegar la actividad actual.

Formula:

228

@Command([CloseWindow]); @Command([Compose];"FrmA_Delegar")

AccA_Eliminar Botón para eliminar los documentos seleccionados.

Formula: @Command([MoveToTrash]);

@Command([EmptyTrash])

AccA_Imprimir Botón para imprimir página actual.

Formula: @Command([FilePrint])

AccA_Logout Botón para cerrar aplicación.

JavaScript: var pathnameTmp = (window.location.pathname);

var pathname = pathnameTmp.toLowerCase(); if (navigator.appName =='Netscape') { window.open(pathname.substring(0,(pathname.lastIndexOf('.nsf')+5))+'PgA_Logout?OpenPage','Logout','resizable=yes,screenX=150,screenY=200,width=550,height=320'); } else { window.open(pathname.substring(0,(pathname.lastIndexOf('.nsf')+5))+'PgA_Logout?OpenPage','Logout','resizable=yes,screenX=150,screenY=200,width=350,height=180'); }

Librerías Script

ScrA_EnvioAlertas Funciones y procedimientos

LotusScript Sub EnvioAlerta(receptor As String,mensaje As String, actividad

As String) Dim db As NotesDatabase

229

Dim DocAlert As NotesDocument Dim estilo As NotesRichTextStyle Dim cuerpo As NotesRichTextItem Dim session As New NotesSession Set db=session.CurrentDatabase Set DocAlert=db.CreateDocument() Set cuerpo =DocAlert.CreateRichTextItem("Body") If (DocAlert Is Nothing) Then Exit Sub End If DocAlert.Form="Memo" 'Meno es el estandar para crear un documento de correo DocAlert.Subject="Existe una actividad pendiente - "+actividad Call cuerpo.AppendText(mensaje) Call cuerpo.AddNewline(1,True) Call cuerpo.AddNewline(1,True) Call cuerpo.AppendText("De click aqui para ingresar a la aplicación >> ") Call cuerpo.AppendDocLink(db,"Click aqui para ir al documento") Call DocAlert.Send(False,receptor) End Sub

ScrA_FuncionesCompartidas

Funciones y procedimientos

LotusScript Option Public

Dim s As notessession Dim db As NotesDatabase Dim doc As NotesDocument Dim Mayor As Integer Dim docAc As NotesUIDocument Dim UltimoCod As Integer Dim v As NotesView Dim DocCollec As NotesDocumentCollection Dim categoria As String Dim proceso As String Dim dbDefProceso As NotesDatabase Dim session As notessession Dim profile As NotesDocument

Function GrabaDocConfiguracion (inicialOri As String, inicialDes As String, nombreBase As String) As Boolean Dim session As NotesSession Dim otherProfile As NotesDocument Dim profile As NotesDocument Dim workspace As New NotesUIWorkspace Dim uidoc As NotesUIDocument

230

Set session = New NotesSession Set db = session.CurrentDatabase Set uidoc = workspace.CurrentDocument Set profile = uidoc.Document Dim dbOther As NotesDatabase Set dbOther = session.GetDatabase(profile.GetItemValue("Cmp"+inicialOri +"_NombreSrv")(0),nombreBase) If Not dbOther.IsOpen Then Msgbox "No se encuentra base " +profile.GetItemValue("Cmp"+inicialOri +"_NombreSrv")(0)+"\"+ nombreBase,MB_ICONEXCLAMATION,"Mensaje del Sistema" GrabaDocConfiguracion = False Exit Function End If Set otherProfile = dbOther.GetProfileDocument("Frm"+inicialDes+"_Configuracion") Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_NombreSrv",profile.GetItemValue("Cmp"+inicialOri +"_NombreSrv")(0)) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_BDAplicacion",profile.GetItemValue("Cmp"+inicialOri +"_BDAplicacion")(0)) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_BDAplicacion_dir",profile.GetItemValue("Cmp"+inicialOri +"_BDAplicacion_dir")(0)) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_BDProcesos",profile.GetItemValue("Cmp"+inicialOri +"_BDProcesos")(0)) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_BDProcesos_dir",profile.GetItemValue("Cmp"+inicialOri +"_BDProcesos_dir")(0)) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_BDOrganizacion",profile.GetItemValue("Cmp"+inicialOri +"_BDOrganizacion")(0)) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_BDOrganizacion_dir",profile.GetItemValue("Cmp"+inicialOri +"_BDOrganizacion_dir")(0)) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_BDArchive",profile.GetItemValue("Cmp"+inicialOri +"_BDArchive")(0)) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_BDArchive_dir",profile.GetItemValue("Cmp"+inicialOri +"_BDArchive_dir")(0)) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_PermiteDuplicado",profile.GetItemValue("Cmp"+inicialOri +"_PermiteDuplicado")(0)) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes

231

+"_DiasLab",profile.GetItemValue("Cmp"+inicialOri +"_DiasLab")) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_HoraInicio",profile.GetItemValue("Cmp"+inicialOri +"_HoraInicio")(0)) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_HoraSalida",profile.GetItemValue("Cmp"+inicialOri +"_HoraSalida")(0)) Call otherProfile.ReplaceItemValue("Cmp"+inicialDes +"_Migracion",profile.GetItemValue("Cmp"+inicialOri +"_Migracion")(0)) If (otherProfile.Save(True,False)) Then GrabaDocConfiguracion = True Else GrabaDocConfiguracion = False End If End Function

Function ConexionBDDefProcesos As Boolean OpenDocPerfil Set dbDefProceso = session.GetDatabase(profile.GetItemValue("CmpA_NombreSrv")(0),profile.GetItemValue("CmpA_BDProcesos_dir")(0)) If Not dbDefProceso.IsOpen Then Msgbox "No se encuentra base " +profile.GetItemValue("CmpA_NombreSrv")(0)+"\"+profile.GetItemValue("CmpA_BDProcesos_dir")(0),MB_ICONEXCLAMATION,"Mensaje del Sistema" ConexionBDDefProcesos = False Exit Function End If ConexionBDDefProcesos = True End Function

Sub OpenDocPerfil If session Is Nothing Then Set session = New NotesSession End If If db Is Nothing Then Set db = session.CurrentDatabase End If If profile Is Nothing Then 'Documento de configuracion Set profile = db.GetProfileDocument("FrmA_Configuracion") End If End Sub

232

ScrA_WfeLoadAct Funciones y procedimientos

LotusScript Option Public

Use "ScrA_WorkFlow" Dim uidocu As NotesUIDocument

Sub CargaOpcionesActividadesProcesos(CodProceso As Integer,CodActividadAct As Integer) Msgbox "Estoy dentro de ''CargarOpcionesActividadesprocesos" Dim workspace As New NotesUIWorkspace Set uidocu = workspace.CurrentDocument uidocu.EditMode=True Dim Bases_DefProc As NotesDatabase Dim Sesion As New NotesSession Dim Vista_Procesos As NotesView Dim DocProc As NotesDocument If Not ConexionBDDefProcesos Then Msgbox "La base no ha sido abierta",,"Error de acceso a base" Exit Sub End If Set Vista_Procesos=dbDefProceso.GetView("VstD_Procesos_Cmpl") Set DocProc =Vista_Procesos.GetFirstDocument Dim CodProc As Integer Dim NombreProceso As String While Not (DocProc Is Nothing) CodProc=Val(DocProc.CmpD_CodigoPro(0)) If CodProceso=CodProc Then NombreProceso =DocProc.CmpD_NombrePro(0) Call Localiza_Actividad(CodProc,CodActividadAct) Exit Sub End If Set DocProc =Vista_Procesos.GetNextDocument(DocProc) Wend If 2=3 Then ' Este es un codigo que lo puedo abrir y cerrar cando no lo necesite Call uidocu.FieldSetText("CmpA_CodProceso",Str(CodProceso )) Call uidocu.FieldSetText("CmpA_CodActividadActual",Str(CodActividadAct )) Call uidocu.FieldSetText("CmpA_TipoActividad","Manual/Automatica")

233

Call uidocu.FieldSetText("CmpA_TipoAccion","Simple/Condición") Call uidocu.FieldSetText("CmpA_EstadoBorrador","Si") Call uidocu.FieldSetText("CmpA_NombreJob",NomJob) Call uidocu.FieldSetText("CmpA_Responsable","Sbone\BMD") Call uidocu.FieldSetText("CmpA_Accion","Aceptar") Call uidocu.FieldSetText("CmpA_Condicion","A=1") Call uidocu.Save() End If End Sub

Sub Localiza_Actividad(CodProceso As Integer,CodActividad As Integer) Msgbox "Estoy dentro de ''Localiza_Actividad''" Dim Bases_DefProc As NotesDatabase Dim Sesion As New NotesSession Dim Vista_ProActAcc As NotesView Dim Vista_ProAct As NotesView Dim DocProc As NotesDocument Dim DocCollec As NotesDocumentCollection Dim Acciones As String Dim KeyLookFor As String Dim ListaAcciones Dim Tipo_Accion,SecuenciaAcciones As String Dim RolResponsable As String Dim CodAccion As String Dim NombreAgente As String If Not ConexionBDDefProcesos Then Msgbox "La base no ha sido abierta",,"Error de acceso a base" Exit Sub End If Set Vista_ProActAcc=dbDefProceso.GetView("VstD_ProcYActiYAcci") KeyLookFor =Trim(Str(CodProceso))+"-"+Trim(Str( CodActividad ))+"-" Set DocCollec = Vista_ProActAcc.GetAllDocumentsByKey(KeyLookFor) Set DocProc =DocCollec.GetFirstDocument Acciones="" SecuenciaAcciones="" While Not (DocProc Is Nothing) CodAccion=DocProc.CmpD_CodigoAccion(0) Tipo_Accion =Trim(DocProc.CmpD_RdoTipo(0)) SecuenciaAcciones =SecuenciaAcciones +CodAccion+"-"+Tipo_Accion+","

234

Acciones=Acciones+Trim(DocProc.CmpD_NombreAccion(0))+"|"+CodAccion +"," Set DocProc =DocCollec.GetNextDocument(DocProc) Wend Acciones=Mid(Acciones,1,Len(Acciones)-1) Dim DocDescrip As NotesDocument Dim ActividadConSinPlazo As String Dim CantidadTiempo As Integer Dim Unidad_Tiempo As String Set Vista_ProAct=dbDefProceso.GetView("VstD_ProcYActividades") Set DocCollec = Vista_ProAct.GetAllDocumentsByKey(KeyLookFor) Set DocDescrip =DocCollec.GetFirstDocument Dim NombreActividad As String While Not (DocDescrip Is Nothing) NombreActividad=DocDescrip.CmpD_NombreActividad(0) NombreAgente=DocDescrip.CmpD_NombreAgente(0) TipoActividad=DocDescrip.CmpD_TipoActividad(0) RolResponsable=Trim(DocDescrip.CmpD_ResponsableAct(0)) ActividadConSinPlazo=Implode(DocDescrip.CmpD_EstadoPlazoAct) CantidadTiempo=Val(DocDescrip.CmpD_ActTiempoPlazo(0)) Unidad_Tiempo=Implode(DocDescrip.CmpD_ActPlazoDH) NombreActividad=DocDescrip.CmpD_NombreActividad(0) Set DocDescrip =DocCollec.GetNextDocument(DocDescrip) Wend Dim workspace As New NotesUIWorkspace Set uidocu = workspace.CurrentDocument Call uidocu.FieldSetText ("Opciones",Acciones) 'Call uidocu.FieldSetText ("CmpA_TipoActividad",TipoActividad) Call uidocu.FieldSetText ("CmpA_TipoAccion",SecuenciaAcciones) Call uidocu.FieldSetText ("CmpA_EstadoDocumento",NombreActividad) Call uidocu.FieldSetText ("CmpA_NombreAgente",NombreAgente) Call uidocu.FieldSetText ("CmpA_NombreActividad",NombreActividad)

235

If Trim(ActividadConSinPlazo)="A" Then 'La A significa que si hay plazo en la actividad If Trim(Unidad_Tiempo)="H" Then Call uidocu.FieldSetText ("CmpA_PlazoActividadEnHoras",Trim(Str(CantidadTiempo))) Else CantidadTiempo=CantidadTiempo*24 Call uidocu.FieldSetText ("CmpA_PlazsoActividadEnHoras",Trim(Str(CantidadTiempo))) End If End If Call uidocu.Refresh Call uidocu.RefreshHideFormulas End Sub

Function CargarSiguienteActividad(Cod_Pro As Integer, Cod_Act As Integer, Cod_Acc As Integer) As Boolean Dim Vista_ProActAcc As NotesView Dim Vista_ProAct As NotesView Dim DocProc As NotesDocument Dim DocProcAct As NotesDocument Dim DocCollec As NotesDocumentCollection Dim DocCollecProAct As NotesDocumentCollection Dim DocCollecProActAcc As NotesDocumentCollection Dim workspace As New NotesUIWorkspace Set uidocu = workspace.CurrentDocument Dim KeyLookFor As String Dim Siguient_Actividad As String Dim TipoAccionSimpleCondicion As String Dim DecicionSeleccionada As String Dim CondiciondeAcc As String Dim ResponsableTarea As String Dim Acciones As String Dim SecuenciaAcciones As String Dim Tipo_Accion As String Dim CondiciónSinAsterisco As String Dim Opciones As String Dim NombreAccion As String Dim CondicionSeleccionadaporUsuario As String Dim ActividadConSinPlazo As String Dim CantidadTiempo As Integer Dim Unidad_Tiempo As String Dim NOMBRE_AGENTE As String Dim NombreActiv As String If Not ConexionBDDefProcesos Then Msgbox "La base no ha sido abierta",,"Error de acceso a base" CargarSiguienteActividad=False Exit Function

236

End If DecicionSeleccionada=uidocu.FieldGetText("CmpA_Condicion") KeyLookFor=Trim(Str(Cod_Pro))+"-"+Trim(Str(Cod_Act))+"-"+Trim(Str(Cod_Acc)) Set Vista_ProActAcc=dbDefProceso.GetView("VstD_ProcYActiYAcci") Set DocCollecProActAcc = Vista_ProActAcc.GetAllDocumentsByKey(KeyLookFor) Set DocProcActAcc =DocCollecProActAcc.GetFirstDocument While Not (DocProcActAcc Is Nothing) Siguient_Actividad=Implode(DocProcActAcc.CmpD_AccSiguienteActividad) TipoAccionSimpleCondicion=DocProcActAcc.CmpD_RdoTipo(0) CondiciondeAcc=Implode(DocProcActAcc.CmpD_Lista,",") NombreAccion=DocProcActAcc.CmpD_NombreAccion(0) Set DocProcActAcc =DocCollecProActAcc.GetNextDocument(DocProcActAcc) Wend If Trim(TipoAccionSimpleCondicion)="C" Then Dim CondicionesIguales As Boolean CondiciónSinAsterisco ="" For x=1 To Len(CondiciondeAcc) Chara=Mid(CondiciondeAcc,x,1) If chara<>"*" Then CondiciónSinAsterisco =CondiciónSinAsterisco +Chara End If Next CondiciónSinAsterisco =CondiciónSinAsterisco +"," For x=1 To Len(CondiciónSinAsterisco ) If Mid(CondiciónSinAsterisco,x,1)<>"," Then Opciones=Opciones+Mid(CondiciónSinAsterisco,x,1) Else CondicionSeleccionadaporUsuario= Trim(uidocu.FieldGetText ("CmpA_Condicion"))

Dim Condicon As String Dim CodigoAccion As String Dim Parte_Accion As Variant Dim Cond As Integer Parte_Accion = Split(Opciones,"=") Condicon=Parte_Accion(0)

237

Siguient_Actividad=Parte_Accion(1) If Trim(CondicionSeleccionadaporUsuario)="" Then Msgbox "El usuario no ha selecionado el campo de condicion, requerido para el flujo",,"Mensaje del Sistema" CargarSiguienteActividad=False Exit Function End If If Trim(Condicon)=Trim(CondicionSeleccionadaporUsuario) Then CondicionesIguales =True Call uidocu.FieldSetText ("CmpA_CodActividadActual",Siguient_Actividad) Call uidocu.FieldSetText ("CmpA_NombreAccion",NombreAccion) Exit For End If Opciones="" End If Next x If CondicionesIguales =False Then Msgbox "La condicion definida en el proceso no coincide con la programada."+Chr(13)+"El documento no podra ser transferido.",,"Mensaje del Sistema" CargarSiguienteActividad=False Exit Function End If Else 'CmpA_NombreAgente Call uidocu.FieldSetText ("CmpA_CodActividadActual",Trim(Siguient_Actividad)) Call uidocu.FieldSetText ("CmpA_NombreAccion",NombreAccion) End If Acciones="" SecuenciaAcciones="" If Siguient_Actividad ="Final" Then 'Msgbox "Se ha finalizado el flujo del proceso",,"Mensaje del sistema" Call uidocu.FieldSetText("CmpA_NombreActividad","Final") CargarSiguienteActividad=True

238

Exit Function End If KeyLookFor=Trim(Str(Cod_Pro))+"-"+Trim(Siguient_Actividad)+"-" Set Vista_ProAct=dbDefProceso.GetView("VstD_ProcYActiYAcci") Set DocCollecProAct = Vista_ProAct.GetAllDocumentsByKey(KeyLookFor) Set DocProcAct =DocCollecProAct.GetFirstDocument While Not (DocProcAct Is Nothing) CodAccion=Implode(DocProcAct.CmpD_CodigoAccion) Tipo_Accion=Implode(DocProcAct.CmpD_RdoTipo) SecuenciaAcciones =SecuenciaAcciones +CodAccion+"-"+Tipo_Accion+"," Acciones=Acciones+Trim(DocProcAct.CmpD_NombreAccion(0))+"|"+CodAccion +"," Set DocProcAct =DocCollecProAct.GetNextDocument(DocProcAct ) Wend Acciones=Mid(Acciones,1,Len(Acciones)-1) Call uidocu.FieldSetText ("Opciones",Acciones) Call uidocu.FieldSetText ("CmpA_TipoAccion",SecuenciaAcciones) KeyLookFor=Trim(Str(Cod_Pro))+"-"+Trim(Siguient_Actividad) Set Vista_ProAct=dbDefProceso.GetView("VstD_ProcYActividades") Set DocCollecProAct = Vista_ProAct.GetAllDocumentsByKey(KeyLookFor) Set DocProcAct =DocCollecProAct.GetFirstDocument While Not (DocProcAct Is Nothing) ResponsableTarea=DocProcAct.CmpD_ResponsableAct(0) ResponTarea=ObtieneNombreResponsable(ResponsableTarea) ActividadConSinPlazo=Implode(DocProcAct.CmpD_EstadoPlazoAct) CantidadTiempo=Val(DocProcAct.CmpD_ActTiempoPlazo(0)) Unidad_Tiempo=Implode(DocProcAct.CmpD_ActPlazoDH) TipoActividad=DocProcAct.CmpD_TipoActividad(0) NOMBRE_AGENTE=Implode(DocProcAct.CmpD_NombreAgente) NombreActiv=Implode(DocProcAct.CmpD_NombreActividad)

Set DocProcAct =DocCollecProAct.GetNextDocument(DocProcAct )

Wend Call uidocu.FieldSetText ("CmpA_Responsable",ResponTarea)

239

'Call uidocu.FieldSetText ("CmpA_EstadoDocumento",ActividadActual) Call uidocu.FieldSetText ("CmpA_CodRol",ResponsableTarea) If Trim(ActividadConSinPlazo)="A" Then If Trim(Unidad_Tiempo)="H" Then Call uidocu.FieldSetText ("CmpA_PlazoActividadEnHoras",Trim(Str(CantidadTiempo))) Else CantidadTiempo=CantidadTiempo*24 Call uidocu.FieldSetText ("CmpA_PlazsoActividadEnHoras",Trim(Str(CantidadTiempo))) End If End If Call uidocu.FieldSetText ("CmpA_NombreActividad",NombreActiv) Call uidocu.FieldSetText ("CmpA_TipoActividad",TipoActividad) If Trim(TipoActividad)="A" Then Call uidocu.FieldSetText ("CmpA_NombreAgente",NOMBRE_AGENTE) Else Call uidocu.FieldSetText ("CmpA_NombreAgente","-") End If Call uidocu.Refresh Call uidocu.RefreshHideFormulas CargarSiguienteActividad=True End Function

ScrA_WorkFlow Funciones y procedimientos

LotusScript Option Public

Dim session As notessession Dim db As NotesDatabase Dim profile As NotesDocument Dim view As NotesView Dim dbDefProceso As NotesDatabase Dim docProceso As NotesDocument Dim docActividad As NotesDocument Dim tipoCliente As String

Function ObtieneDatosProceso (codProceso As String, nombreProceso As String, codActividadIni As String,nombreFormulario As String, estadoInicioCualkiera As Boolean, codAuditor As String) As Boolean

240

If Not ConexionBDDefProcesos Then ObtieneDatosProceso = False End If Set view = dbDefProceso .GetView("VstD_Procesos") If view Is Nothing Then Messagebox "vista vacia",, "Mensaje del Sistema" ObtieneDatosProceso = False Exit Function End If Set docProceso = view.GetDocumentByKey(codProceso) If docProceso Is Nothing Then Messagebox "No se encuentra el proceso",, "Mensaje del Sistema" ObtieneDatosProceso = False Exit Function End If nombreProceso = docProceso.CmpD_NombrePro(0) nombreFormulario = docProceso.CmpD_NombreForm(0) codAuditor = docProceso.CmpD_AuditorProceso(0) estado$ = docProceso.CmpD_RdoIniciaProceso(0) If estado$ = "S" Then estadoInicioCualkiera = True Else estadoInicioCualkiera = False End If codActividadIni = ObtieneActividadInicial (docProceso.CmpD_NombrePro(0)) ObtieneDatosProceso = True End Function

Function ObtieneActividadInicial (proceso As String) As String Dim docCollec As NotesDocumentCollection Dim doc As NotesDocument Set view = dbDefProceso.GetView("VstD_Actividades") Set docCollec = view.GetAllDocumentsByKey(proceso) Set doc = docCollec.GetFirstDocument() If docCollec Is Nothing Then Messagebox "No se encuentra el proceso",, "Mensaje del Sistema" ObtieneActividadInicial = "" Exit Function End If codActividad$ = "" Do While Not(doc Is Nothing) If doc.CmpD_ActividadInicial(0) = "Si" Then codActividad$ = doc.CmpD_CodigoActividad(0) Exit Do End If

241

Set doc = docCollec.GetNextDocument(doc) Loop ObtieneActividadInicial = codActividad$ End Function

Function ConexionBDDefProcesos As Boolean OpenDocPerfil Set dbDefProceso = session.GetDatabase(profile.GetItemValue("CmpA_NombreSrv")(0),profile.GetItemValue("CmpA_BDProcesos_dir")(0)) If Not dbDefProceso.IsOpen Then Msgbox "No se encuentra base " +profile.GetItemValue("CmpA_NombreSrv")(0)+"\"+profile.GetItemValue("CmpA_BDProcesos_dir")(0),MB_ICONEXCLAMATION,"Mensaje del Sistema" ConexionBDDefProcesos = False Exit Function End If ConexionBDDefProcesos = True End Function

Function ObtieneDatosActividad(codProceso As String, codActividad As String,nombreActividad As String, tipoActividad As String, rolResponsable As String,nombreAgente As String, valorPlazo As String, tipoPlazo As String) As Boolean If Not ConexionBDDefProcesos Then ObtieneDatosActividad = False End If Set view = dbDefProceso .GetView("VstD_ProcYActividades") Set docActividad = view.GetDocumentByKey(codProceso+"-"+codActividad) If docActividad Is Nothing Then Messagebox "No se encuentra la actividad del proceso",, "Mensaje del Sistema" ObtieneDatosActividad = False Exit Function End If nombreAgente = "" valorPlazo = "" tipoPlazo = "" nombreActividad = docActividad.CmpD_NombreActividad(0) tipoActividad = docActividad.CmpD_TipoActividad(0) If tipoActividad = "A" Then nombreAgente = docActividad.CmpD_NombreAgente(0) Else If docActividad.CmpD_EstadoPlazoAct (0) = "A" Then valorPlazo =

242

Cstr(docActividad.CmpD_ActTiempoPlazo(0)) tipoPlazo = docActividad.CmpD_ActPlazoDH(0) End If End If rolResponsable = docActividad.CmpD_ResponsableAct(0) ObtieneDatosActividad = True End Function

Function ObtieneNombreResponsable (rolResponsable As String) As String Dim dbOrganizacion As NotesDatabase Dim nombreResponsable As String Dim docRol As NotesDocument nombreResponsable = "" OpenDocPerfil Set dbOrganizacion = session.GetDatabase(profile.GetItemValue("CmpA_NombreSrv")(0),profile.GetItemValue("CmpA_BDOrganizacion_dir")(0)) If Not dbOrganizacion.IsOpen Then Msgbox "No se encuentra base " +profile.GetItemValue("CmpA_NombreSrv")(0)+"\"+profile.GetItemValue("CmpA_BDOrganizacion_dir")(0),MB_ICONEXCLAMATION,"Mensaje del Sistema" Goto salir End If Set view = dbOrganizacion .GetView("VstO_TodosRoles") Set docRol = view.GetDocumentByKey(rolResponsable) If docRol Is Nothing Then Messagebox "No se encuentra el rol",, "Mensaje del Sistema" Goto salir End If If docRol.CmpO_EstadoRespon(0) = "Activo" Then nombreResponsable = docRol.CmpO_ResponsableRol(0) Else nombreResponsable = docRol.CmpO_SustitutoRol(0) If nombreResponsable = "" Then Msgbox "El rol responsable esta inactivo y no tiene asignado suplente",,"Mensaje del Sistema" End If End If salir: ObtieneNombreResponsable = nombreResponsable End Function

Sub OpenDocPerfil If session Is Nothing Then

243

Set session = New NotesSession End If If db Is Nothing Then Set db = session.CurrentDatabase End If If profile Is Nothing Then 'Documento de configuracion Set profile = db.GetProfileDocument("FrmA_Configuracion") End If End Sub

Function ObtieneLstAcciones (codProceso As String, codActividad As String) As String Dim docCollec As NotesDocumentCollection Dim lstAcciones As String lstAcciones = "" If Not ConexionBDDefProcesos Then Goto Salir End If Dim doc As NotesDocument

Set view = dbDefProceso .GetView("VstD_ProcYActiYAcci") Set docCollec = view.GetAllDocumentsByKey(codProceso+"-"+codActividad+"-") If docCollec Is Nothing Then Messagebox "No se encuentran las acciones",, "Mensaje del Sistema" Goto Salir End If Set doc = docCollec.GetFirstDocument Dim CodAccion As String Dim Tipo_Accion As String Dim SecuenciaAcciones As String lstAcciones="" SecuenciaAcciones="" While Not (doc Is Nothing) CodAccion=doc.CmpD_CodigoAccion(0) Tipo_Accion =Trim(doc.CmpD_RdoTipo(0)) SecuenciaAcciones =SecuenciaAcciones +CodAccion+"-"+Tipo_Accion+"," lstAcciones=lstAcciones+Trim(doc.CmpD_NombreAccion(0))+"|"+CodAccion +"," Set doc =docCollec.GetNextDocument(doc) Wend lstAcciones=Mid(lstAcciones,1,Len(lstAcciones)-1)

244

Salir: ObtieneLstAcciones = lstAcciones End Function

Function CorreccionWebPath(Byval Path As String) As String Dim pathCorregido As String Dim i As Integer Dim LenPath As Integer Dim car As String pathCorregido = Path LenPath = Len(Path) For i = 1 To 2000 car = Mid$(pathCorregido,i,1) Select Case car Case "\" pathCorregido = Left$(pathCorregido, i - 1) + "/" + Right(pathCorregido, LenPath - i) Case " " pathCorregido = Left$(pathCorregido, i - 1) + "+" + Right(pathCorregido, LenPath - i) Case "á", "é", "í", "ó", "ú", "ñ", "Ñ" pathCorregido = Left$(pathCorregido, i - 1) + "%"+Cstr(Uni(car)) + Right(pathCorregido, LenPath - i) i = i + 3 LenPath = LenPath + 3 End Select Next CorreccionWebPath = pathCorregido End Function

Sub MostrarMensaje(mensaje As String , tipoCliente As String) If tipoCliente = "Notes" Then Messagebox mensaje,,"Mensaje del Sistema" Else Msgbox "msg grabo" Print "<SCRIPT LANGUAGE='JavaScript'>window.history.back();window.alert('" + mensaje + "');</SCRIPT>" End If End Sub

Function SeteaDocumento(document As NotesDocument) As Boolean Set document = session.DocumentContext If (document Is Nothing) Then Msgbox "El documento esta vacio" Print "<SCRIPT LANGUAGE='JavaScript'>window.history.back();window.alert('El documento esta vacio');</SCRIPT>"

245

SeteaDocumento = False Exit Function End If tipoCliente = document.CmpA_TipoCliente(0) If tipoCliente = "Notes" Then Dim ws As New NotesUIworkspace Dim docUI As NotesUIDocument Set document = ws.currentdocument.document End If SeteaDocumento = True End Function

Sub GrabaLog(doc As NotesDocument) Dim db As NotesDatabase Dim session As New NotesSession Dim actividad As String Dim responsable As String Dim accion As String Dim datetime As String Dim nombreproceso As String Dim nombreactividad As String Dim item As NotesItem doc.CmpA_LCodProceso= doc.CmpA_NombreProceso(0) doc.CmpA_LNombreJob=doc.CmpA_NombreJob (0) nombreactividad=Left$(doc.CmpA_NombreActividad(0),22)+"..." responsablelog$=Left$(doc.CmpA_Responsable(0),22)+"..." nombreaccionlog$=Left$(doc.CmpA_NombreAccion(0),22)+"..." observacionlog$=Left$(doc.CmpA_Observacion(0),22)+"..." tipoclient$ =doc.CmpA_TipoCliente(0) If tipoclient$ = "Notes" Then doc.CmpA_LResponsable = doc.CmpA_LResponsable(0)+","+ responsablelog$ doc.CmpA_LCodActividadActual = doc.CmpA_LCodActividadActual(0) +","+nombreactividad doc.CmpA_LAccion = doc.CmpA_LAccion(0) +","+nombreaccionlog$ doc.CmpA_LObservacion = doc.CmpA_LObservacion(0) +","+observacionlog$ doc.CmpA_LDateTime = doc.CmpA_LDateTime(0) + ","+Format(Now, "General Date") Else

246

Set item = doc.GetFirstItem( "CmpA_LResponsable" ) Call item.AppendToTextList(responsablelog$) Set item = doc.GetFirstItem( "CmpA_LCodActividadActual" ) Call item.AppendToTextList(nombreactividad) Set item = doc.GetFirstItem( "CmpA_LAccion" ) Call item.AppendToTextList(nombreaccionlog$) Set item = doc.GetFirstItem( "CmpA_LObservacion" ) Call item.AppendToTextList(observacionlog$) Set item = doc.GetFirstItem( "CmpA_LDateTime" ) Call item.AppendToTextList(Cstr(Format(Now, "General Date"))) End If Call doc.Save( True, False ) End Sub

Imágenes

ImgA_Back.JPG Imagen del botón retroceder de las vistas

ImgA_cancel.JPG Imagen del botón cancelar

ImgA_edit.JPG Imagen del botón editar

ImgA_First.JPG Imagen del botón inicio de las vistas

ImgA_Fondo_App.jpg Imagen del logo de la aplicación

ImgA_Last.JPG Imagen del botón fin de las vistas

ImgA_logo.jpg Imagen del logo del grupo.

ImgA_Next.JPG Imagen del botón siguiente de las vistas.

ImgA_Next.JPG Imagen del botón siguiente de las vistas.

247

ImgA_save.JPG

Imagen del botón grabar.