Proces zatrudniania

W przykładzie HiringProcess pokazano, jak zaimplementować proces biznesowy przy użyciu działań obsługi komunikatów i dwóch przepływów pracy hostowanych jako usługi przepływu pracy. Te przepływy pracy są częścią infrastruktury IT fikcyjnej firmy o nazwie Contoso, Inc.

Proces HiringRequest przepływu pracy (zaimplementowany jako Flowchart) prosi o autoryzację od kilku menedżerów w organizacji. Aby osiągnąć ten cel, przepływ pracy używa innych istniejących usług w organizacji (w naszym przypadku usługa skrzynki odbiorczej i usługa danych organizacji zaimplementowana jako zwykłe usługi Windows Communication Foundation (WCF).

Przepływ ResumeRequest pracy (zaimplementowany jako Sequence) publikuje delegowanie zadań w zewnętrznej witrynie internetowej firmy Contoso i zarządza pozyskiwaniem życiorysów. Publikowanie zadań jest dostępne w zewnętrznej witrynie sieci Web przez określony czas (do czasu wygaśnięcia limitu czasu) lub do momentu, gdy pracownik firmy Contoso zdecyduje się go usunąć.

W tym przykładzie przedstawiono następujące funkcje programu .NET Framework 4.6.1:

  • Flowchart i Sequence przepływy pracy do modelowania procesów biznesowych.

  • Usługi przepływu pracy.

  • Działania związane z obsługą komunikatów.

  • Korelacja oparta na zawartości.

  • Działania niestandardowe (deklaratywne i oparte na kodzie).

  • Trwałość serwera SQL zapewniana przez system.

  • Niestandardowy PersistenceParticipant.

  • Śledzenie niestandardowe.

  • Śledzenie zdarzeń dla śledzenia systemu Windows (ETW).

  • Kompozycja działań.

  • Parallel Działania.

  • CancellationScope Działania.

  • Trwałe czasomierze (Delay działanie).

  • Transakcji.

  • Więcej niż jeden przepływ pracy w tym samym rozwiązaniu.

Opis procesu

Firma Contoso, Inc. chce mieć ścisłą kontrolę nad zatrudnieniem w każdym z jego działów. W związku z tym za każdym razem, gdy każdy pracownik chce rozpocząć nowy proces zatrudniania, musi przejść przez zatwierdzenie procesu wniosku o zatrudnienie, zanim faktycznie może się zdarzyć rekrutacja. Ten proces jest nazywany żądaniem procesu zatrudniania (zdefiniowanym w projekcie HiringRequestService) i składa się z następujących kroków:

  1. Pracownik (osoba żądający) rozpoczyna wniosek o proces zatrudniania.

  2. Menedżer osoby żądającej musi zatwierdzić żądanie:

    1. Menedżer może odrzucić żądanie.

    2. Menedżer może zwrócić żądanie do żądającego w celu uzyskania dodatkowych informacji:

      1. Żądający przegląda i wysyła żądanie z powrotem do menedżera.
    3. Menedżer może zatwierdzić.

  3. Po zatwierdzeniu przez menedżera osoby żądającej właściciel działu musi zatwierdzić żądanie:

    1. Właściciel działu może odrzucić.

    2. Właściciel działu może zatwierdzić.

  4. Po zatwierdzeniu przez właściciela działu proces wymaga zatwierdzenia przez 2 menedżerów kadr lub dyrektora generalnego:

    1. Proces może przejść do stanu zaakceptowanego lub odrzuconego.

    2. Jeśli proces zostanie zaakceptowany, zostanie uruchomione nowe wystąpienie ResumeRequest przepływu pracy (ResumeRequest jest połączone z plikiem HiringRequest.csproj za pośrednictwem odwołania do usługi).

Gdy menedżerowie zatwierdzą zatrudnienie nowego pracownika, dział kadr musi znaleźć odpowiedniego kandydata. Ten proces jest wykonywany przez drugi przepływ pracy (ResumeRequestzdefiniowany w pliku ResumeRequestService.csproj). Ten przepływ pracy definiuje proces przesyłania delegowania pracy z możliwością kariery do zewnętrznej witryny sieci Web kariery firmy Contoso, odbiera życiorysy od wnioskodawców i monitoruje stan delegowania pracy. Stanowiska są dostępne dla stałego okresu (do czasu wygaśnięcia) lub do momentu, gdy pracownik firmy Contoso zdecyduje się go usunąć. Przepływ ResumeRequest pracy składa się z następujących kroków:

  1. Pracownik firmy Contoso wpisze informacje o stanowisku i czasie trwania limitu czasu. Gdy pracownik wpisze te informacje, stanowisko zostanie opublikowane w witrynie sieci Web Kariery.

  2. Po opublikowaniu informacji zainteresowane strony mogą przesłać swoje życiorysy. Po przesłaniu życiorysu jest on przechowywany w rekordzie połączonym z otwarciem zadania.

  3. Wnioskodawcy mogą przesyłać życiorysy do czasu wygaśnięcia limitu czasu lub ktoś z działu contoso HR jawnie decyduje się usunąć delegowanie, zatrzymując proces.

Projekty w przykładzie

W poniższej tabeli przedstawiono projekty w przykładowym rozwiązaniu.

Projekt opis
ContosoHR Zawiera kontrakty danych, obiekty biznesowe i klasy repozytorium.
ZatrudnianieRequestService Zawiera definicję przepływu pracy Procesu zatrudniania żądań.

Ten projekt jest implementowany jako aplikacja konsolowa, która samodzielnie hostuje przepływ pracy (plik xaml) jako usługę.
ResumeRequestService Usługa przepływu pracy, która zbiera życiorysy od kandydatów do momentu wygaśnięcia limitu czasu lub ktoś zdecyduje, że proces musi zostać zatrzymany.

Ten projekt jest implementowany jako deklaratywna usługa przepływu pracy (xamlx).
Usługa organizacji Usługa, która uwidacznia informacje organizacyjne (pracownicy, stanowiska, typy stanowisk i działy). Tę usługę można traktować jako moduł Organizacja firmy planu zasobów przedsiębiorstwa (ERP).

Ten projekt jest implementowany jako aplikacja konsolowa, która uwidacznia usługę Windows Communication Foundation (WCF).
Usługa skrzynki odbiorczej Skrzynka odbiorcza zawierająca zadania umożliwiające podejmowanie działań dla pracowników.

Ten projekt jest implementowany jako aplikacja konsolowa, która uwidacznia usługę WCF.
InternalClient Aplikacja internetowa do interakcji z procesem. Użytkownicy mogą uruchamiać, uczestniczyć i wyświetlać swoje przepływy pracy HiringProcess. Za pomocą tej aplikacji mogą również uruchamiać i monitorować procesy ResumeRequest.

Ta witryna jest implementowana jako wewnętrzna w intranecie firmy Contoso. Ten projekt jest implementowany jako witryna sieci Web ASP.NET.
KarieraWebSite Zewnętrzna witryna sieci Web, która uwidacznia otwarte pozycje w firmie Contoso. Każdy potencjalny kandydat może przejść do tej witryny i przesłać życiorys.

Podsumowanie funkcji

W poniższej tabeli opisano sposób użycia każdej funkcji w tym przykładzie.

Funkcja opis Project
Schemat blokowy Proces biznesowy jest reprezentowany jako schemat blokowy . Ten opis schematu blokowego reprezentuje proces w taki sam sposób, w jaki firma narysowała ją w tablicy. ZatrudnianieRequestService
Usługi przepływu pracy Schemat blokowy z definicją procesu jest hostowany w usłudze (w tym przykładzie usługa jest hostowana w aplikacji konsolowej). ZatrudnianieRequestService
Działania związane z obsługą komunikatów Schemat blokowy używa działań obsługi komunikatów na dwa sposoby:

— Aby uzyskać informacje od użytkownika (aby otrzymywać decyzje i powiązane informacje w każdym kroku zatwierdzania).
- Aby wchodzić w interakcje z innymi istniejącymi usługami (InboxService i OrgDataService, używane za pośrednictwem odwołań do usług).
ZatrudnianieRequestService
Korelacja oparta na zawartości Komunikaty zatwierdzenia są skorelowane z właściwością ID żądania zatrudniania:

— Po uruchomieniu procesu dojście korelacji jest inicjowane przy użyciu identyfikatora żądania.
— Przychodzące komunikaty zatwierdzenia są skorelowane z ich identyfikatorem (pierwszy parametr każdego komunikatu zatwierdzenia jest identyfikatorem żądania).
HiringRequestService / ResumeRequestService
Działania niestandardowe (deklaratywne i oparte na kodzie) W tym przykładzie istnieje kilka działań niestandardowych:

- SaveActionTracking: to działanie emituje niestandardowe TrackingRecord (przy użyciu polecenia Track). To działanie zostało utworzone przy użyciu kodu imperatywnego rozszerzającego NativeActivity.
- GetEmployeesByPositionTypes: To działanie odbiera listę identyfikatorów typu pozycji i zwraca listę osób, które mają to stanowisko w firmie Contoso. To działanie zostało autoryzowane deklaratywnie (przy użyciu projektanta działań).
- SaveHiringRequestInfo: to działanie zapisuje informacje o HiringRequest obiekcie (przy użyciu polecenia HiringRequestRepository.Save). To działanie zostało utworzone przy użyciu kodu imperatywnego rozszerzającego CodeActivity.
ZatrudnianieRequestService
Zapewniana przez system trwałość programu SQL Server Wystąpienie WorkflowServiceHost hostujące definicję procesu schematu blokowego jest skonfigurowane do korzystania z trwałości programu SQL Server dostarczonego przez system. HiringRequestService / ResumeRequestService
Niestandardowe śledzenie Przykład zawiera niestandardowego uczestnika śledzenia, który zapisuje historię elementu HiringRequestProcess (rejestruje, jaką akcję wykonano, przez kogo i kiedy). Kod źródłowy znajduje się w folderze Tracking w obszarze HiringRequestService. ZatrudnianieRequestService
Śledzenie ETW Śledzenie ETW dostarczone przez system jest skonfigurowane w pliku App.config w usłudze HiringRequestService. ZatrudnianieRequestService
Kompozycja działań Definicja procesu używa wolnego składu Activityelementu . Schemat blokowy zawiera kilka działań sekwencyjnych i równoległych, które jednocześnie zawierają inne działania (itd.). ZatrudnianieRequestService
Działania równoległe - ParallelForEach<T> służy do rejestrowania się w skrzynce odbiorczej dyrektorów generalnych i menedżerów KADR równolegle (oczekiwanie na krok zatwierdzenia dwóch menedżerów kadr).
- Parallel Służy do wykonywania niektórych zadań oczyszczania w krokach Ukończone i Odrzucone
ZatrudnianieRequestService
Anulowanie modelu Schemat blokowy używa CancellationScope metody do tworzenia zachowania anulowania (w tym przypadku wykonuje czyszczenie). ZatrudnianieRequestService
Uczestnik trwałości klienta HiringRequestPersistenceParticipant Zapisuje dane ze zmiennej przepływu pracy do tabeli przechowywanej w bazie danych Contoso HR. ZatrudnianieRequestService
Usługi przepływu pracy ResumeRequestService jest implementowany przy użyciu usług przepływu pracy. Informacje o definicji przepływu pracy i usłudze znajdują się w pliku ResumeRequestService.xamlx. Usługa jest skonfigurowana do używania trwałości i śledzenia. ResumeRequestService
Trwałe czasomierze ResumeRequestService używa trwałych czasomierzy do zdefiniowania czasu trwania delegowania zadań (po wygaśnięciu limitu czasu delegowanie zadania jest zamykane). ResumeRequestService
Transakcje TransactionScope służy do zapewnienia spójności danych w ramach wykonywania kilku działań (po odebraniu nowego wznawiania). ResumeRequestService
Transakcje Niestandardowy uczestnik trwałości () i uczestnik śledzenia niestandardowego (HiringRequestPersistenceParticipantHistoryFileTrackingParticipant) używają tej samej transakcji. ZatrudnianieRequestService
Korzystanie z platformy WF w aplikacjach ASP.NET. Przepływy pracy są dostępne z dwóch aplikacji ASP.NET. InternalClient/CareersWebSite

Magazyn danych

Dane są przechowywane w bazie danych programu SQL Server o nazwie ContosoHR (skrypt tworzenia tej bazy danych znajduje się w folderze DbSetup ). Wystąpienia przepływu pracy są przechowywane w bazie danych programu SQL Server o nazwie InstanceStore (skrypty tworzenia magazynu wystąpień są częścią dystrybucji programu .NET Framework 4.6.1).

Obie bazy danych są tworzone przez uruchomienie skryptu Setup.cmd z poziomu wiersza polecenia dewelopera dla programu Visual Studio.

Uruchamianie przykładowej aplikacji

Aby utworzyć bazy danych

  1. Otwórz wiersz polecenia dla deweloperów dla programu Visual Studio.

  2. Przejdź do folderu przykładów.

  3. Uruchom Setup.cmd.

  4. Sprawdź, czy dwie bazy danych ContosoHR i InstanceStore zostały utworzone w programie SQL Express.

Aby skonfigurować rozwiązanie do wykonania

  1. Uruchom program Visual Studio jako administrator. Otwórz HiringRequest.sln.

  2. Kliknij rozwiązanie prawym przyciskiem myszy w Eksplorator rozwiązań i wybierz pozycję Właściwości.

  3. Wybierz opcję Wiele projektów startowych i ustaw parametr CareersWebSite, InternalClient, HiringRequestService i ResumeRequestService na Start. Pozostaw wartości ContosoHR, InboxService i OrgService jako Brak.

  4. Skompiluj rozwiązanie, naciskając klawisze CTRL+SHIFT+B. Sprawdź, czy kompilacja zakończyła się pomyślnie.

Aby uruchomić rozwiązanie

  1. Po skompilowaniu rozwiązania naciśnij klawisze CTRL+F5, aby uruchomić bez debugowania. Sprawdź, czy wszystkie usługi zostały uruchomione.

  2. Kliknij prawym przyciskiem myszy element InternalClient w rozwiązaniu, a następnie wybierz pozycję Widok w przeglądarce. Zostanie wyświetlona domyślna strona.InternalClient Upewnij się, że usługi są uruchomione, a następnie kliknij link.

  3. Zostanie wyświetlony moduł HiringRequest . Możesz postępować zgodnie ze scenariuszem opisanym tutaj.

  4. Po zakończeniu HiringRequest możesz uruchomić element ResumeRequest. Możesz postępować zgodnie ze scenariuszem opisanym tutaj.

  5. Po opublikowaniu ResumeRequest pliku jest ona dostępna w publicznej witrynie sieci Web (witryna sieci Web Contoso Careers). Aby wyświetlić delegowanie pracy (i ubiegać się o stanowisko), przejdź do witryny sieci Web Kariery.

  6. Kliknij prawym przyciskiem myszy pozycję CareersWebSite w rozwiązaniu i wybierz pozycję Wyświetl w przeglądarce.

  7. Wróć do elementu InternalClient , klikając prawym przyciskiem myszy element InternalClient w rozwiązaniu i wybierając pozycję Widok w przeglądarce.

  8. Przejdź do sekcji JobPostings (ZadaniaPostings), klikając link Job Postings (Delegowanie zadań) w górnym menu skrzynki odbiorczej. Możesz postępować zgodnie ze scenariuszem opisanym tutaj.

Scenariusze

Wniosek o zatrudnienie

  1. Michael Alexander (inżynier oprogramowania) chce poprosić o nowe stanowisko w zakresie zatrudniania inżyniera oprogramowania w teście (SDET) w dziale inżynierii, który ma co najmniej 3 lata doświadczenia w języku C#.

  2. Po utworzeniu żądanie pojawia się w skrzynce odbiorczej Michaela (kliknij przycisk Odśwież , jeśli nie widzisz żądania) oczekując na zatwierdzenie Petera Brehma, który jest menedżerem Michaela.

  3. Peter chce działać na prośbę Michaela. Uważa, że pozycja wymaga 5 lat doświadczenia c# zamiast 3, więc wysyła swoje komentarze z powrotem do przeglądu.

  4. Michael widzi wiadomość w skrzynce odbiorczej od swojego menedżera i chce działać. Michael widzi historię wniosku o stanowisko i zgadza się z Peterem. Michael modyfikuje opis, aby wymagać 5 lat doświadczenia w języku C# i akceptuje modyfikację.

  5. Peter działa na zmodyfikowany wniosek Michaela i akceptuje go. Żądanie musi teraz zostać zatwierdzone przez dyrektora ds. inżynierii, Tsvi Reiter.

  6. Tsvi Reiter chce przyspieszyć wniosek, więc stawia w komentarzu, aby powiedzieć, że wniosek jest pilny i akceptuje go.

  7. Wniosek musi teraz zostać zatwierdzony przez dwóch menedżerów KADR lub dyrektora generalnego. Dyrektor generalny, Brian Richard Goldstein, widzi pilne żądanie Tsvi. Działa na wniosek, akceptując go, przekazując w ten sposób zatwierdzenie przez dwóch menedżerów KADR.

  8. Wniosek jest usuwany ze skrzynki odbiorczej Michaela i rozpoczął się proces zatrudniania SDET.

Rozpocznij żądanie wznawiania

  1. Teraz pozycja zadania czeka na opublikowanie w zewnętrznej witrynie sieci Web, w której można zastosować osoby (możesz ją zobaczyć, klikając link Delegowanie zadań). Obecnie stanowisko pracuje z przedstawicielem działu kadr, który jest odpowiedzialny za finalizowanie stanowiska pracy i delegowanie go.

  2. Dział kadr chce edytować to stanowisko (klikając link Edytuj), ustawiając limit czasu 60 minut (w rzeczywistym życiu może to być dni lub tygodnie). Limit czasu umożliwia odciążenie pozycji zadania z zewnętrznej witryny sieci Web zgodnie z określonym czasem.

  3. Po zapisaniu edytowanego stanowiska zadania zostanie wyświetlona na karcie Życiorysy odbierania (odśwież stronę sieci Web, aby wyświetlić nowe stanowisko zadania).

Zbieranie życiorysów

  1. Pozycja zadania powinna być wyświetlana w zewnętrznej witrynie sieci Web. Jako osoba zainteresowana ubieganiem się o pracę możesz ubiegać się o to stanowisko i przesłać swoje życiorysy.

  2. Jeśli wrócisz do usługi Listy postów zadań, możesz "wyświetlić życiorysy", które zostały zebrane do tej pory.

  3. Dział kadr może również przestać zbierać życiorysy (na przykład po zidentyfikowaniu odpowiedniego kandydata).

Rozwiązywanie problemów

  1. Upewnij się, że używasz programu Visual Studio z uprawnieniami administratora.

  2. Jeśli kompilacja rozwiązania nie powiedzie się, sprawdź następujące kwestie:

    • Odwołanie do ContosoHR elementu nie brakuje w projektach InternalClient lub CareersWebSite .
  3. Jeśli wykonanie rozwiązania nie powiedzie się, sprawdź następujące kwestie:

    1. Wszystkie usługi są uruchomione.

    2. Odwołania do usługi są aktualizowane.

      1. Otwórz folder App_WebReferences

      2. Kliknij prawym przyciskiem myszy pozycję Contoso i wybierz polecenie Aktualizuj odwołania do sieci Web/usługi.

      3. Skompiluj rozwiązanie, naciskając klawisze CTRL+SHIFT+B w programie Visual Studio.

Odinstalowywanie

  1. Usuń magazyn wystąpień programu SQL Server, uruchamiając Cleanup.bat znajdującą się w folderze DbSetup.

  2. Usuń kod źródłowy na dysku twardym.