La primera parte de esta serie introdujo algunos pasos básicos para administrar el ciclo de vida de cualquier entidad en una base de datos. Nuestra segunda y última parte le mostrará cómo definir el flujo de trabajo real utilizando tablas de configuración adicionales. Aquí es donde se le presentan al usuario las opciones permitidas en cada paso del camino. También demostraremos una técnica para evitar la reutilización estricta de "ensamblajes" y "subensamblajes" en una estructura de lista de materiales.
Definir las opciones
La Parte 1 presentó las tablas de flujo de trabajo principales y cómo se pueden incorporar fácilmente a su base de datos. Lo que necesitamos ahora es algo que guíe al usuario a seleccionar el siguiente estado lógico, algo que defina un flujo de trabajo lógico. .
El siguiente diagrama define todos los componentes de un modelo de base de datos de flujo de trabajo:
Dos tablas de configuración, workflow_state_option
y workflow_state_context
, se han añadido al modelo. Comenzaremos con la tabla de opciones, que define los siguientes estados permitidos . Una vez que se comprenda su función, volveremos a la tabla de contexto y explicaremos el papel que desempeña.
Siguientes estados permitidos
Las tablas que siguen son algo así como una vista SQL de nuestras tablas de configuración. Aquí hemos ocultado las combinaciones de tablas y solo estamos viendo las combinaciones de type_keys
. Entonces, consideremos cada ESTADO.RESULTADO combinación y definir las opciones disponible para el usuario:
ESTADO.RESULTADO Combinación (de la jerarquía de estado) | Contexto del estado | Niño discapacitado | Opción 1 | Opción 2 |
---|---|---|---|---|
APLICACIÓN_RECIBIDA .ACEPTADA | TRABAJO_ESTÁNDAR _APLICACIÓN | N | REVISIÓN_DE_APLICACIÓN | |
APLICACIÓN_RECIBIDA .RECHAZADA | TRABAJO_ESTÁNDAR _APLICACIÓN | N | APLICACIÓN_CERRADA .NO_CONTRATADA | |
REVISIÓN_DE_APLICACIÓN .APROBADO | TRABAJO_ESTÁNDAR _APLICACIÓN | N | INVITADO_A_ENTREVISTA | |
REVISIÓN_DE_APLICACIÓN .FALLIDO | TRABAJO_ESTÁNDAR _APLICACIÓN | N | APLICACIÓN_CERRADA .NO_CONTRATADA | |
INVITADO_A_ENTREVISTA .ACEPTADO | TRABAJO_ESTÁNDAR _APLICACIÓN | N | ENTREVISTA | |
INVITADO_A_ENTREVISTA .RECHAZADO | TRABAJO_ESTÁNDAR _APLICACIÓN | N | APLICACIÓN_CERRADA .NO_CONTRATADA | |
ENTREVISTA .APROBADA | TRABAJO_ESTÁNDAR _APLICACIÓN | N | HACER_OFERTA | BUSCAR_REFERENCIAS |
ENTREVISTA.FALLIDA | TRABAJO_ESTÁNDAR _APLICACIÓN | N | APLICACIÓN_CERRADA | |
ENTREVISTA .CANDIDATE_CANCELLED | TRABAJO_ESTÁNDAR _APLICACIÓN | N | APLICACIÓN_CERRADA | INVITADO_A_ENTREVISTA |
ENTREVISTA .NO_SHOW | TRABAJO_ESTÁNDAR _APLICACIÓN | N | APLICACIÓN_CERRADA | |
HACER_OFERTA.ACEPTADA | TRABAJO_ESTÁNDAR _APLICACIÓN | N | BUSCAR_REFERENCIAS | |
HACER_OFERTA.RECHAZADA | TRABAJO_ESTÁNDAR _APLICACIÓN | N | APLICACIÓN_CERRADA | |
BUSCAR_REFERENCIAS .APROBADO | TRABAJO_ESTÁNDAR _APLICACIÓN | N | APLICACIÓN_CERRADA .CONTRATADA | |
BUSCAR_REFERENCIAS .FALLIDO | TRABAJO_ESTÁNDAR _APLICACIÓN | N | APLICACIÓN_CERRADA | |
APLICACIÓN_CERRADA .CONTRATADA | TRABAJO_ESTÁNDAR _APLICACIÓN | N | ||
APLICACIÓN_CERRADA .NO_CONTRATADA | TRABAJO_ESTÁNDAR _APLICACIÓN | N |
Debido a que estamos ignorando el contexto por ahora, Contexto de estado y ¿Niño discapacitado? están en gris. También he limitado el número de opciones en este ejemplo a dos por razones de brevedad, aunque en la práctica no hay límite.
Entonces, ¿cómo funciona esto?
Imagine que la entrevista acaba de realizarse y el entrevistador está registrando el resultado. La tabla subyacente que se actualiza es managed_entity_state
. Hay dos resultados lógicos:APROBADO y NO APROBADO. Así que el managed_entity_state
actual se actualiza con el resultado seleccionado (wf_state_type_outcome_id
). En el modelo de ejemplo, el entrevistador también puede incluir algunas notas sobre la entrevista.
Si el entrevistador selecciona APROBADO, se le presentan dos opciones más:HACER_OFERTA y BUSCAR_REFERENCIAS. Estos son los próximos estados en nuestro flujo de trabajo. Son similares a go to
declaraciones en la programación. Para cualquiera de las opciones, se inserta una nueva fila en managed_entity_state
, moviendo la solicitud de empleo al siguiente estado en el proceso de flujo de trabajo. El usuario puede establecer una fecha límite para esto ingresando un due_date
.
Por otro lado, si el entrevistador selecciona FALLIDO, solo hay una opción:APLICACIÓN_CERRADA. Así que un nuevo managed_entity_state
la fila se inserta usando el estado APPLICATION_CLOSED (wf_state_type_state_id
).
Verá que no hay opciones disponibles para el estado APLICACIÓN_CERRADA. Esto significa que se ha llegado al final del proceso de flujo de trabajo.
La tabla de contexto
Miremos la configuración para el proceso de solicitud de empleo técnico para ver qué rol tiene la tabla de contexto juega:
ESTADO.RESULTADO Combinación (de jerarquía de estado) | Contexto del estado | Niño discapacitado | Opción 1 | Opción 2 |
---|---|---|---|---|
APLICACIÓN_RECIBIDA .ACEPTADA | TRABAJO_TÉCNICO _APLICACIÓN | N | APLICACIÓN _REVISIÓN | |
APLICACIÓN_RECIBIDA .RECHAZADA | TRABAJO_TÉCNICO _APLICACIÓN | N | APLICACIÓN _CERRADA | |
REVISIÓN_DE_APLICACIÓN .APROBADO | TRABAJO_TÉCNICO _APLICACIÓN | N | INVITADO_A _ENTREVISTA | |
REVISIÓN_DE_APLICACIÓN .FALLIDO | TRABAJO_TÉCNICO _APLICACIÓN | N | APLICACIÓN _CERRADA | |
INVITADO_A_ENTREVISTA .ACEPTADO | TRABAJO_TÉCNICO _APLICACIÓN | N | PRUEBA_APTITUD | |
INVITADO_A_ENTREVISTA .RECHAZADO | TRABAJO_TÉCNICO _APLICACIÓN | N | APLICACIÓN _CERRADA | |
PRUEBA_APTITUD .APROBADA | TRABAJO_TÉCNICO _APLICACIÓN | N | ENTREVISTA | BUSCAR _REFERENCIAS |
PRUEBA_APTITUD .FALLIDO | TRABAJO_TÉCNICO _APLICACIÓN | N | SOLICITUD _CERRADA | |
ENTREVISTA .APROBADA | TRABAJO_TÉCNICO _APLICACIÓN | N | HACER_OFERTA | BUSCAR _REFERENCIAS |
ENTREVISTA .FALLIDA | TRABAJO_TÉCNICO _APLICACIÓN | N | APLICACIÓN _CERRADA | |
ENTREVISTA .CANDIDATE_CANCELLED | TRABAJO_TÉCNICO _APLICACIÓN | Y | - | - |
ENTREVISTA .NO_SHOW | TRABAJO_TÉCNICO _APLICACIÓN | N | APLICACIÓN _CERRADA | INVITADO_A _ENTREVISTA |
HACER_OFERTA .ACEPTADO | TRABAJO_TÉCNICO _APLICACIÓN | N | BUSCAR _REFERENCIAS | |
HACER_OFERTA .RECHAZADA | TRABAJO_TÉCNICO _APLICACIÓN | N | APLICACIÓN _CERRADA | |
BUSCAR_REFERENCIAS .APROBADO | TRABAJO_TÉCNICO _APLICACIÓN | N | APLICACIÓN _CERRADA.ÉXITO | |
BUSCAR_REFERENCIAS .FALLIDO | TRABAJO_TÉCNICO _APLICACIÓN | N | APLICACIÓN _CERRADA | |
APLICACIÓN_CERRADA .CONTRATADA | TRABAJO_TÉCNICO _APLICACIÓN | N | ||
APLICACIÓN_CERRADA .NO_CONTRATADA | TRABAJO_TÉCNICO _APLICACIÓN | N | INSUFICIENTE _EXPERIENCIA | MÁS _CALIFICADO |
Aquí el contexto es TECHNICAL_JOB_APPLICATION. ¿Porque es esto importante? Porque nos permite anular los resultados. Recuerde, anteriormente dijimos que podemos reutilizar "ensamblajes" y "subensamblajes" en una estructura de lista de materiales (BOM). Esto es útil cuando definimos algo una vez y lo reutilizamos, pero también puede ser demasiado rígido. ¿Y si no queremos reutilizar todo?
Insertando workflow_state_context
entre workflow_state_hierarchy
y workflow_state_option
, podemos reutilizar y anular los resultados. En este modelo, podemos definir si un resultado está habilitado o deshabilitado para diferentes procesos.
En el ejemplo anterior, la combinación INTERVIEW.CANDIDATE_CANCELLED está deshabilitada. En otras palabras, estamos diciendo que simplemente no es un resultado permisible para las solicitudes de empleo técnico. En consecuencia, el entrevistador no podrá seleccionarlo cuando registre el resultado de una entrevista técnica de trabajo porque nuestra consulta solo selecciona opciones donde workflow_state_context.child_disabled = ‘N’
.
Porque workflow_state_option
no es un hijo directo de workflow_state_hierarchy
, tenemos que definir un conjunto separado de opciones cada vez que se usa un estado. Pero esta compensación nos permite ajustar con precisión las opciones para cada proceso.
Resultados de calificación
También tenemos la opción de definir calificadores más detallados para los resultados. Hay dos formas de hacerlo:
- Puede crear un cuarto nivel en su lista de materiales para definir calificadores en los resultados de la jerarquía. La diligencia debida debe tomarse con este enfoque. Por ejemplo, el resultado FAILED se usa para diferentes estados. ¿Quiere tener los mismos calificadores para diferentes estados FALLIDOS? Tal vez no.
- Puedes definir tus calificadores en
workflow_state_type
pero no atarlos a ninguna jerarquía; son independientes. Luego usaworkflow_state_option
para enumerar los calificadores para el contexto de resultado específico. Esto es lo que muestra la configuración anterior, donde los calificadores OVER_QUALIFIED e INSUFFICIENT_EXPERIENCE se enumeran como opciones para el resultado APPLICATION_CLOSED.NOT_HIRED.
En cualquier caso, la aplicación debe reconocer que se ha seleccionado un calificador en lugar de un estado o un resultado:workflow_level_type
indicará esto y actualizará managed_entity_state.wf_state_type_qual_id
con el valor seleccionado.
Algunos datos de configuración de tablas
Es posible que desee ver los datos de configuración subyacentes, tabla por tabla. Aquí tenemos los ids
y las type_keys
se refieren entre paréntesis. En aras de la brevedad, solo se presentan valores relacionados con el artículo.
tipo_nivel_de_flujo_de_trabajo
id | tipo_clave |
---|---|
1 | PROCESO |
2 | ESTADO |
3 | RESULTADO |
4 | CALIFICADOR |
workflow_state_type
id | tipo_clave | workflow_level_type_id |
---|---|---|
1 | APLICACIÓN_DE_TRABAJO_ESTÁNDAR | 1 (PROCESO) |
2 | APLICACIÓN_TÉCNICA | 1 (PROCESO) |
3 | ENTREVISTA | 2 (ESTADO) |
4 | APROBADO | 3 (RESULTADO) |
5 | FALLIDO | 3 (RESULTADO) |
6 | HACER_OFERTA | 2 (ESTADO) |
7 | BUSCAR_REFERENCIAS | 2 (ESTADO) |
8 | APLICACIÓN_CERRADA | 2 (ESTADO) |
9 | CONTRATADO | 3 (RESULTADO) |
10 | NO_CONTRATADO | 3 (RESULTADO) |
11 | EXPERIENCIA_INSUFICIENTE | 4 (CALIFICADOR) |
12 | OVER_QUALIFIED | 4 (CALIFICADOR) |
jerarquía_estado_de_flujo_de_trabajo
id | state_type_parent_id | state_type_child_id |
---|---|---|
1 | 1 (ESTÁNDAR_JOB_APLICACIÓN) | 3 (ENTREVISTA) |
2 | 2 (APLICACIÓN_TRABAJO_TÉCNICO) | 3 (ENTREVISTA) |
3 | 3 (ENTREVISTA) | 4 (APROBADO) |
4 | 3 (ENTREVISTA) | 5 (FALLIDO) |
5 | 1 (APLICACIÓN_TRABAJO_ESTÁNDAR) | 8 (APLICACIÓN_CERRADA) |
6 | 2 (APLICACIÓN_TRABAJO_TÉCNICO) | 8 (APLICACIÓN_CERRADA) |
7 | 8 (APLICACIÓN_CERRADA) | 9 (CONTRATADO) |
8 | 8 (APLICACIÓN_CERRADA) | 10 (NO_CONTRATADO) |
workflow_state_context
id | estado_tipo_id | estado_hierarchy_id | niño_discapacitado |
---|---|---|---|
1 | 1 (ESTANDARD_JOB_ APLICACIÓN) | 3 (ENTREVISTA.APROBADA) | N |
2 | 1 (ESTANDARD_JOB_ APLICACIÓN) | 4 (ENTREVISTA.FALLIDA) | N |
3 | 1 (ESTANDARD_JOB_ APLICACIÓN) | 7 (APLICACIÓN_CERRADA. CONTRATADO) | N |
4 | 1 (ESTANDARD_JOB_ APLICACIÓN) | 5 (APLICACIÓN_CERRADA. NO_CONTRATADA) | N |
5 | 2 (APLICACIÓN_TÉCNICA) | 6 (APLICACIÓN_CERRADA. NO_CONTRATADA) | N |
opción_estado_de_flujo_de_trabajo
id | estado_contexto_id | estado_tipo_id |
---|---|---|
1 | 1 (STANDARD_JOB_ SOLICITUD. ENTREVISTA. APROBADA) | 6 (HACER_OFERTA) |
2 | 1 (STANDARD_JOB_ SOLICITUD. ENTREVISTA. APROBADA) | 7 (BUSCAR_REFERENCIAS) |
3 | 2 (STANDARD_JOB_ SOLICITUD. ENTREVISTA. FALLIDA) | 8 (APLICACIÓN_CERRADA) |
4 | 5 (APLICACIÓN_TRABAJO_TÉCNICO. APLICACIÓN_CERRADA. NO_CONTRATADO) | 11 (EXPERIENCIA_INSUFICIENTE) |
5 | 5 (SOLICITUD DE _TRABAJO_ TÉCNICO. SOLICITUD_CERRADA. NO_CONTRATADO) | 12 (OVER_QUALIFIED) |
Claramente, configurar esto es bastante complicado. Preferiblemente, debe administrarse a través de una aplicación con una interfaz fácil de usar.
Secuencias alternativas
Notará que varias tablas tienen una columna llamada alt_sequence
. Esto se utiliza para ordenar la lista de valores para las diferentes selecciones presentadas al usuario. Por lo general, esto estará en orden descendente según el uso, con las opciones más utilizadas en la parte superior.
Si bien este artículo describió las solicitudes de empleo, el modelo se puede usar para muchos tipos de flujos de trabajo en los que el estado de una entidad debe administrarse a lo largo del tiempo. Alternativamente, el modelo puede servir como patrón para personalizarlo según sus requisitos particulares.