Ir al contenido

Database description

El motor de flujos de trabajo OKMFlow usa una base de datos relacional para almacenar toda la información relacionada con los flujos de trabajo. El esquema de la base de datos está organizado en dos secciones distintas:

  • Tablas de definición: almacenan la estructura y la configuración de los procesos de flujo de trabajo, incluyendo nodos, transiciones y sus propiedades
  • Tablas de ejecución: almacenan información en tiempo de ejecución sobre las instancias de flujo de trabajo, las asignaciones de tareas, las variables de proceso y el historial de ejecución

Este documento se centra en las tablas de definición que describen la estructura del flujo de trabajo. Estas tablas definen los planos de los flujos de trabajo que el motor ejecutará.

Estructura del esquema de definición de procesos de la base de datos

Sección titulada «Estructura del esquema de definición de procesos de la base de datos»

Las tablas de definición están organizadas jerárquicamente, con WF_PROCESS_DEFINITION como entidad raíz. Cada definición de proceso contiene varios nodos (WF_NODE) y transiciones (WF_TRANSITION) que definen la estructura del flujo de trabajo. Los nodos usan herencia para especializar su comportamiento, mientras que las transiciones conectan los nodos para crear el camino de ejecución del flujo de trabajo.

Las siguientes tablas almacenan la información de definición del flujo de trabajo:

Tabla Descripción
WF_PROCESS_DEFINITION Almacena las definiciones de proceso de flujo de trabajo, incluyendo nombre, versión y estado de activación
WF_NODE Tabla base para todos los nodos del flujo de trabajo, que contiene propiedades comunes como posición, nombre y descripción
La tabla wf_node es la tabla base de todos los nodos del flujo de trabajo. Esta tabla usa la estrategia de herencia JOINED de JPA, lo que significa que cada tipo de nodo especializado (Start, End, Action, Decision, Mail, Task) tiene su propia tabla que se une con esta tabla base mediante una relación de clave foránea.
WF_NODE_START Tabla especializada para los nodos Start (hereda de WF_NODE)
WF_NODE_END Tabla especializada para los nodos End (hereda de WF_NODE)
WF_NODE_ACTION Tabla especializada para los nodos Action con capacidad de ejecución de scripts (hereda de WF_NODE)
WF_NODE_DECISION Tabla especializada para los nodos Decision con lógica de enrutado condicional (hereda de WF_NODE)
WF_NODE_MAIL Tabla especializada para los nodos Mail con la configuración de envío de correo (hereda de WF_NODE)
WF_NODE_TASK Tabla especializada para los nodos Task con propiedades de asignación y notificación (hereda de WF_NODE)
WF_TRANSITION Almacena las transiciones que conectan los nodos, definiendo los caminos de ejecución del flujo de trabajo

Relaciones de la base de datos

Las tablas de definición forman una estructura jerárquica con las siguientes relaciones clave:

  • WF_PROCESS_DEFINITION → WF_NODE: relación uno a muchos. Cada definición de proceso contiene varios nodos que definen la estructura del flujo de trabajo.
  • WF_NODE → tablas de nodo especializadas: relación de herencia JOINED. Cada tipo de nodo (Start, End, Action, Decision, Mail, Task) extiende la tabla base WF_NODE mediante una unión por clave foránea.
  • WF_NODE → WF_TRANSITION (origen): relación uno a muchos. Un nodo puede tener varias transiciones salientes.
  • WF_NODE → WF_TRANSITION (destino): relación uno a muchos. Un nodo puede tener varias transiciones entrantes.

Listar todas las definiciones de proceso activas

Sección titulada «Listar todas las definiciones de proceso activas»
SELECT PD_ID, PD_NAME, PD_VERSION, PD_ACTIVE FROM WF_PROCESS_DEFINITION WHERE PD_ACTIVE = 'T' ORDER BY PD_NAME, PD_VERSION;

Buscar todos los nodos de un proceso concreto

Sección titulada «Buscar todos los nodos de un proceso concreto»
SELECT n.NOD_ID, n.NOD_NAME, n.NOD_POS_X, n.NOD_POS_Y FROM WF_NODE n INNER JOIN WF_PROCESS_DEFINITION p ON n.NOD_PROCESS_DEF_ID = p.PD_ID WHERE p.PD_NAME = 'document_approval' ORDER BY n.NOD_NAME;

Listar todos los nodos Task con su configuración de notificación

Sección titulada «Listar todos los nodos Task con su configuración de notificación»
SELECT n.NOD_ID, n.NOD_NAME, t.NTSK_NOTIF_ASSIGN, t.NTSK_NOTIF_SUBJECT FROM WF_NODE n INNER JOIN WF_NODE_TASK t ON n.NOD_ID = t.NOD_ID WHERE t.NTSK_NOTIF_ASSIGN = 'T';
SELECT t.ID, t.TRA_NAME, t.TRA_TYPE, ns.NOD_NAME AS SOURCE_NODE, nt.NOD_NAME AS TARGET_NODE FROM WF_TRANSITION t INNER JOIN WF_NODE ns ON t.TRA_SOURCE_NODE_ID = ns.NOD_ID INNER JOIN WF_NODE nt ON t.TRA_TARGET_NODE_ID = nt.NOD_ID;
-- Count Start nodes
SELECT COUNT(*) AS START_NODES FROM WF_NODE n INNER JOIN WF_NODE_START s ON n.NOD_ID = s.NOD_ID WHERE n.NOD_PROCESS_DEF_ID = 1;
-- Count Task nodes
SELECT COUNT(*) AS TASK_NODES FROM WF_NODE n INNER JOIN WF_NODE_TASK t ON n.NOD_ID = t.NOD_ID WHERE n.NOD_PROCESS_DEF_ID = 1;
-- Count Decision nodes
SELECT COUNT(*) AS DECISION_NODES FROM WF_NODE n INNER JOIN WF_NODE_DECISION d ON n.NOD_ID = d.NOD_ID WHERE n.NOD_PROCESS_DEF_ID = 1

Estructura del esquema de ejecución de procesos de la base de datos

Sección titulada «Estructura del esquema de ejecución de procesos de la base de datos»

Las tablas de ejecución rastrean el estado en tiempo de ejecución de las instancias de flujo de trabajo a medida que se ejecutan. Estas tablas capturan las instancias de proceso, las asignaciones de tareas, las variables y el historial de ejecución, formando un registro de auditoría completo de la ejecución del flujo de trabajo.

Las siguientes tablas almacenan la información de ejecución del flujo de trabajo:

Tabla Descripción
WF_PROCESS_INSTANCE Almacena las instancias en tiempo de ejecución de los procesos de flujo de trabajo, rastreando su estado actual y el progreso de la ejecución
WF_TASK_INSTANCE Almacena las asignaciones de tareas individuales creadas durante la ejecución del flujo de trabajo, incluyendo el asignado y el estado de finalización
La tabla wf_task_instance incluye una tabla de colección wf_task_ins_pooled_actors para almacenar varios posibles asignados. Cuando una tarea se configura para asignación de grupo (pooled), varios usuarios pueden reclamarla, pero solo uno quedará asignado al reclamarla.
WF_VARIABLE Almacena las variables de proceso que contienen datos durante la ejecución del flujo de trabajo, dando soporte a un comportamiento dinámico del flujo de trabajo
WF_PROCESS_INSTANCE_LOG Almacena las entradas del registro de auditoría que rastrean el historial de ejecución del flujo de trabajo, las transiciones de nodo y los eventos de tarea

Relaciones de la base de datos

Las tablas de ejecución forman una estructura en tiempo de ejecución centrada en las instancias de proceso:

  • WF_PROCESS_INSTANCE → WF_PROCESS_DEFINITION: relación muchos a uno. Cada instancia de proceso se crea a partir de una versión concreta de una definición de proceso.
  • WF_PROCESS_INSTANCE → WF_NODE: relación muchos a uno. Rastrea el nodo actual en el que se encuentra posicionada la ejecución del flujo de trabajo.
  • WF_PROCESS_INSTANCE → WF_TASK_INSTANCE: relación uno a muchos. Una instancia de proceso genera varias instancias de tarea a medida que se ejecuta.
  • WF_PROCESS_INSTANCE → WF_VARIABLE: relación uno a muchos. Cada instancia de proceso mantiene su propio conjunto de variables.
  • WF_PROCESS_INSTANCE → WF_PROCESS_INSTANCE_LOG: relación uno a muchos. La ejecución del proceso genera varias entradas de registro que rastrean su historial.
  • WF_TASK_INSTANCE → WF_NODE_TASK: relación muchos a uno. Cada instancia de tarea se crea a partir de una definición de nodo Task.
SELECT pi.PI_ID, pd.PD_NAME, pi.PI_STATUS, pi.PI_INITIATOR, pi.PI_START FROM WF_PROCESS_INSTANCE pi INNER JOIN WF_PROCESS_DEFINITION pd ON pi.PI_PROCESS_DEF_ID = pd.PD_ID WHERE pi.PI_STATUS = 'running' ORDER BY pi.PI_START DESC;

Buscar todas las tareas asignadas a un usuario

Sección titulada «Buscar todas las tareas asignadas a un usuario»
SELECT ti.TI_ID, ti.TI_STATUS, ti.TI_DUE_DATE, pi.PI_ID AS PROCESS_ID, pd.PD_NAME AS PROCESS_NAME FROM WF_TASK_INSTANCE ti INNER JOIN WF_PROCESS_INSTANCE pi ON ti.TI_PROCESS_INS_ID = pi.PI_ID INNER JOIN WF_PROCESS_DEFINITION pd ON pi.PI_PROCESS_DEF_ID = pd.PD_ID WHERE ti.TI_ACTOR = 'jsmith' AND ti.TI_STATUS IN ('open', 'assigned') ORDER BY ti.TI_DUE_DATE;

Listar las variables de proceso de una instancia

Sección titulada «Listar las variables de proceso de una instancia»
SELECT VAR_NAME, VAR_CLASS_NAME, VAR_VALUE FROM WF_VARIABLE WHERE VAR_PROCESS_INSTANCE_ID = 123 ORDER BY VAR_NAME;

Ver el historial de ejecución de una instancia de proceso

Sección titulada «Ver el historial de ejecución de una instancia de proceso»
SELECT PIL_DATE, PIL_NODE_TYPE, PIL_NODE_NAME, PIL_STATUS, PIL_DATA FROM WF_PROCESS_INSTANCE_LOG WHERE PIL_PROC_INS_ID = 123 ORDER BY PIL_DATE ASC;