Database description
Resumen
Sección titulada «Resumen»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.

Resumen de las tablas de definición
Sección titulada «Resumen de las tablas de definición»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.
Consultar las tablas de definición
Sección titulada «Consultar las tablas de definición»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';Buscar transiciones entre nodos concretos
Sección titulada «Buscar transiciones entre nodos concretos»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;Contar nodos por tipo en un proceso
Sección titulada «Contar nodos por tipo en un proceso»-- Count Start nodesSELECT 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 nodesSELECT 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 nodesSELECT 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 = 1Estructura 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.

Resumen de las tablas de ejecución
Sección titulada «Resumen de las tablas de ejecución»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.
Consultar las tablas de ejecución
Sección titulada «Consultar las tablas de ejecución»Buscar instancias de proceso en ejecución
Sección titulada «Buscar instancias de proceso en ejecución»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;