View
218
Download
1
Category
Preview:
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.
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.
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.
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.
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.
Recommended