La première partie de cette série a présenté quelques étapes de base pour gérer le cycle de vie de toute entité dans une base de données. Notre deuxième et dernière partie vous montrera comment définir le flux de travail réel à l'aide de tables de configuration supplémentaires. C'est là que l'utilisateur se voit présenter les options autorisées à chaque étape du processus. Nous démontrerons également une technique permettant de contourner la réutilisation stricte des "assemblages" et des "sous-assemblages" dans une structure de nomenclature.
Définir les options
La partie 1 a présenté les tableaux de flux de travail de base et comment ceux-ci peuvent facilement être intégrés dans votre base de données. Ce dont nous avons besoin maintenant, c'est de quelque chose qui guide l'utilisateur dans la sélection de l'état logique suivant - quelque chose qui définit un flux de travail logique .
Le schéma ci-dessous définit tous les composants d'un modèle de base de données de workflow :
Deux tables de configuration, workflow_state_option
et workflow_state_context
, ont été ajoutés au modèle. Nous allons commencer par le tableau des options, qui définit les états suivants autorisés . Une fois sa fonction comprise, nous reviendrons au tableau de contexte et expliquerons le rôle qu'il joue.
États suivants autorisés
Les tableaux qui suivent ressemblent un peu à une vue SQL de nos tables de configuration. Ici, nous avons masqué les jointures de table et nous examinons simplement les combinaisons de type_keys
. Considérons donc chaque STATE.OUTCOME combinaison et définissez les options disponible pour l'utilisateur :
Combinaison STATE.OUTCOME (de la hiérarchie des états) | Contexte de l'état | Enfant handicapé | Option 1 | Option 2 |
---|---|---|---|---|
APPLICATION_RECEIVED .ACCEPTED | STANDARD_JOB _APPLICATION | N | APPLICATION_REVIEW | |
APPLICATION_RECEIVED .REJECTED | STANDARD_JOB _APPLICATION | N | APPLICATION_CLOSED .NOT_HIRED | |
APPLICATION_REVIEW .RÉUSSI | STANDARD_JOB _APPLICATION | N | INVITED_TO_INTERVIEW | |
APPLICATION_REVIEW .ÉCHEC | STANDARD_JOB _APPLICATION | N | APPLICATION_CLOSED .NOT_HIRED | |
INVITED_TO_INTERVIEW .ACCEPTÉ | STANDARD_JOB _APPLICATION | N | ENTRETIEN | |
INVITED_TO_INTERVIEW .REFUSE | STANDARD_JOB _APPLICATION | N | APPLICATION_CLOSED .NOT_HIRED | |
ENTRETIEN .RÉUSSI | STANDARD_JOB _APPLICATION | N | FAIRE_OFFRE | SEEK_REFERENCES |
ENTRETIEN.ÉCHEC | STANDARD_JOB _APPLICATION | N | APPLICATION_CLOSED | |
ENTRETIEN .CANDIDATE_ANNULÉ | STANDARD_JOB _APPLICATION | N | APPLICATION_CLOSED | INVITED_TO_INTERVIEW |
INTERVIEW .NO_SHOW | STANDARD_JOB _APPLICATION | N | APPLICATION_CLOSED | |
MAKE_OFFER.ACCEPTED | STANDARD_JOB _APPLICATION | N | SEEK_REFERENCES | |
MAKE_OFFER.DECLINED | STANDARD_JOB _APPLICATION | N | APPLICATION_CLOSED | |
SEEK_REFERENCES .PASSED | STANDARD_JOB _APPLICATION | N | APPLICATION_CLOSED .HIRED | |
SEEK_REFERENCES .ÉCHEC | STANDARD_JOB _APPLICATION | N | APPLICATION_CLOSED | |
APPLICATION_CLOSED .HIRED | STANDARD_JOB _APPLICATION | N | ||
APPLICATION_CLOSED .NOT_HIRED | STANDARD_JOB _APPLICATION | N |
Parce que nous ignorons le contexte pour l'instant, State Context et Enfant handicapé ? sont grisés. J'ai également limité le nombre d'options dans cet exemple à deux par souci de brièveté, bien qu'en pratique il n'y ait pas de limite.
Alors, comment ça marche ?
Imaginez que l'interview vient d'être menée et que l'intervieweur enregistre le résultat. La table sous-jacente mise à jour est managed_entity_state
. Il y a deux résultats logiques :RÉUSSI et ÉCHEC. Ainsi, le managed_entity_state
actuel est mis à jour avec le résultat sélectionné (wf_state_type_outcome_id
). Dans l'exemple de modèle, l'intervieweur peut également inclure des notes sur l'entretien.
Si l'intervieweur sélectionne PASSED, deux options supplémentaires lui sont présentées :MAKE_OFFER et SEEK_REFERENCES. Ce sont les prochains états dans notre flux de travail. Ils sont similaires à go to
déclarations en programmation. Pour l'une ou l'autre option, une nouvelle ligne est insérée dans managed_entity_state
, déplaçant la candidature à l'état suivant du processus de workflow. L'utilisateur peut définir une date limite pour cela en saisissant une due_date
.
D'autre part, si l'intervieweur sélectionne ÉCHEC, il n'y a qu'une seule option :APPLICATION_CLOSED. Donc un nouveau managed_entity_state
la ligne est insérée à l'aide de l'état APPLICATION_CLOSED (wf_state_type_state_id
).
Vous verrez qu'il n'y a pas d'options disponibles pour l'état APPLICATION_CLOSED. Cela signifie que la fin du processus de workflow a été atteinte.
Le tableau de contexte
Examinons la configuration du processus de candidature technique pour voir quel rôle la table de contexte joue :
Combinaison STATE.OUTCOME (de la hiérarchie des états) | Contexte de l'état | Enfant handicapé | Option 1 | Option 2 |
---|---|---|---|---|
APPLICATION_RECEIVED .ACCEPTED | TECHNICAL_JOB _APPLICATION | N | CANDIDATURE _REVIEW | |
APPLICATION_RECEIVED .REJECTED | TECHNICAL_JOB _APPLICATION | N | CANDIDATURE _FERMÉE | |
APPLICATION_REVIEW .RÉUSSI | TECHNICAL_JOB _APPLICATION | N | INVITED_TO _INTERVIEW | |
APPLICATION_REVIEW .ÉCHEC | TECHNICAL_JOB _APPLICATION | N | CANDIDATURE _FERMÉE | |
INVITED_TO_INTERVIEW .ACCEPTÉ | TECHNICAL_JOB _APPLICATION | N | TEST_APTITUDE | |
INVITED_TO_INTERVIEW .REFUSE | TECHNICAL_JOB _APPLICATION | N | CANDIDATURE _FERMÉE | |
TEST_APTITUDE .RÉUSSI | TECHNICAL_JOB _APPLICATION | N | ENTRETIEN | RECHERCHE _REFERENCES |
TEST_APTITUDE .ÉCHEC | TECHNICAL_JOB _APPLICATION | N | CANDIDATURE _FERMÉE | |
ENTRETIEN .RÉUSSI | TECHNICAL_JOB _APPLICATION | N | FAIRE_OFFRE | RECHERCHE _REFERENCES |
ENTRETIEN .ÉCHOUÉ | TECHNICAL_JOB _APPLICATION | N | CANDIDATURE _FERMÉE | |
ENTRETIEN .CANDIDATE_ANNULÉ | TECHNICAL_JOB _APPLICATION | O | - | - |
INTERVIEW .NO_SHOW | TECHNICAL_JOB _APPLICATION | N | CANDIDATURE _FERMÉE | INVITED_TO _INTERVIEW |
FAIRE_OFFRE .ACCEPTÉE | TECHNICAL_JOB _APPLICATION | N | RECHERCHE _REFERENCES | |
FAIRE_OFFRE .REFUSE | TECHNICAL_JOB _APPLICATION | N | CANDIDATURE _FERMÉE | |
SEEK_REFERENCES .PASSED | TECHNICAL_JOB _APPLICATION | N | CANDIDATURE _CLOSED.SUCCESS | |
SEEK_REFERENCES .ÉCHEC | TECHNICAL_JOB _APPLICATION | N | CANDIDATURE _FERMÉE | |
APPLICATION_CLOSED .HIRED | TECHNICAL_JOB _APPLICATION | N | ||
APPLICATION_CLOSED .NOT_HIRED | TECHNICAL_JOB _APPLICATION | N | INSUFFISANT _EXPERIENCE | PLUS _QUALIFIÉ |
Ici, le contexte est TECHNICAL_JOB_APPLICATION. Pourquoi est-ce important? Parce que cela nous permet de passer outre les résultats. N'oubliez pas que nous avons précédemment déclaré que nous pouvions réutiliser des « assemblages » et des « sous-assemblages » dans une structure de nomenclature (BOM). Ceci est utile lorsque nous définissons quelque chose une fois et que nous le réutilisons, mais cela peut aussi être trop rigide. Et si nous ne voulions pas tout réutiliser ?
En insérant workflow_state_context
entre workflow_state_hierarchy
et workflow_state_option
, nous pouvons à la fois réutiliser et remplacer les résultats. Dans ce modèle, nous pouvons définir si un résultat est activé ou désactivé pour différents processus.
Dans l'exemple ci-dessus, la combinaison INTERVIEW.CANDIDATE_CANCELLED est désactivée. En d'autres termes, nous disons que ce n'est tout simplement pas un résultat acceptable pour les candidatures à un emploi technique. Par conséquent, l'intervieweur ne pourra pas le sélectionner lors de l'enregistrement du résultat d'un entretien d'embauche technique car notre requête ne sélectionne que les options où workflow_state_context.child_disabled = ‘N’
.
Parce que workflow_state_option
n'est pas un enfant direct de workflow_state_hierarchy
, nous devons définir un ensemble d'options distinct chaque fois qu'un état est utilisé. Mais ce compromis nous permet d'affiner les options pour chaque processus.
Résultats de qualification
Nous avons également la possibilité de définir des qualificatifs plus détaillés pour les résultats. Il existe deux manières de procéder :
- Vous pouvez créer un quatrième niveau dans votre nomenclature pour définir des qualificateurs sous les résultats dans la hiérarchie. Une diligence raisonnable doit être prise avec cette approche. Par exemple, le résultat FAILED est utilisé pour différents états. Voulez-vous avoir les mêmes qualificatifs pour différents états FAILED ? Peut-être pas.
- Vous pouvez définir vos qualificateurs dans
workflow_state_type
mais ne les rattachez à aucune hiérarchie; ils sont autonomes. Vous utilisez alorsworkflow_state_option
pour répertorier les qualificatifs pour le contexte de résultat spécifique. C'est ce que montre la configuration ci-dessus, où les qualificatifs OVER_QUALIFIED et INSUFFICIENT_EXPERIENCE sont répertoriés en tant qu'options pour le résultat APPLICATION_CLOSED.NOT_HIRED.
Dans les deux cas, l'application doit reconnaître qu'un qualificateur a été sélectionné plutôt qu'un état ou un résultat – workflow_level_type
l'indiquera - et mettra à jour managed_entity_state.wf_state_type_qual_id
avec la valeur sélectionnée.
Quelques données de configuration de table
Vous aimeriez peut-être voir les données de configuration sous-jacentes, table par table. Ici nous avons les ids
et les type_keys
ils se réfèrent entre parenthèses. Par souci de concision, seules les valeurs liées à l'article sont présentées.
workflow_level_type
identifiant | type_key |
---|---|
1 | PROCESSUS |
2 | ÉTAT |
3 | RÉSULTAT |
4 | QUALIFICATEUR |
workflow_state_type
identifiant | type_key | workflow_level_type_id |
---|---|---|
1 | STANDARD_JOB_APPLICATION | 1 (PROCESSUS) |
2 | APPLICATION_TECHNIQUE | 1 (PROCESSUS) |
3 | ENTRETIEN | 2 (ÉTAT) |
4 | RÉUSSI | 3 (RÉSULTAT) |
5 | ÉCHEC | 3 (RÉSULTAT) |
6 | MAKE_OFFER | 2 (ÉTAT) |
7 | SEEK_REFERENCES | 2 (ÉTAT) |
8 | APPLICATION_CLOSED | 2 (ÉTAT) |
9 | EMBAUCHÉ | 3 (RÉSULTAT) |
10 | NOT_HIRED | 3 (RÉSULTAT) |
11 | EXPÉRIENCE_INSUFFISANTE | 4 (QUALIFICATEUR) |
12 | OVER_QUALIFIED | 4 (QUALIFICATEUR) |
workflow_state_hierarchy
identifiant | state_type_parent_id | state_type_child_id |
---|---|---|
1 | 1 (STANDARD_JOB_APPLICATION) | 3 (ENTRETIEN) |
2 | 2 (TECHNICAL_JOB_APPLICATION) | 3 (ENTRETIEN) |
3 | 3 (ENTRETIEN) | 4 (RÉUSSI) |
4 | 3 (ENTRETIEN) | 5 (ÉCHEC) |
5 | 1 (STANDARD_JOB_APPLICATION) | 8 (APPLICATION_CLOSED) |
6 | 2 (TECHNICAL_JOB_APPLICATION) | 8 (APPLICATION_CLOSED) |
7 | 8 (APPLICATION_CLOSED) | 9 (EMBAUCHE) |
8 | 8 (APPLICATION_CLOSED) | 10 (NOT_HIRED) |
workflow_state_context
identifiant | state_type_id | state_hierarchy_id | child_disabled |
---|---|---|---|
1 | 1 (STANDARD_JOB_APPLICATION) | 3 (ENTRETIEN.PASSÉ) | N |
2 | 1 (STANDARD_JOB_APPLICATION) | 4 (ENTRETIEN.ÉCHEC) | N |
3 | 1 (STANDARD_JOB_APPLICATION) | 7 (APPLICATION_CLOSED. EMBAUCHE) | N |
4 | 1 (STANDARD_JOB_APPLICATION) | 5 (APPLICATION_CLOSED. NOT_HIRED) | N |
5 | 2 (APPLICATION_TECHNIQUE) | 6 (APPLICATION_CLOSED. NOT_HIRED) | N |
workflow_state_option
identifiant | state_context_id | state_type_id |
---|---|---|
1 | 1 (STANDARD_JOB_ APPLICATION. ENTRETIEN. RÉUSSI) | 6 (MAKE_OFFER) |
2 | 1 (STANDARD_JOB_ APPLICATION. ENTRETIEN. RÉUSSI) | 7 (SEEK_REFERENCES) |
3 | 2 (STANDARD_JOB_ APPLICATION. ENTRETIEN. ÉCHEC) | 8 (APPLICATION_CLOSED) |
4 | 5 (TECHNICAL_JOB_APPLICATION. APPLICATION_CLOSED. NOT_HIRED) | 11 (INSUFFICIENT_EXPERIENCE) |
5 | 5 (APPLICATION TECHNIQUE _JOB_. APPLICATION_CLOSED. NOT_HIRED) | 12 (SUR_QUALIFIÉ) |
De toute évidence, la mise en place est assez délicate. Il doit être administré de préférence via une application avec une interface conviviale.
Séquences alternatives
Vous remarquerez qu'un certain nombre de tables ont une colonne appelée alt_sequence
. Il permet d'ordonner la liste des valeurs des différentes sélections présentées à l'utilisateur. En règle générale, ce sera par ordre décroissant en fonction de l'utilisation, avec les options les plus fréquemment utilisées en haut.
Bien que cet article décrive les candidatures, le modèle peut être utilisé pour de nombreux types de flux de travail où l'état d'une entité doit être géré au fil du temps. Alternativement, le modèle peut servir de modèle à personnaliser selon vos propres besoins particuliers.