Im ersten Teil dieser Serie wurden einige grundlegende Schritte zum Verwalten des Lebenszyklus einer beliebigen Entität in einer Datenbank vorgestellt. Unser zweiter und letzter Teil zeigt Ihnen, wie Sie den eigentlichen Workflow mithilfe zusätzlicher Konfigurationstabellen definieren. Hier werden dem Benutzer bei jedem Schritt zulässige Optionen präsentiert. Wir werden auch eine Technik demonstrieren, mit der die strikte Wiederverwendung von „Baugruppen“ und „Unterbaugruppen“ in einer Stücklistenstruktur umgangen werden kann.
Definieren der Optionen
Teil 1 stellte die wichtigsten Arbeitsablauftabellen vor und erläuterte, wie diese einfach in Ihre Datenbank integriert werden können. Was wir jetzt brauchen, ist etwas, das den Benutzer bei der Auswahl des nächsten logischen Zustands anleitet – etwas, das einen logischen Arbeitsablauf definiert .
Das folgende Diagramm definiert alle Komponenten eines Workflow-Datenbankmodells:
Zwei Konfigurationstabellen, workflow_state_option
und workflow_state_context
, wurden dem Modell hinzugefügt. Wir beginnen mit der Optionstabelle, die die zulässigen nächsten Zustände definiert . Sobald seine Funktion verstanden ist, kehren wir zur Kontexttabelle zurück und erläutern die Rolle, die sie spielt.
Zulässige nächste Zustände
Die folgenden Tabellen sind so etwas wie eine SQL-Ansicht unserer Konfigurationstabellen. Hier haben wir die Tabellenverknüpfungen ausgeblendet und schauen uns nur die Kombinationen von type_keys
an . Betrachten wir also jedes STATE.OUTCOME Kombination und definieren Sie die Optionen für den Benutzer verfügbar:
STATE.OUTCOME-Kombination (aus Zustandshierarchie) | Zustandskontext | Kind behindert | Option 1 | Option 2 |
---|---|---|---|---|
APPLICATION_RECEIVED .ACCEPTED | STANDARD_JOB _ANWENDUNG | N | APPLICATION_REVIEW | |
ANTRAG_ERHALTEN .ABGELEHNT | STANDARD_JOB _ANWENDUNG | N | APPLICATION_CLOSED .NOT_HIRED | |
APPLICATION_REVIEW .BESTANDEN | STANDARD_JOB _ANWENDUNG | N | INVITED_TO_INTERVIEW | |
APPLICATION_REVIEW .FEHLGESCHLAGEN | STANDARD_JOB _ANWENDUNG | N | APPLICATION_CLOSED .NOT_HIRED | |
INVITED_TO_INTERVIEW .AKZEPTIERT | STANDARD_JOB _ANWENDUNG | N | INTERVIEW | |
INVITED_TO_INTERVIEW .ABGELEHNT | STANDARD_JOB _ANWENDUNG | N | APPLICATION_CLOSED .NOT_HIRED | |
INTERVIEW .BESTANDEN | STANDARD_JOB _ANWENDUNG | N | MAKE_OFFER | SEEK_REFERENCES |
INTERVIEW.FEHLER | STANDARD_JOB _ANWENDUNG | N | APPLICATION_CLOSED | |
INTERVIEW . BEWERBER_ABGESAGT | STANDARD_JOB _ANWENDUNG | N | APPLICATION_CLOSED | INVITED_TO_INTERVIEW |
INTERVIEW .NO_SHOW | STANDARD_JOB _ANWENDUNG | N | APPLICATION_CLOSED | |
MAKE_OFFER.ACCEPTED | STANDARD_JOB _ANWENDUNG | N | SEEK_REFERENCES | |
MAKE_OFFER.ABGELEHNT | STANDARD_JOB _ANWENDUNG | N | APPLICATION_CLOSED | |
SEEK_REFERENCES .BESTANDEN | STANDARD_JOB _ANWENDUNG | N | APPLICATION_CLOSED .HIRED | |
SEEK_REFERENCES .FAILED | STANDARD_JOB _ANWENDUNG | N | APPLICATION_CLOSED | |
ANWENDUNG_GESCHLOSSEN .EINGESTELLT | STANDARD_JOB _ANWENDUNG | N | ||
APPLICATION_CLOSED .NOT_HIRED | STANDARD_JOB _ANWENDUNG | N |
Weil wir den Kontext vorerst ignorieren, Zustandskontext und Kind behindert? sind ausgegraut. Ich habe auch die Anzahl der Optionen in diesem Beispiel der Kürze halber auf zwei beschränkt, obwohl es in der Praxis keine Begrenzung gibt.
Wie funktioniert das also?
Stellen Sie sich vor, das Interview wurde gerade durchgeführt und der Interviewer zeichnet das Ergebnis auf. Die zugrunde liegende Tabelle, die aktualisiert wird, ist managed_entity_state
. Es gibt zwei logische Ergebnisse:PASSED und FAILED. Also der aktuelle managed_entity_state
wird mit dem ausgewählten Ergebnis aktualisiert (wf_state_type_outcome_id
). Im Beispielmodell kann der Interviewer auch einige Notizen zum Interview hinzufügen.
Wenn der Interviewer BESTANDEN auswählt, werden ihm zwei weitere Optionen präsentiert:MAKE_OFFER und SEEK_REFERENCES. Dies sind die nächsten Zustände in unserem Arbeitsablauf. Sie ähneln go to
Anweisungen in der Programmierung. Für beide Optionen wird eine neue Zeile in managed_entity_state
eingefügt , Verschieben der Stellenbewerbung in den nächsten Status im Workflow-Prozess. Der Nutzer kann hierfür eine Frist setzen, indem er ein due_date
eingibt .
Wenn der Interviewer dagegen FAILED auswählt, gibt es nur eine Option:APPLICATION_CLOSED. Also ein neuer managed_entity_state
Zeile wird mit dem Status APPLICATION_CLOSED eingefügt (wf_state_type_state_id
).
Sie werden sehen, dass für den Zustand APPLICATION_CLOSED keine Optionen verfügbar sind. Dies bedeutet, dass das Ende des Workflow-Prozesses erreicht wurde.
Die Kontexttabelle
Schauen wir uns die Konfiguration für den technischen Bewerbungsprozess an, um zu sehen, welche Rolle die Kontexttabelle hat spielt:
STATE.OUTCOME-Kombination (aus Zustandshierarchie) | Zustandskontext | Kind behindert | Option 1 | Option 2 |
---|---|---|---|---|
APPLICATION_RECEIVED .ACCEPTED | TECHNISCHER_JOB _BEWERBUNG | N | ANWENDUNG _REVIEW | |
ANTRAG_ERHALTEN .ABGELEHNT | TECHNISCHER_JOB _BEWERBUNG | N | ANWENDUNG _GESCHLOSSEN | |
APPLICATION_REVIEW .BESTANDEN | TECHNISCHER_JOB _BEWERBUNG | N | INVITED_TO _INTERVIEW | |
APPLICATION_REVIEW .FEHLGESCHLAGEN | TECHNISCHER_JOB _BEWERBUNG | N | ANWENDUNG _GESCHLOSSEN | |
INVITED_TO_INTERVIEW .AKZEPTIERT | TECHNISCHER_JOB _BEWERBUNG | N | TEST_APTITUDE | |
INVITED_TO_INTERVIEW .ABGELEHNT | TECHNISCHER_JOB _BEWERBUNG | N | ANWENDUNG _GESCHLOSSEN | |
TEST_APTITUDE .BESTANDEN | TECHNISCHER_JOB _BEWERBUNG | N | INTERVIEW | SUCHE _REFERENZEN |
TEST_APTITUDE .FAILED | TECHNISCHER_JOB _BEWERBUNG | N | ANWENDUNG _GESCHLOSSEN | |
INTERVIEW .BESTANDEN | TECHNISCHER_JOB _BEWERBUNG | N | MAKE_OFFER | SUCHE _REFERENZEN |
INTERVIEW .FEHLER | TECHNISCHER_JOB _BEWERBUNG | N | ANWENDUNG _GESCHLOSSEN | |
INTERVIEW . BEWERBER_ABGESAGT | TECHNISCHER_JOB _ANWENDUNG | Y | - | - |
INTERVIEW .NO_SHOW | TECHNISCHER_JOB _BEWERBUNG | N | ANWENDUNG _GESCHLOSSEN | INVITED_TO _INTERVIEW |
MAKE_OFFER .AKZEPTIERT | TECHNISCHER_JOB _BEWERBUNG | N | SUCHE _REFERENZEN | |
MAKE_OFFER .ABGELEHNT | TECHNISCHER_JOB _BEWERBUNG | N | ANWENDUNG _GESCHLOSSEN | |
SEEK_REFERENCES .BESTANDEN | TECHNISCHER_JOB _BEWERBUNG | N | ANWENDUNG _GESCHLOSSEN.ERFOLG | |
SEEK_REFERENCES .FAILED | TECHNISCHER_JOB _BEWERBUNG | N | ANWENDUNG _GESCHLOSSEN | |
ANWENDUNG_GESCHLOSSEN .EINGESTELLT | TECHNISCHER_JOB _BEWERBUNG | N | ||
APPLICATION_CLOSED .NOT_HIRED | TECHNISCHER_JOB _BEWERBUNG | N | ungenügend _ERFAHRUNG | ÜBER _QUALIFIZIERT |
Hier ist der Kontext TECHNICAL_JOB_APPLICATION. Warum ist das wichtig? Weil es uns erlaubt, Ergebnisse zu überschreiben. Denken Sie daran, dass wir zuvor erklärt haben, dass wir „Baugruppen“ und „Unterbaugruppen“ in einer Stücklistenstruktur (BOM) wiederverwenden können. Dies ist nützlich, wenn wir etwas einmal definieren und wiederverwenden, aber es kann auch zu starr sein. Was ist, wenn wir nicht alles wiederverwenden möchten?
Durch Einfügen von workflow_state_context
zwischen workflow_state_hierarchy
und workflow_state_option
, können wir Ergebnisse sowohl wiederverwenden als auch überschreiben. In diesem Modell können wir definieren, ob ein Ergebnis für verschiedene Prozesse aktiviert oder deaktiviert ist.
Im obigen Beispiel ist die Kombination INTERVIEW.CANDIDATE_CANCELLED deaktiviert. Mit anderen Worten, wir sagen, dass es für technische Bewerbungen einfach kein zulässiges Ergebnis ist. Folglich kann der Interviewer es nicht auswählen, wenn er das Ergebnis eines technischen Bewerbungsgesprächs aufzeichnet, da unsere Abfrage nur Optionen auswählt, bei denen workflow_state_context.child_disabled = ‘N’
.
Da workflow_state_option
ist kein direktes Kind von workflow_state_hierarchy
, müssen wir jedes Mal, wenn ein Status verwendet wird, einen separaten Satz von Optionen definieren. Aber dieser Kompromiss ermöglicht es uns, die Optionen für jeden Prozess fein abzustimmen.
Qualifizierende Ergebnisse
Wir haben auch die Möglichkeit, detailliertere Qualifier zu definieren für Ergebnisse. Dafür gibt es zwei Möglichkeiten:
- Sie können eine vierte Ebene in Ihrer Stückliste erstellen, um Qualifizierer unter Ergebnissen in der Hierarchie zu definieren. Bei diesem Ansatz sollte mit der gebotenen Sorgfalt vorgegangen werden. Beispielsweise wird das Ergebnis FAILED für verschiedene Zustände verwendet. Möchten Sie die gleichen Qualifikationsmerkmale für verschiedene FAILED-Zustände haben? Vielleicht nicht.
- Sie können Ihre Qualifizierer in
workflow_state_type
definieren aber binden Sie sie nicht an irgendeine Hierarchie; sie sind freistehend. Sie verwenden dannworkflow_state_option
um die Qualifizierer für den spezifischen Ergebniskontext aufzulisten. Dies ist, was die obige Konfiguration zeigt, wo die Qualifizierer OVER_QUALIFIED und INSUFFICIENT_EXPERIENCE als Optionen für das Ergebnis APPLICATION_CLOSED.NOT_HIRED aufgeführt sind.
In jedem Fall muss die Anwendung erkennen, dass ein Qualifizierer statt eines Status oder Ergebnisses ausgewählt wurde – workflow_level_type
zeigt dies an – und aktualisiert managed_entity_state.wf_state_type_qual_id
mit dem ausgewählten Wert.
Einige Tabellenkonfigurationsdaten
Möglicherweise möchten Sie die zugrunde liegenden Konfigurationsdaten Tabelle für Tabelle anzeigen. Hier haben wir die ids
und die type_keys
sie beziehen sich auf in Klammern. Der Kürze halber werden nur artikelbezogene Werte dargestellt.
workflow_level_type
id | type_key |
---|---|
1 | PROZESS |
2 | STAAT |
3 | ERGEBNIS |
4 | QUALIFIKATOR |
workflow_state_type
id | type_key | workflow_level_type_id |
---|---|---|
1 | STANDARD_JOB_APPLICATION | 1 (PROZESS) |
2 | TECHNISCHE_ANWENDUNG | 1 (PROZESS) |
3 | INTERVIEW | 2 (STAAT) |
4 | BESTANDEN | 3 (ERGEBNIS) |
5 | FEHLER | 3 (ERGEBNIS) |
6 | MAKE_OFFER | 2 (STAAT) |
7 | SEEK_REFERENCES | 2 (STAAT) |
8 | APPLICATION_CLOSED | 2 (STAAT) |
9 | ANGESTELLT | 3 (ERGEBNIS) |
10 | NOT_HIRED | 3 (ERGEBNIS) |
11 | INSUFFICIENT_EXPERIENCE | 4 (QUALIFIER) |
12 | ÜBER_QUALIFIZIERT | 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 (BESTANDEN) |
4 | 3 (INTERVIEW) | 5 (FEHLGESCHLAGEN) |
5 | 1 (STANDARD_JOB_APPLICATION) | 8 (APPLICATION_CLOSED) |
6 | 2 (TECHNICAL_JOB_APPLICATION) | 8 (APPLICATION_CLOSED) |
7 | 8 (APPLICATION_CLOSED) | 9 (ANGESTELLT) |
8 | 8 (APPLICATION_CLOSED) | 10 (NOT_HIRED) |
workflow_state_context
id | state_type_id | state_hierarchy_id | Kind_behindert |
---|---|---|---|
1 | 1 (STANDARD_JOB_BEWERBUNG) | 3 (INTERVIEW.BESTANDEN) | N |
2 | 1 (STANDARD_JOB_BEWERBUNG) | 4 (INTERVIEW.FEHLGESCHLAGEN) | N |
3 | 1 (STANDARD_JOB_BEWERBUNG) | 7 (BEWERBUNG_GESCHLOSSEN. EINGESTELLT) | N |
4 | 1 (STANDARD_JOB_BEWERBUNG) | 5 (BEWERBUNG_GESCHLOSSEN. NICHT_EINGESTELLT) | N |
5 | 2 (TECHNISCHE_ANWENDUNG) | 6 (BEWERBUNG_GESCHLOSSEN. NICHT_EINGESTELLT) | N |
workflow_state_option
id | state_context_id | state_type_id |
---|---|---|
1 | 1 (STANDARD_JOB_ BEWERBUNG. INTERVIEW. BESTANDEN) | 6 (MAKE_OFFER) |
2 | 1 (STANDARD_JOB_ BEWERBUNG. INTERVIEW. BESTANDEN) | 7 (SEEK_REFERENCES) |
3 | 2 (STANDARD_JOB_ BEWERBUNG. INTERVIEW. FEHLGESCHLAGEN) | 8 (APPLICATION_CLOSED) |
4 | 5 (TECHNICAL_JOB_ APPLICATION. APPLICATION_CLOSED. NOT_HIRED) | 11 (INSUFFICIENT_EXPERIENCE) |
5 | 5 (TECHNISCHE _JOB_ BEWERBUNG. BEWERBUNG_GESCHLOSSEN. NICHT_EINGESTELLT) | 12 (ÜBER_QUALIFIZIERT) |
Es ist klar, dass die Einrichtung ziemlich schwierig ist. Es sollte vorzugsweise über eine Anwendung mit einer benutzerfreundlichen Oberfläche verwaltet werden.
Alternative Sequenzen
Sie werden feststellen, dass einige Tabellen eine Spalte namens alt_sequence
haben . Dies wird verwendet, um die Werteliste für die verschiedenen Auswahlen zu ordnen, die dem Benutzer präsentiert werden. In der Regel ist dies in absteigender Reihenfolge nach Nutzung, wobei die am häufigsten verwendeten Optionen ganz oben stehen.
Während dieser Artikel Bewerbungen beschrieb, kann das Modell für viele Arten von Workflows verwendet werden, bei denen der Status einer Entität im Laufe der Zeit verwaltet werden muss. Alternativ kann das Modell als Muster dienen, das Sie an Ihre eigenen speziellen Anforderungen anpassen können.