Database
 sql >> Base de données >  >> RDS >> Database

Utilisation des tables de configuration pour définir le flux de travail réel

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 :

  1. 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.
  2. Vous pouvez définir vos qualificateurs dans workflow_state_type mais ne les rattachez à aucune hiérarchie; ils sont autonomes. Vous utilisez alors workflow_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.