Freigeben über


Einstellungsprozess

Im Beispiel "HiringProcess" wird veranschaulicht, wie ein Geschäftsprozess mithilfe von Messagingaktivitäten und zwei Workflows implementiert wird, die als Workflowdienste gehostet werden. Diese Workflows sind Teil der IT-Infrastruktur eines fiktiven Unternehmens namens Contoso, Inc.

Der HiringRequest Workflowprozess (implementiert als a Flowchart) fordert die Autorisierung von mehreren Managern in der Organisation an. Um dieses Ziel zu erreichen, verwendet der Workflow andere vorhandene Dienste in der Organisation (in unserem Fall ein Posteingangsdienst und einen Organisationsdatendienst, der als reine Windows Communication Foundation (WCF)-Dienste implementiert wurde.

Der ResumeRequest-Workflow (implementiert als ein Sequence) veröffentlicht eine Stellenanzeige auf der externen Karriere-Website von Contoso und verwaltet den Eingang von Bewerbungen. Eine Stellenanzeige steht auf der externen Website für einen begrenzten Zeitraum (bis ein Timeout abläuft) oder bis ein Mitarbeiter von Contoso entscheidet, sie zu entfernen.

In diesem Beispiel werden die folgenden Features von .NET Framework 4.6.1 veranschaulicht:

  • Flowchart und Sequence Workflows zum Modellieren von Geschäftsprozessen.

  • Workflowdienste.

  • Messaging-Aktivitäten.

  • Inhaltsbasierte Korrelation.

  • Benutzerdefinierte Aktivitäten (deklarativ und codebasiert).

  • Vom System bereitgestellte SQL Server-Persistenz.

  • PersistenceParticipant (benutzerdefiniert)

  • Benutzerdefinierte Nachverfolgung.

  • Ereignisablaufverfolgung (ETW) für Windows

  • Zusammensetzung der Aktivitäten.

  • Parallel-Aktivitäten.

  • CancellationScope-Aktivität.

  • Permanente Zeitgeber (Delay-Aktivität)

  • Transaktionen

  • Mehrere Workflows in derselben Lösung.

Beschreibung des Prozesses

Contoso, Inc. möchte die Kontrolle über die Mitarbeiterzahl in den einzelnen Abteilungen haben. Daher muss jeder Mitarbeiter, wenn er einen neuen Einstellungsprozess starten möchte, eine Genehmigung für den Einstellungsantrag durchlaufen, bevor die Rekrutierung tatsächlich stattfinden kann. Dieser Prozess wird als Einstellungsprozessanfrage (definiert im Projekt EinstellungRequestService) bezeichnet und besteht aus den folgenden Schritten:

  1. Ein Mitarbeiter (der Antragsteller) startet die Einstellungsanfrage.

  2. Der Vorgesetzte des Antragstellers muss die Anforderung genehmigen:

    1. Der Vorgesetzte kann die Anforderung ablehnen.

    2. Der Vorgesetzte kann die Anforderung an den Antragsteller zurückgeben, um weitere Informationen zu erhalten:

      1. Der Antragsteller überprüft und sendet die Anforderung an den Vorgesetzten zurück.
    3. Der Vorgesetzte kann genehmigen.

  3. Nachdem der Vorgesetzte des Antragstellers die Anfrage genehmigt hat, muss der Abteilungsleiter die Anforderung ebenfalls genehmigen.

    1. Der Abteilungsleiter kann ablehnen.

    2. Der Abteilungsleiter kann zustimmen.

  4. Nachdem der Abteilungsleiter genehmigt hat, benötigt der Prozess die Genehmigung von zwei Personalleitern oder dem CEO.

    1. Der Prozess kann in den Status "Akzeptiert" oder "Abgelehnt" übergehen.

    2. Wenn der Prozess akzeptiert wird, wird eine neue Instanz des ResumeRequest Workflows gestartet (ResumeRequest ist über einen Dienstverweis mit HiringRequest.csproj verknüpft.)

Sobald die Vorgesetzten die Einstellung eines neuen Mitarbeiters genehmigen, muss die Personalabteilung den geeigneten Kandidaten finden. Dieser Prozess wird vom zweiten WorkflowResumeRequest (definiert in ResumeRequestService.csproj) ausgeführt. Dieser Workflow definiert den Prozess zum Einreichen einer Stellenbuchung mit einer Karrierechance an die externe Karrierewebsite von Contoso, empfängt Lebensläufe von Bewerbern und überwacht den Status der Stellenbuchung. Stellenausschreibungen sind abrufbar, bis ein diesbezüglich festgelegter Zeitraum abgelaufen ist oder sie von einem Mitarbeiter von Contoso entfernt werden. Der ResumeRequest Workflow besteht aus den folgenden Schritten:

  1. Ein Mitarbeiter von Contoso gibt die Stelleninformationen ein und legt einen Zeitraum für die Ausschreibung fest. Sobald der Mitarbeiter diese Informationen eingibt, wird die Position auf der Karrierewebsite veröffentlicht.

  2. Sobald die Informationen veröffentlicht wurden, können interessierte Parteien ihre Lebensläufe einreichen. Wenn ein Lebenslauf übermittelt wird, wird er in einem Datensatz gespeichert, der mit der Auftragsöffnung verknüpft ist.

  3. Bewerber können Lebensläufe einreichen, bis das Timeout abläuft, oder eine Person aus der Contoso-Personalabteilung entscheidet explizit, die Veröffentlichung zu entfernen, indem sie den Vorgang beendet.

Projekte im Beispiel

Die folgende Tabelle zeigt die Projekte in der Beispiellösung.

Projekt BESCHREIBUNG
ContosoHR Enthält Datenverträge, Geschäftsobjekte und Repositoryklassen.
EinstellungsanfrageDienst Enthält die Definition des Einstellungsanforderungsprozess-Workflows.

Dieses Projekt wird als Konsolenanwendung implementiert, die den Workflow (XAML-Datei) als Dienst selbst hosten kann.
ResumeRequestService Ein Workflowdienst, der Lebensläufe von Kandidaten sammelt, bis ein Timeout abläuft, oder jemand entscheidet, dass der Prozess beendet werden muss.

Dieses Projekt wird als deklarativer Workflowdienst (xamlx) implementiert.
OrgService Ein Dienst, der Organisationsinformationen verfügbar macht (Mitarbeiter, Positionen, PositionTypes und Abteilungen). Sie können sich diesen Dienst als Das Modul "Unternehmensorganisation" eines Enterprise Resource Plan (ERP) vorstellen.

Dieses Projekt wird als Konsolenanwendung implementiert, die einen Windows Communication Foundation (WCF)-Dienst verfügbar macht.
InboxService Ein Posteingang, der Aktionen erfordernde Aufgaben für Mitarbeiter enthält.

Dieses Projekt wird als Konsolenanwendung implementiert, die einen WCF-Dienst verfügbar macht.
InternalClient Eine Webanwendung für die Interaktion mit dem Prozess. Benutzer können ihre Einstellungsprozess-Workflows starten, daran teilnehmen und sie anzeigen. Mit dieser Anwendung können sie auch ResumeRequest-Prozesse starten und überwachen.

Diese Website ist für das Intranet von Contoso intern implementiert. Dieses Projekt wird als ASP.NET-Website implementiert.
KarriereWebSite Eine externe Website, die die offenen Positionen in Contoso verfügbar macht. Jeder potenzielle Kandidat kann zu dieser Website navigieren und einen Lebenslauf einreichen.

Featurezusammenfassung

In der folgenden Tabelle wird beschrieben, wie jedes Feature in diesem Beispiel verwendet wird.

Merkmal BESCHREIBUNG Projekt
Flussdiagramm Der Geschäftsprozess wird als Flussdiagramm dargestellt. Diese Flussdiagrammbeschreibung stellt den Prozess auf die gleiche Weise dar, wie ein Unternehmen ihn in einem Whiteboard gezeichnet hätte. EinstellungsanfrageDienst
Workflowdienste Das Flussdiagramm mit der Prozessdefinition wird in einem Dienst gehostet (in diesem Beispiel wird der Dienst in einer Konsolenanwendung gehostet). EinstellungsanfrageDienst
Messaging-Aktivitäten Das Flussdiagramm verwendet Messagingaktivitäten auf zwei Arten:

– Um Informationen vom Benutzer zu erhalten (um die Entscheidungen und zugehörigen Informationen in den einzelnen Genehmigungsschritten zu erhalten).
– Für die Interaktion mit anderen vorhandenen Diensten (InboxService und OrgDataService, die über Dienstverweise verwendet werden).
EinstellungsanfrageDienst
Inhaltsbasierte Korrelation Genehmigungsnachrichten werden mit der ID-Eigenschaft der Stellenausschreibung korreliert:

– Wenn ein Prozess gestartet wird, wird der Korrelationshandle mit der ID der Anforderung initialisiert.
- Eingehende Genehmigungsnachrichten korrelieren mit ihrer ID (der erste Parameter jeder Genehmigungsnachricht ist die ID der Anforderung).
HiringRequestService / ResumeRequestService
Benutzerdefinierte Aktivitäten (deklarativ und codebasiert) In diesem Beispiel gibt es mehrere benutzerdefinierte Aktivitäten:

- SaveActionTracking: Diese Aktivität gibt einen benutzerdefinierten TrackingRecord (mit Track) aus. Diese Aktivität wurde durch Erweiterung der NativeActivity mit imperativem Code erstellt.
- GetEmployeesByPositionTypes: Diese Aktivität empfängt eine Liste der Positionstyp-IDs und gibt eine Liste von Personen zurück, die diese Position in Contoso haben. Diese Aktivität wurde deklarativ erstellt (mit dem Aktivitäts-Designer).
- SaveHiringRequestInfo: Diese Aktivität speichert die Informationen einer HiringRequest (mithilfe HiringRequestRepository.Save). Diese Aktivität wurde durch Erweiterung der CodeActivity mit imperativem Code erstellt.
EinstellungsanfrageDienst
Vom System bereitgestellte SQL Server-Persistenz Die WorkflowServiceHost Instanz, die die Ablaufdiagrammprozessdefinition hostt, ist für die Verwendung der vom System bereitgestellten SQL Server-Persistenz konfiguriert. HiringRequestService / ResumeRequestService
Benutzerdefinierte Nachverfolgung Das Beispiel enthält einen benutzerdefinierten Nachverfolgungsteilnehmer, der den Verlauf eines HiringRequestProcess Vorgangs speichert (dies zeichnet auf, welche Aktion ausgeführt wurde, von wem und wann). Der Quellcode befindet sich im Ordner "Tracking" von HiringRequestService. EinstellungsanfrageDienst
ETW-Überwachung Die vom System bereitgestellte ETW-Nachverfolgung wird in der Datei App.config im HiringRequestService-Dienst konfiguriert. EinstellungsanfrageDienst
Zusammensetzung der Aktivitäten Die Prozessdefinition verwendet die freie Zusammensetzung von Activity. Das Flussdiagramm enthält mehrere Sequenz- und Parallelaktivitäten, die gleichzeitig andere Aktivitäten (usw.) enthalten. EinstellungsanfrageDienst
Parallele Aktivitäten - ParallelForEach<T> wird verwendet, um eine parallele Registrierung im Posteingang des CEO sowie der Personalvorstände vorzunehmen (Genehmigungsschritt durch zwei Personalvorstände ausstehend).
- Parallel wird für verschiedene Bereinigungsaufgaben in den Abschluss- und Ablehnungsschritten verwendet.
EinstellungsanfrageDienst
Abbruch des Modells Im Flussdiagramm wird mit CancellationScope ein Abbruchverhalten erstellt (im vorliegenden Fall werden einige Bereinigungsaufgaben ausgeführt.). EinstellungsanfrageDienst
Kundenpersistenzteilnehmer HiringRequestPersistenceParticipant Speichert Daten aus einer Workflowvariable in einer Tabelle, die in der Contoso HR-Datenbank gespeichert ist. EinstellungsanfrageDienst
Workflowdienste ResumeRequestService wird mithilfe von Workflowdiensten implementiert. Workflowdefinitions- und Dienstinformationen sind in ResumeRequestService.xamlx enthalten. Der Dienst ist für die Verwendung von Persistenz und Tracking konfiguriert. ResumeRequestService
Permanente Zeitgeber ResumeRequestService verwendet beständige Timer, um die Dauer einer Stellenanzeige zu definieren (sobald ein Timeout abläuft, wird die Stellenanzeige geschlossen). ResumeRequestService
Transaktionen TransactionScope wird verwendet, um die Konsistenz von Daten innerhalb der Ausführung mehrerer Aktivitäten (wenn ein neuer Lebenslauf empfangen wird) sicherzustellen. ResumeRequestService
Transaktionen Der benutzerdefinierte Persistenzteilnehmer (HiringRequestPersistenceParticipant) und der benutzerdefinierte Tracking-Teilnehmer (HistoryFileTrackingParticipant) verwenden dieselbe Transaktion. EinstellungsanfrageDienst
Verwenden von WF in ASP.NET Anwendungen. Auf Workflows wird über zwei ASP.NET Anwendungen zugegriffen. InternalClient / CareerWebSite

Datenspeicher

Daten werden in einer SQL Server-Datenbank namens ContosoHR gespeichert (das Skript zum Erstellen dieser Datenbank befindet sich im DbSetup Ordner). Workflowinstanzen werden in einer SQL Server-Datenbank InstanceStore gespeichert (die Skripts zur Erstellung des Instanzspeichers sind Teil der .NET Framework 4.6.1 Distribution).

Beide Datenbanken werden durch Ausführen des Skripts „Setup.cmd“ über eine Developer-Eingabeaufforderung für Visual Studio erstellt.

Ausführen des Beispiels

So erstellen Sie die Datenbanken

  1. Öffnen Sie eine Entwickler-Eingabeaufforderung für Visual Studio.

  2. Navigieren Sie zum Beispielordner.

  3. Führen Sie Setup.cmd aus.

  4. Überprüfen Sie, ob die beiden Datenbanken ContosoHR und InstanceStore in SQL Express erstellt wurden.

So richten Sie die Projektmappe für die Ausführung ein

  1. Führen Sie Visual Studio als Administrator aus. Öffnen Sie HiringRequest.sln.

  2. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Lösung und wählen Sie Eigenschaften aus.

  3. Wählen Sie die Option "Mehrere Startprojekte " aus, und legen Sie " CareerWebSite", "InternalClient", "HiringRequestService" und "ResumeRequestService " auf "Start" fest. Lassen Sie ContosoHR, InboxService und OrgService auf Keine belassen.

  4. Erstellen Sie die Projektmappe, indem Sie STRG+UMSCHALT+B drücken. Stellen Sie sicher, dass der Build erfolgreich war.

So führen Sie die Projektmappe aus

  1. Drücken Sie nach dem Erstellen der Lösung STRG+F5, um das Programm ohne Debugging auszuführen. Überprüfen Sie, ob alle Dienste gestartet wurden.

  2. Klicken Sie in der Lösung mit der rechten Maustaste auf "InternalClient ", und wählen Sie dann " Im Browser anzeigen" aus. Die Standardseite für InternalClient wird angezeigt. Stellen Sie sicher, dass Dienste ausgeführt werden, und klicken Sie auf den Link.

  3. Das Modul HiringRequest wird angezeigt. Sie können dem hier beschriebenen Szenario folgen.

  4. Nachdem der HiringRequest abgeschlossen wurde, können Sie den ResumeRequest starten. Sie können dem hier beschriebenen Szenario folgen.

  5. Nachdem der ResumeRequest gesendet wurde, ist er auf der öffentlichen Website (mit den Stellenanzeigen von Contoso) verfügbar. Um die Stellenausschreibung anzuzeigen (und sich für die Position zu bewerben), navigieren Sie zur Karrierewebsite.

  6. Klicken Sie in der Lösung mit der rechten Maustaste auf "KarriereWebSite ", und wählen Sie "Im Browser anzeigen" aus.

  7. Navigieren Sie zurück zu InternalClient, indem Sie in der Lösung mit der rechten Maustaste auf InternalClient klicken und Im Browser anzeigen auswählen.

  8. Wechseln Sie zum Abschnitt Job Postings, indem Sie im oberen Menü der Posteingang auf den Link Job Postings klicken. Sie können dem hier beschriebenen Szenario folgen.

Szenarien

Einstellungsanfrage

  1. Michael Alexander (Software Engineer) möchte eine neue Position für die Einstellung eines Softwaretechnikers in Test (SDET) in der Engineering-Abteilung anfordern, die mindestens 3 Jahre Erfahrung in C# hat.

  2. Nach der Erstellung erscheint der Antrag im Posteingang von Michael (klicken Sie auf Aktualisieren, wenn der Antrag nicht angezeigt wird) und wartet auf die Genehmigung von Peter Brehm, Michaels Vorgesetztem.

  3. Peter will auf Michaels Anfrage handeln. Er denkt, dass die Position 5 Jahre C#-Erfahrung anstelle von 3 erfordert, so sendet er seine Kommentare zurück zur Überprüfung.

  4. Michael sieht eine Nachricht in seinem Posteingang von seinem Vorgesetzten und möchte handeln. Michael sieht die Geschichte des Positionsantrags und stimmt mit Peter überein. Michael ändert die Beschreibung so, dass 5 Jahre C#-Erfahrung erforderlich ist und die Änderung akzeptiert wird.

  5. Peter handelt nach Michaels geänderter Anfrage und akzeptiert sie. Der Antrag muss nun vom Direktor des Engineerings Tsvi Reiter genehmigt werden.

  6. Tsvi Reiter möchte die Anfrage beschleunigen, indem er einen Kommentar eingibt, um mitzuteilen, dass die Anfrage dringend ist, und sie akzeptiert.

  7. Der Antrag muss nun von zwei Personalleitern oder dem CEO genehmigt werden. Der Firmenchef Brian Richard Goldstein sieht den Dringlichkeitsvermerk des Entwicklungsvorstands Reiter. Er handelt auf Anfrage, indem er sie akzeptiert, um die Genehmigung durch zwei Personalleiter zu umgehen.

  8. Die Anfrage wird aus dem Posteingang von Michael entfernt und der Prozess der Einstellung eines SDET hat jetzt begonnen.

Fortsetzungsanforderung starten

  1. Nun wartet die Stelle auf die Veröffentlichung auf einer externen Website, auf der sich Personen bewerben können (Sie können dies sehen, indem Sie auf den Link "Stellenangebote" klicken). Derzeit befindet sich die Stellenanzeige bei einem HR-Vertreter, der für die Fertigstellung der Stellenanzeige und die Ausschreibung verantwortlich ist.

  2. HR möchte diese Stellenposition bearbeiten (durch Klicken auf den Link "Bearbeiten ") durch Festlegen eines Timeouts von 60 Minuten (in der Praxis kann dies Tage oder Wochen sein). Der Gültigkeitszeitraum ermöglicht das Entfernen der Stellenausschreibung von der externen Website nach Ablauf eines bestimmten Zeitraums.

  3. Nach dem Speichern der bearbeiteten Auftragsposition wird sie auf der Registerkarte " Empfangende Lebensläufe " angezeigt (aktualisieren Sie die Webseite, um die neue Auftragsposition anzuzeigen).

Erfassen von Lebensläufen

  1. Die Auftragsposition sollte auf der externen Website angezeigt werden. Als Person, die sich für die Stelle interessiert, können Sie sich bewerben und Ihren Lebenslauf einreichen.

  2. Wenn Sie zum Stellenanzeigenlisten-Dienst zurückkehren, können Sie die bisher gesammelten Lebensläufe einsehen.

  3. Hr kann auch die Erfassung von Lebensläufen beenden (z. B. nachdem der richtige Kandidat identifiziert wurde).

Problembehandlung

  1. Stellen Sie sicher, dass Sie Visual Studio mit Administratorrechten ausführen.

  2. Wenn die Lösung nicht erstellt werden kann, überprüfen Sie Folgendes:

    • Der Verweis auf ContosoHR fehlt nicht in den InternalClient- oder CareersWebSite-Projekten.
  3. Wenn die Lösung nicht ausgeführt werden kann, überprüfen Sie Folgendes:

    1. Alle Dienste sind in Betrieb.

    2. Die Dienstverweise werden aktualisiert.

      1. Öffnen des ordners App_WebReferences

      2. Klicken Sie mit der rechten Maustaste auf Contoso , und wählen Sie "Webdienstverweise aktualisieren" aus.

      3. Erstellen Sie die Projektmappe neu, indem Sie in Visual Studio STRG+UMSCHALT+B drücken.

Deinstallieren

  1. Löschen Sie den SQL Server-Instanzspeicher, indem Sie Cleanup.batausführen, der sich im Ordner "DbSetup" befindet.

  2. Löschen Sie den Quellcode auf Ihrer Festplatte.