První díl této série představil některé základní kroky pro správu životního cyklu libovolné entity v databázi. Naše druhá a poslední část vám ukáže, jak definovat skutečný pracovní postup pomocí dalších konfiguračních tabulek. Toto je místo, kde se uživateli na každém kroku zobrazí přípustné možnosti. Také si ukážeme techniku, jak obejít striktní opětovné použití „sestav“ a „podsestav“ ve struktuře kusovníku.
Definování možností
Část 1 představila základní tabulky pracovních postupů a to, jak je lze snadno začlenit do vaší databáze. Nyní potřebujeme něco, co uživatele povede k výběru dalšího logického stavu – něco, co definuje logický pracovní postup .
Níže uvedený diagram definuje všechny součásti databázového modelu pracovního postupu:
Dvě konfigurační tabulky, workflow_state_option
a workflow_state_context
, byly přidány do modelu. Začneme tabulkou možností, která definuje další povolené stavy . Jakmile pochopíme jeho funkci, vrátíme se ke kontextové tabulce a vysvětlíme, jakou roli hraje.
Povolené další stavy
Následující tabulky jsou trochu jako pohled SQL napříč našimi konfiguračními tabulkami. Zde jsme skryli spojení tabulek a právě se díváme na kombinace type_keys
. Podívejme se tedy na každý STATE.OUTCOME kombinaci a definujte možnosti k dispozici uživateli:
Kombinace STATE.OUTCOME (ze státní hierarchie) | Kontext státu | Dítě s postižením | Možnost 1 | Možnost 2 |
---|---|---|---|---|
APPLICATION_RECEIVED .ACCEPTED | STANDARD_JOB _APPLICATION | N | APLIKACE_REVIEW | |
APPLICATION_RECEIVED .REJECTED | STANDARD_JOB _APPLICATION | N | APPLICATION_UZAVŘENA .NOT_HIRED | |
PŘEHLED_APLIKACE .PASSED | STANDARD_JOB _APPLICATION | N | INVITED_TO_INTERVIEW | |
PŘEHLED_APLIKACE .FAILED | STANDARD_JOB _APPLICATION | N | APPLICATION_UZAVŘENA .NOT_HIRED | |
INVITED_TO_INTERVIEW .ACCEPTED | STANDARD_JOB _APPLICATION | N | ROZHOVOR | |
INVITED_TO_INTERVIEW .DECLINED | STANDARD_JOB _APPLICATION | N | APPLICATION_UZAVŘENA .NOT_HIRED | |
ROZHOVOR . ÚSPĚŠNĚ | STANDARD_JOB _APPLICATION | N | MAKE_OFFER | SEEK_REFERENCES |
INTERVIEW.FAILED | STANDARD_JOB _APPLICATION | N | APPLICATION_CLOSED | |
ROZHOVOR .CANDIDATE_CANCELLED | STANDARD_JOB _APPLICATION | N | APPLICATION_UZAVŘENA | INVITED_TO_INTERVIEW |
ROZHOVOR .NO_SHOW | STANDARD_JOB _APPLICATION | N | APPLICATION_UZAVŘENA | |
MAKE_OFFER.ACCEPTED | STANDARD_JOB _APPLICATION | N | SEEK_REFERENCES | |
MAKE_OFFER.DECLINED | STANDARD_JOB _APPLICATION | N | APPLICATION_UZAVŘENA | |
SEEK_REFERENCES .PASSED | STANDARD_JOB _APPLICATION | N | APPLICATION_UZAVŘENA .NAJATO | |
SEEK_REFERENCES .FAILED | STANDARD_JOB _APPLICATION | N | APPLICATION_UZAVŘENA | |
APPLICATION_UZAVŘENA .HIRED | STANDARD_JOB _APPLICATION | N | ||
APPLICATION_UZAVŘENA .NOT_HIRED | STANDARD_JOB _APPLICATION | N |
Protože kontext prozatím ignorujeme, State Context a Dítě se zdravotním postižením? jsou zašedlé. Kvůli stručnosti jsem také omezil počet možností v tomto příkladu na dvě, i když v praxi neexistuje žádné omezení.
Jak to tedy funguje?
Představte si, že rozhovor právě proběhl a tazatel zaznamenává výsledek. Aktualizovaná podkladová tabulka je managed_entity_state
. Existují dva logické výsledky:PASSED a FAILED. Tedy aktuální managed_entity_state
se aktualizuje o vybraný výsledek (wf_state_type_outcome_id
). Ve vzorovém modelu může tazatel také zahrnout několik poznámek k rozhovoru.
Pokud tazatel vybere PASSED, zobrazí se mu další dvě možnosti:MAKE_OFFER a SEEK_REFERENCES. Toto jsou další stavy v našem pracovním postupu. Jsou podobné jako go to
příkazy v programování. Pro obě možnosti se do managed_entity_state
vloží nový řádek , přesunutí aplikace úlohy do dalšího stavu v procesu workflow. Uživatel může nastavit konečný termín zadáním due_date
.
Na druhou stranu, pokud tazatel vybere FAILED, existuje pouze jedna možnost:APPLICATION_CLOSED. Takže nový managed_entity_state
řádek je vložen pomocí stavu APPLICATION_CLOSED (wf_state_type_state_id
).
Uvidíte, že pro stav APPLICATION_CLOSED nejsou k dispozici žádné možnosti. To znamená, že bylo dosaženo konce pracovního postupu.
Kontextová tabulka
Podívejme se na konfiguraci pro proces technické žádosti o zaměstnání, abychom viděli, jakou roli hraje kontextová tabulka hraje:
Kombinace STATE.OUTCOME (ze státní hierarchie) | Kontext státu | Dítě s postižením | Možnost 1 | Možnost 2 |
---|---|---|---|---|
APPLICATION_RECEIVED .ACCEPTED | TECHNICAL_JOB _APPLICATION | N | APLIKACE _RECENZE | |
APPLICATION_RECEIVED .REJECTED | TECHNICAL_JOB _APPLICATION | N | APLIKACE _UZAVŘENA | |
PŘEHLED_APLIKACE .PASSED | TECHNICAL_JOB _APPLICATION | N | INVITED_TO _INTERVIEW | |
PŘEHLED_APLIKACE .FAILED | TECHNICAL_JOB _APPLICATION | N | APLIKACE _UZAVŘENA | |
INVITED_TO_INTERVIEW .ACCEPTED | TECHNICAL_JOB _APPLICATION | N | TEST_APTITUDE | |
INVITED_TO_INTERVIEW .DECLINED | TECHNICAL_JOB _APPLICATION | N | APLIKACE _UZAVŘENA | |
TEST_APTITUDE .PASSED | TECHNICAL_JOB _APPLICATION | N | ROZHOVOR | HLEDAT _REFERENCE |
TEST_APTITUDE .FAILED | TECHNICAL_JOB _APPLICATION | N | APLIKACE _UZAVŘENA | |
ROZHOVOR .PASSED | TECHNICAL_JOB _APPLICATION | N | MAKE_OFFER | HLEDAT _REFERENCE |
ROZHOVOR .FAILED | TECHNICAL_JOB _APPLICATION | N | APLIKACE _UZAVŘENA | |
ROZHOVOR .CANDIDATE_CANCELLED | TECHNICAL_JOB _APPLICATION | Y | - | - |
ROZHOVOR .NO_SHOW | TECHNICAL_JOB _APPLICATION | N | APLIKACE _UZAVŘENA | INVITED_TO _INTERVIEW |
MAKE_NABÍDKA .PŘIJÍMÁNO | TECHNICAL_JOB _APPLICATION | N | HLEDAT _REFERENCE | |
MAKE_OFFER .DECLINED | TECHNICAL_JOB _APPLICATION | N | APLIKACE _UZAVŘENA | |
SEEK_REFERENCES .PASSED | TECHNICAL_JOB _APPLICATION | N | APLIKACE _UZAVŘENA. ÚSPĚCH | |
SEEK_REFERENCES .FAILED | TECHNICAL_JOB _APPLICATION | N | APLIKACE _UZAVŘENA | |
APPLICATION_UZAVŘENA .HIRED | TECHNICAL_JOB _APPLICATION | N | ||
APPLICATION_UZAVŘENA .NOT_HIRED | TECHNICAL_JOB _APPLICATION | N | NEDOSTATEČNÉ _ZKUŠENOSTI | NAD _KVALIFIKACE |
Zde je kontext TECHNICAL_JOB_APPLICATION. Proč je toto důležité? Protože nám to umožňuje přepsat výsledky. Pamatujte, že jsme již dříve uvedli, že můžeme znovu použít „sestavy“ a „podsestavy“ ve struktuře kusovníku (BOM). To je užitečné, když něco definujeme jednou a znovu to použijeme, ale také to může být příliš rigidní. Co když nechceme všechno znovu použít?
Vložením workflow_state_context
mezi workflow_state_hierarchy
a workflow_state_option
, můžeme výsledky znovu použít i přepsat. V tomto modelu můžeme definovat, zda je výsledek povolen nebo zakázán pro různé procesy.
Ve výše uvedeném příkladu je kombinace INTERVIEW.CANDIDATE_CANCELLED zakázána. Jinými slovy, říkáme, že to prostě není přípustný výsledek pro technické žádosti o zaměstnání. V důsledku toho jej tazatel nebude moci vybrat při zaznamenávání výsledku technického pohovoru, protože náš dotaz vybere pouze možnosti, kde workflow_state_context.child_disabled = ‘N’
.
Protože workflow_state_option
není přímým potomkem workflow_state_hierarchy
, musíme při každém použití stavu definovat samostatnou sadu možností. Ale tento kompromis nám umožňuje jemně vyladit možnosti pro každý proces.
Kvalifikační výsledky
Máme také možnost definovat podrobnější kvalifikátory pro výsledky. Existují dva způsoby, jak to udělat:
- Můžete vytvořit čtvrtou úroveň v kusovníku a definovat kvalifikátory pod výsledky v hierarchii. S tímto přístupem by měla být provedena náležitá péče. Například výsledek FAILED se používá pro různé stavy. Chcete mít stejné kvalifikátory pro různé stavy FAILED? Možná ne.
- Své kvalifikátory můžete definovat v
workflow_state_type
ale nevázat je na žádnou hierarchii; jsou volně stojící. Poté použijeteworkflow_state_option
k seznamu kvalifikátorů pro konkrétní kontext výsledku. To je to, co ukazuje výše uvedená konfigurace, kde jsou kvalifikátory OVER_QUALIFIED a INSUFFICIENT_EXPERIENCE uvedeny jako možnosti pro výsledek APPLICATION_CLOSED.NOT_HIRED.
V obou případech musí aplikace rozpoznat, že byl vybrán kvalifikátor, nikoli stav nebo výsledek – workflow_level_type
toto označí – a aktualizuje managed_entity_state.wf_state_type_qual_id
s vybranou hodnotou.
Některá konfigurační data tabulky
Možná byste chtěli vidět základní konfigurační data tabulku po tabulce. Zde máme ids
a type_keys
odkazují v závorkách. Z důvodu stručnosti jsou uvedeny pouze hodnoty související s článkem.
workflow_level_type
id | type_key |
---|---|
1 | PROCESOVAT |
2 | STATE |
3 | VÝSLEDEK |
4 | KVALIFIKÁTOR |
workflow_state_type
id | type_key | workflow_level_type_id |
---|---|---|
1 | STANDARD_JOB_APPLICATION | 1 (PROCES) |
2 | TECHNICAL_APPLICATION | 1 (PROCES) |
3 | ROZHOVOR | 2 (STATE) |
4 | PROSTĚNO | 3 (VÝSLEDEK) |
5 | SELHLA | 3 (VÝSLEDEK) |
6 | MAKE_OFFER | 2 (STATE) |
7 | SEEK_REFERENCES | 2 (STATE) |
8 | APPLICATION_UZAVŘENA | 2 (STATE) |
9 | NAJATO | 3 (VÝSLEDEK) |
10 | NOT_HIRED | 3 (VÝSLEDEK) |
11 | NEDOSTATEČNÁ_ZKUŠENOST | 4 (KVALIFIKÁTOR) |
12 | OVER_QUALIFIED | 4 (KVALIFIKÁTOR) |
workflow_state_hierarchy
id | state_type_parent_id | state_type_child_id |
---|---|---|
1 | 1 (STANDARD_JOB_APPLICATION) | 3 (ROZHOVOR) |
2 | 2 (TECHNICAL_JOB_APPLICATION) | 3 (ROZHOVOR) |
3 | 3 (ROZHOVOR) | 4 (PASSED) |
4 | 3 (ROZHOVOR) | 5 (SELHÁNÍ) |
5 | 1 (STANDARD_JOB_APPLICATION) | 8 (APPLICATION_UZAVŘENA) |
6 | 2 (TECHNICAL_JOB_APPLICATION) | 8 (APPLICATION_UZAVŘENA) |
7 | 8 (APPLICATION_UZAVŘENA) | 9 (NAJATO) |
8 | 8 (APPLICATION_UZAVŘENA) | 10 (NOT_HIRED) |
workflow_state_context
id | state_type_id | state_hierarchy_id | child_disabled |
---|---|---|---|
1 | 1 (STANDARD_JOB_ APPLICATION) | 3 (ROZHOVOR. PASSED) | N |
2 | 1 (STANDARD_JOB_ APPLICATION) | 4 (ROZHOVOR. FAILED) | N |
3 | 1 (STANDARD_JOB_ APPLICATION) | 7 (APPLICATION_UZAVŘENA. NAJATÁ) | N |
4 | 1 (STANDARD_JOB_ APPLICATION) | 5 (APPLICATION_UZAVŘENA. NOT_HIRED) | N |
5 | 2 (TECHNICAL_APPLICATION) | 6 (APPLICATION_UZAVŘENA. NOT_HIRED) | N |
workflow_state_option
id | state_context_id | state_type_id |
---|---|---|
1 | 1 (STANDARD_JOB_ APPLICATION. ROZHOVOR. ÚSPĚŠNĚ) | 6 (MAKE_OFFER) |
2 | 1 (STANDARD_JOB_ APPLICATION. ROZHOVOR. ÚSPĚŠNĚ) | 7 (SEEK_REFERENCES) |
3 | 2 (STANDARD_JOB_ APPLICATION. ROZHOVOR. SELHLA) | 8 (APPLICATION_UZAVŘENA) |
4 | 5 (TECHNICAL_JOB_ APPLICATION. APPLICATION_CLOSED. NOT_HIRED) | 11 (NEDOSTATEČNÁ_EXPERIENCE) |
5 | 5 (TECHNICKÁ _PRÁCE_ APLIKACE. APLIKACE_UZAVŘENA. NENAJÍT SE) | 12 (OVER_QUALIFIED) |
Je jasné, že toto nastavení je docela složité. Měl by být přednostně spravován prostřednictvím aplikace s uživatelsky přívětivým rozhraním.
Alternativní sekvence
Všimněte si, že řada tabulek má sloupec nazvaný alt_sequence
. Toto se používá k uspořádání seznamu hodnot pro různé výběry prezentované uživateli. Obvykle to bude v sestupném pořadí podle použití, přičemž nejčastěji používané možnosti budou nahoře.
I když tento článek popisoval pracovní aplikace, model lze použít pro mnoho typů pracovních postupů, kde je třeba řídit stav entity v průběhu času. Alternativně může model sloužit jako vzor k přizpůsobení pro vaše vlastní konkrétní požadavky.