Den første del af denne serie introducerede nogle grundlæggende trin til styring af livscyklussen for enhver enhed i en database. Vores anden og sidste del vil vise dig, hvordan du definerer den faktiske arbejdsgang ved hjælp af yderligere konfigurationstabeller. Det er her, brugeren præsenteres for tilladte muligheder hvert trin på vejen. Vi vil også demonstrere en teknik til at omgå den strenge genbrug af "samlinger" og "undersamlinger" i en styklistestruktur.
Definition af muligheder
Del 1 introducerede kernearbejdsgangstabellerne, og hvordan disse nemt kan inkorporeres i din database. Det, vi har brug for nu, er noget til at guide brugeren til at vælge den næste logiske tilstand – noget, der definerer en logisk arbejdsgang .
Diagrammet nedenfor definerer alle komponenterne i en workflow-databasemodel:
To konfigurationstabeller, workflow_state_option
og workflow_state_context
, er blevet tilføjet til modellen. Vi starter med indstillingstabellen, som definerer de tilladelige næste tilstande . Når dens funktion er forstået, vender vi tilbage til konteksttabellen og forklarer den rolle, den spiller.
Tilladte næste stater
Tabellerne, der følger, ligner lidt en SQL-visning på tværs af vores konfigurationstabeller. Her har vi skjult tabelsammenføjningerne, og vi ser bare på kombinationerne af type_keys
. Så lad os overveje hvert STATE.OUTCOME kombination og definer indstillingerne tilgængelig for brugeren:
STATE.OUTCOME-kombination (fra statshierarki) | Statskontekst | Barn deaktiveret | Mulighed 1 | Mulighed 2 |
---|---|---|---|---|
APPLICATION_RECEIVED .ACCEPTERET | STANDARD_JOB _APPLICATION | N | APPLICATION_REVIEW | |
APPLICATION_RECEIVED .REJECTED | STANDARD_JOB _APPLICATION | N | APPLICATION_CLOSED .NOT_HIRED | |
APPLICATION_REVIEW .BESTÅET | STANDARD_JOB _APPLICATION | N | INVITED_TO_INTERVIEW | |
APPLICATION_REVIEW .FAILED | STANDARD_JOB _APPLICATION | N | APPLICATION_CLOSED .NOT_HIRED | |
INVITED_TO_INTERVIEW .ACCEPTERET | STANDARD_JOB _APPLICATION | N | INTERVIEW | |
INVITED_TO_INTERVIEW .AFVISET | STANDARD_JOB _APPLICATION | N | APPLICATION_CLOSED .NOT_HIRED | |
INTERVIEW .Bestået | STANDARD_JOB _APPLICATION | N | MAKE_OFFER | SEEK_REFERENCES |
INTERVIEW.FAILED | STANDARD_JOB _APPLICATION | N | APPLICATION_CLOSED | |
INTERVIEW .CANDIDATE_CANCELLED | 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 .FAILED | STANDARD_JOB _APPLICATION | N | APPLICATION_CLOSED | |
APPLICATION_CLOSED .UDLEJET | STANDARD_JOB _APPLICATION | N | ||
APPLICATION_CLOSED .NOT_HIRED | STANDARD_JOB _APPLICATION | N |
Fordi vi ignorerer kontekst for nu, Statskontekst og Børn deaktiveret? er nedtonede. Jeg har også begrænset antallet af muligheder i dette eksempel til to for korthedens skyld, selvom der i praksis ikke er nogen grænse.
Så hvordan virker dette?
Forestil dig, at interviewet netop er blevet gennemført, og at intervieweren optager resultatet. Den underliggende tabel, der opdateres, er managed_entity_state
. Der er to logiske udfald:BESTÅET og IKKE. Så den nuværende managed_entity_state
er opdateret med det valgte resultat (wf_state_type_outcome_id
). I eksempelmodellen kan intervieweren også inkludere nogle noter om interviewet.
Hvis intervieweren vælger PASSED, præsenteres de for yderligere to muligheder:MAKE_OFFER og SEEK_REFERENCES. Dette er de næste stater i vores arbejdsgang. De ligner go to
udsagn i programmering. For begge muligheder indsættes en ny række i managed_entity_state
, flytte jobansøgningen til den næste tilstand i workflow-processen. Brugeren kan sætte en deadline for dette ved at indtaste en due_date
.
På den anden side, hvis intervieweren vælger FAILED, er der kun én mulighed:APPLICATION_CLOSED. Så en ny managed_entity_state
række er indsat ved hjælp af APPLICATION_CLOSED-tilstanden (wf_state_type_state_id
).
Du vil se, at der ikke er nogen tilgængelige muligheder for tilstanden APPLICATION_CLOSED. Dette betyder, at slutningen af workflow-processen er nået.
Konteksttabellen
Lad os se på konfigurationen for den tekniske jobansøgningsproces for at se, hvilken rolle konteksttabellen spiller:
STATE.OUTCOME-kombination (fra statshierarki) | Statskontekst | Barn deaktiveret | Mulighed 1 | Mulighed 2 |
---|---|---|---|---|
APPLICATION_RECEIVED .ACCEPTERET | TECHNICAL_JOB _APPLICATION | N | APPLIKATION _REVIEW | |
APPLICATION_RECEIVED .REJECTED | TECHNICAL_JOB _APPLICATION | N | APPLIKATION _CLOSED | |
APPLICATION_REVIEW .BESTÅET | TECHNICAL_JOB _APPLICATION | N | INVITERET_TIL _INTERVIEW | |
APPLICATION_REVIEW .FAILED | TECHNICAL_JOB _APPLICATION | N | APPLIKATION _CLOSED | |
INVITED_TO_INTERVIEW .ACCEPTERET | TECHNICAL_JOB _APPLICATION | N | TEST_APTITUDE | |
INVITED_TO_INTERVIEW .AFVISET | TECHNICAL_JOB _APPLICATION | N | APPLIKATION _CLOSED | |
TEST_APTITUDE .PASSED | TECHNICAL_JOB _APPLICATION | N | INTERVIEW | SØG _REFERENCER |
TEST_APTITUDE .FAILED | TECHNICAL_JOB _APPLICATION | N | APPLIKATION _CLOSED | |
INTERVIEW . BESTAET | TECHNICAL_JOB _APPLICATION | N | MAKE_OFFER | SØG _REFERENCER |
INTERVIEW . MISLYKKES | TECHNICAL_JOB _APPLICATION | N | APPLIKATION _CLOSED | |
INTERVIEW .CANDIDATE_CANCELLED | TECHNICAL_JOB _APPLICATION | Y | - | - |
INTERVIEW .NO_SHOW | TECHNICAL_JOB _APPLICATION | N | APPLIKATION _CLOSED | INVITERET_TIL _INTERVIEW |
MAKE_OFFER .ACCEPTERET | TECHNICAL_JOB _APPLICATION | N | SØG _REFERENCER | |
MAKE_OFFER .AFSLAG | TECHNICAL_JOB _APPLICATION | N | APPLIKATION _CLOSED | |
SEEK_REFERENCES .PASSED | TECHNICAL_JOB _APPLICATION | N | APPLIKATION _CLOSED.SUCCESS | |
SEEK_REFERENCES .FAILED | TECHNICAL_JOB _APPLICATION | N | APPLIKATION _CLOSED | |
APPLICATION_CLOSED .UDLEJET | TECHNICAL_JOB _APPLICATION | N | ||
APPLICATION_CLOSED .NOT_HIRED | TECHNICAL_JOB _APPLICATION | N | UTSTRÆKKELIG _ERFARING | OVER _QUALIFIED |
Her er konteksten TECHNICAL_JOB_APPLICATION. Hvorfor er dette vigtigt? Fordi det giver os mulighed for at tilsidesætte resultater. Husk, at vi tidligere har udtalt, at vi kan genbruge 'samlinger' og 'undersamlinger' i en styklistestruktur (Bom of Materials). Dette er nyttigt, når vi definerer noget én gang og genbruger det, men det kan også være for stift. Hvad hvis vi ikke vil genbruge alt?
Ved at indsætte workflow_state_context
mellem workflow_state_hierarchy
og workflow_state_option
, kan vi både genbruge og tilsidesætte resultater. I denne model kan vi definere, om et resultat er aktiveret eller deaktiveret for forskellige processer.
I ovenstående eksempel er kombinationen INTERVIEW.CANDIDATE_CANCELLED deaktiveret. Med andre ord siger vi, at det simpelthen ikke er et tilladt resultat for tekniske jobansøgninger. Som følge heraf vil intervieweren ikke være i stand til at vælge det, når han optager resultatet af en teknisk jobsamtale, fordi vores forespørgsel kun vælger muligheder, hvor workflow_state_context.child_disabled = ‘N’
.
Fordi workflow_state_option
er ikke et direkte underordnet workflow_state_hierarchy
, er vi nødt til at definere et separat sæt af muligheder, hver gang en tilstand bruges. Men denne afvejning giver os mulighed for at finjustere mulighederne for hver proces.
Kvalificerende resultater
Vi har også mulighed for at definere mere detaljerede kvalifikationer for resultater. Der er to måder at gøre dette på:
- Du kan oprette et fjerde niveau i din stykliste for at definere kvalifikationer under resultater i hierarkiet. Due diligence bør tages med denne tilgang. For eksempel bruges FAILED-resultatet til forskellige tilstande. Vil du have de samme kvalifikationer for forskellige FAILED-tilstande? Måske ikke.
- Du kan definere dine kvalifikationer i
workflow_state_type
men ikke binde dem til noget hierarki; de er fritstående. Du bruger derefterworkflow_state_option
at liste kvalifikationerne for den specifikke resultatkontekst. Dette er, hvad ovenstående konfiguration viser, hvor OVER_QUALIFIED- og INSUFFICIENT_EXPERIENCE-kvalifikationerne er angivet som muligheder for APPLICATION_CLOSED.NOT_HIRED-resultatet.
I begge tilfælde skal applikationen genkende, at der er valgt en kvalifikation i stedet for en tilstand eller et resultat – workflow_level_type
vil indikere dette – og opdatere managed_entity_state.wf_state_type_qual_id
med den valgte værdi.
Nogle tabelkonfigurationsdata
Du vil måske gerne se de underliggende konfigurationsdata, tabel for tabel. Her har vi ids
og type_keys
de henviser til i parentes. For kortheds skyld præsenteres kun værdier relateret til artiklen.
workflow_level_type
id | type_key |
---|---|
1 | BEHANDLING |
2 | STAT |
3 | RESULTAT |
4 | QUALIFIER |
workflow_state_type
id | type_key | workflow_level_type_id |
---|---|---|
1 | STANDARD_JOB_APPLICATION | 1 (BEHANDLING) |
2 | TECHNICAL_APPLICATION | 1 (BEHANDLING) |
3 | INTERVIEW | 2 (STATE) |
4 | Bestået | 3 (RESULTAT) |
5 | FEJLDE | 3 (RESULTAT) |
6 | MAKE_OFFER | 2 (STATE) |
7 | SEEK_REFERENCES | 2 (STATE) |
8 | APPLICATION_CLOSED | 2 (STATE) |
9 | LEJET | 3 (RESULTAT) |
10 | IKKE_LEJET | 3 (RESULTAT) |
11 | UTRUSTIGT_ERFARING | 4 (QUALIFIER) |
12 | OVER_QUALIFIED | 4 (QUALIFIER) |
workflow_state_hierarchy
id | state_type_parent_id | state_type_child_id |
---|---|---|
1 | 1 (STANDARD_JOB_APPLICATION) | 3 (INTERVIEW) |
2 | 2 (TECHNICAL_JOB_APPLICATION) | 3 (INTERVIEW) |
3 | 3 (INTERVIEW) | 4 (Bestået) |
4 | 3 (INTERVIEW) | 5 (FEJLDE) |
5 | 1 (STANDARD_JOB_APPLICATION) | 8 (APPLICATION_CLOSED) |
6 | 2 (TECHNICAL_JOB_APPLICATION) | 8 (APPLICATION_CLOSED) |
7 | 8 (APPLICATION_CLOSED) | 9 (LEJET) |
8 | 8 (APPLICATION_CLOSED) | 10 (NOT_HIRED) |
workflow_state_context
id | state_type_id | state_hierarchy_id | barn_deaktiveret |
---|---|---|---|
1 | 1 (STANDARD_JOB_ APPLICATION) | 3 (INTERVIEW.Bestået) | N |
2 | 1 (STANDARD_JOB_ APPLICATION) | 4 (INTERVIEW.FAILED) | N |
3 | 1 (STANDARD_JOB_ APPLICATION) | 7 (APPLICATION_CLOSED. LEJET) | N |
4 | 1 (STANDARD_JOB_ APPLICATION) | 5 (APPLICATION_CLOSED. NOT_HIRED) | N |
5 | 2 (TECHNICAL_APPLICATION) | 6 (APPLICATION_CLOSED. NOT_HIRED) | N |
workflow_state_option
id | state_kontekst_id | state_type_id |
---|---|---|
1 | 1 (STANDARD_JOB_ APPLICATION. INTERVIEW. BESTÅET) | 6 (MAKE_OFFER) |
2 | 1 (STANDARD_JOB_ APPLICATION. INTERVIEW. BESTÅET) | 7 (SEEK_REFERENCES) |
3 | 2 (STANDARD_JOB_ APPLICATION. INTERVIEW. FEJLLET) | 8 (APPLICATION_CLOSED) |
4 | 5 (TECHNICAL_JOB_ APPLICATION. APPLICATION_CLOSED. NOT_HIRED) | 11 (INSUFFICIENT_EXPERIENCE) |
5 | 5 (TEKNISK _JOB_ APPLICATION. APPLICATION_CLOSED. NOT_HIRED) | 12 (OVER_QUALIFIED) |
Det er klart, at det er ret vanskeligt at sætte dette op. Det skal helst administreres via en applikation med en brugervenlig grænseflade.
Alternative sekvenser
Du vil bemærke, at en række tabeller har en kolonne kaldet alt_sequence
. Dette bruges til at bestille listen over værdier for de forskellige valg, der præsenteres for brugeren. Dette vil typisk være i faldende rækkefølge baseret på brug, med de mest brugte muligheder øverst.
Mens denne artikel beskrev jobansøgninger, kan modellen bruges til mange typer arbejdsgange, hvor en enheds tilstand skal styres over tid. Alternativt kan modellen fungere som et mønster til at tilpasse til dine egne særlige krav.