Viewflow
Viewflow es un paquete de Django que sirve para gestionar un flujo de trabajo (workflow) y que además se modela de manera similar a BPM. Permite modelar y cambiar rápidamente un flujo sin muchas modificaciones en el código. Viewflow agrega una capa adicional al trío estándar MTV de Django.
En Viewflow, se gestionan procesos (Process). Un proceso es un flujo secuencial que se sigue de principio a fin, y que genera distintas tareas (Task) asociadas a los nodos de un flujo. Ambos modelos son agregados por Viewflow a la base de datos.
Estructura de los Módulos
Modelos de Proceso
Este modelo es el central de cada instancia de una propuesta y lleva información de la solicitud, enlazada con el modelo Application.
Modelos de Tarea
Viewflow trae un modelo Task y en nuestro caso se modificará para personalizar funciones que se adapten al proyecto. Cada tarea del flujo es creada como una instancia de nuestra tarea personalizada.
Módulo de Workflow
Los flujos de trabajo son representaciones/modelos en código de un flujo de proceso, y lo componen distintos Nodos que tiene Viewflow. Cada flujo tiene un nodo Start y un nodo End, y entre esos nodos (pasos) se programan saltos (que pueden ser condicionados) permitiendo la transición entre un nodo a otro.
Módulo de Vistas
Similares a las Views que se trabajan en Django comúnmente. Estas vistas no tienen una única URL sino que están asociadas en Viewflow a un nodo View, y Viewflow se encarga de darles el URL. Existe un View en concreto que es realmente generadora de funciones (es decir, una función que retorna otra), para tener un View general que pueda atender distintos casos dependiendo de las condiciones.
Nodos de un Workflow
Cada nodo, luego de ejecutarse o activarse exitosamente, continua a otro nodo que está definido en el flujo dependiendo del tipo de nodo (excepto el End, que no continúa a ningún sitio).
- StartFunction: Programa el flujo para que, al ejecutarse una función, inicie una instancia nueva del flujo.
- Function: ejecuta una función automáticamente y continúa a un nodo siguiente. La diferencia con Handler es que está puede ser ejecutada sin necesidad de estar dentro del flujo.
- Handler: ejecuta una función automáticamente y continúa a un nodo siguiente.
- If: este nodo recibe una función que retorna booleano (puede ser una función lambda) y determina a qué camino irse, es decir, a qué nodo continuar.
- Switch: es similar al If pero con distintas guardias booleanas, la primera que se ejecute indica cuál es el siguiente nodo.
- Split: este nodo permite hacer una bifurcación en el camino. Normalmente, las secuencias de un flujo son lineales (A → B → C → D), pero Split permite que desde un nodo se activen dos, tres o más al mismo tiempo, lo que permite la concurrencia de nodos.
- Join: este nodo permite cerrar una bifurcación en el camino. Luego de activar distintos nodos, Join permite esperar a que se terminen todas las tareas para seguir.
- View: este es uno de los nodos más importantes. Permite el procesado de una vista, por consiguiente son los encargados de mostrarle al usuario la vista asociada a una tarea que se realiza manualmente. Al crear este nodo se le asocia un View, que puede ser cualquier View y que en su POST debe marcar la activación de la tarea como done. Al recibir ese done, el nodo continúa.
- End: indica el final del flujo. Cualquier nodo puede apuntar a End, y cuando ocurre esa transición, se finaliza el proceso y no se continúa a otro nodo.
Cada nodo puede ser asignado a un usuario en específico. Cuando esto sucede, solo la persona asignada tiene control de ejecución sobre ese nodo.
Modelo BPM
El modelo BPM utilizado para generar el flujo de negocio es el siguiente:
