Database
 sql >> Datenbank >  >> RDS >> Database

Verwenden von Konfigurationstabellen zum Definieren des tatsächlichen Arbeitsablaufs

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:

  1. 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.
  2. Sie können Ihre Qualifizierer in workflow_state_type definieren aber binden Sie sie nicht an irgendeine Hierarchie; sie sind freistehend. Sie verwenden dann workflow_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.