Dela via


Anställningsprocess

Exemplet HiringProcess visar hur du implementerar en affärsprocess med hjälp av meddelandeaktiviteter och två arbetsflöden som hanteras som arbetsflödestjänster. Dessa arbetsflöden är en del av IT-infrastrukturen i ett fiktivt företag som heter Contoso, Inc.

Arbetsflödesprocessen HiringRequest (implementerad som ) Flowchartber om auktorisering från flera chefer i organisationen. För att uppnå det här målet använder arbetsflödet andra befintliga tjänster i organisationen (i vårt fall en inkorgstjänst och en organisationsdatatjänst som implementeras som vanliga WCF-tjänster (Windows Communication Foundation).

Arbetsflödet ResumeRequest (implementerat som en Sequence) publicerar en jobbpublicering på Contosos webbplats för externa karriärer och hanterar förvärv av meritförteckningar. En jobbpublicering är tillgänglig på den externa webbplatsen under en fast tidsperiod (tills tidsgränsen går ut) eller tills en anställd från Contoso bestämmer sig för att ta bort den.

Det här exemplet visar följande funktioner i .NET Framework 4.6.1:

  • Flowchart och Sequence arbetsflöden för modellering av affärsprocesser.

  • Arbetsflödestjänster.

  • Meddelandeaktiviteter.

  • Innehållsbaserad korrelation.

  • Anpassade aktiviteter (deklarativa och kodbaserade).

  • Systembaserad SQL Server-beständighet.

  • Anpassad PersistenceParticipant.

  • Anpassad spårning.

  • Spårning av händelsespårning för Windows (ETW).

  • Sammansättningen av aktiviteter.

  • Parallel Aktiviteter.

  • CancellationScope Aktivitet.

  • Varaktiga timers (Delay aktivitet).

  • Transaktioner.

  • Mer än ett arbetsflöde i samma lösning.

Beskrivning av processen

Contoso, Inc. vill ha nära kontroll över personalstyrkan på var och en av dess avdelningar. När en anställd vill starta en ny anställningsprocess måste de därför genomgå ett godkännande av en anställningsbegäran innan rekryteringen faktiskt kan ske. Den här processen kallas för begäran om anställningsprocess (definieras i projektet HiringRequestService) och består av följande steg:

  1. En anställd (beställaren) startar anställningsprocessens begäran.

  2. Beställarens chef måste godkänna begäran:

    1. Chefen kan avvisa begäran.

    2. Chefen kan returnera begäran till beställaren för ytterligare information:

      1. Beställaren granskar och skickar tillbaka begäran till chefen.
    3. Chefen kan godkänna.

  3. När beställarens chef har godkänt det måste avdelningsägaren godkänna begäran:

    1. Avdelningsägaren kan avvisa.

    2. Avdelningsägaren kan godkänna.

  4. När avdelningsägaren har godkänt kräver processen godkännande av 2 HR-chefer eller VD:

    1. Processen kan övergå till det godkända eller avvisade tillståndet.

    2. Om processen godkänns startas en ny instans av ResumeRequest arbetsflödet (ResumeRequest är länkad till HiringRequest.csproj via en tjänstreferens.)

När cheferna godkänner anställningen av en ny anställd måste HR hitta rätt kandidat. Den här processen utförs av det andra arbetsflödet (ResumeRequestdefinierat i ResumeRequestService.csproj). Det här arbetsflödet definierar processen för att skicka in en jobbpublicering med en karriärmöjlighet till Contosos externa webbplats Karriärer, tar emot meritförteckningar från sökande och övervakar tillståndet för jobbpubliceringen. Positioner är tillgängliga under en fast tidsperiod (tills en tid upphör att gälla) eller tills en anställd från Contoso bestämmer sig för att ta bort den. Arbetsflödet ResumeRequest består av följande steg:

  1. En anställd från Contoso skriver in information om positionen och en tidsgräns. När medarbetaren skriver in den här informationen publiceras tjänsten på webbplatsen Karriärer.

  2. När informationen har publicerats kan berörda parter lämna in sina meritförteckningar. När ett CV skickas lagras det i en post som är länkad till jobböppningen.

  3. Sökande kan skicka meritförteckningar tills tidsgränsen upphör att gälla eller om någon från Contosos HR-avdelning uttryckligen beslutar att ta bort inlägget genom att stoppa processen.

Projekt i exemplet

I följande tabell visas projekten i exempellösningen.

Projekt beskrivning
ContosoHR Innehåller datakontrakt, affärsobjekt och lagringsplatsklasser.
HiringRequestService Innehåller definitionen av arbetsflödet för processen för anställningsbegäran.

Det här projektet implementeras som ett konsolprogram som själv är värd för arbetsflödet (xaml-filen) som en tjänst.
ResumeRequestService En arbetsflödestjänst som samlar in återupptas från kandidater tills tidsgränsen går ut eller någon bestämmer sig för att processen måste stoppas.

Det här projektet implementeras som en deklarativ arbetsflödestjänst (xamlx).
OrgService En tjänst som exponerar organisationsinformation (anställda, befattningar, PositionTypes och avdelningar). Du kan se den här tjänsten som modulen Företagsorganisation i en affärsresursplan (ERP).

Det här projektet implementeras som ett konsolprogram som exponerar en WCF-tjänst (Windows Communication Foundation).
InboxService En inkorg som innehåller åtgärdsbara uppgifter för anställda.

Det här projektet implementeras som ett konsolprogram som exponerar en WCF-tjänst.
InternalClient Ett webbprogram för att interagera med processen. Användare kan starta, delta och visa sina HiringProcess-arbetsflöden. Med det här programmet kan de också starta och övervaka ResumeRequest-processer.

Den här webbplatsen implementeras för att vara intern i Contosos intranät. Det här projektet implementeras som en ASP.NET webbplats.
CareersWebSite En extern webbplats som exponerar de öppna positionerna i Contoso. Alla potentiella kandidater kan navigera till den här webbplatsen och skicka ett CV.

Funktionssammanfattning

I följande tabell beskrivs hur varje funktion används i det här exemplet.

Funktion beskrivning Project
Flödesschema Affärsprocessen representeras som ett flödesschema . Den här flödesschemabeskrivningen representerar processen på samma sätt som ett företag skulle ha ritat den i en whiteboard. HiringRequestService
Arbetsflödestjänster Flödesschemat med processdefinitionen finns i en tjänst (i det här exemplet finns tjänsten i ett konsolprogram). HiringRequestService
Meddelandeaktiviteter Flödesschemat använder meddelandeaktiviteter på två sätt:

- För att få information från användaren (för att ta emot beslut och relaterad information i varje godkännandesteg).
– Interagera med andra befintliga tjänster (InboxService och OrgDataService, som används via tjänstreferenser).
HiringRequestService
Innehållsbaserad korrelation Godkännandemeddelanden korrelerar på ID-egenskapen för anställningsbegäran:

– När en process startas initieras korrelationshandtaget med ID:t för begäran.
– Inkommande godkännandemeddelanden korrelerar på deras ID (den första parametern för varje godkännandemeddelande är ID för begäran).
HiringRequestService/ResumeRequestService
Anpassade aktiviteter (deklarativa och kodbaserade) Det finns flera anpassade aktiviteter i det här exemplet:

- SaveActionTracking: Den här aktiviteten genererar en anpassad TrackingRecord (med ).Track Den här aktiviteten har skapats med imperativ kod som utökar NativeActivity.
- GetEmployeesByPositionTypes: Den här aktiviteten tar emot en lista över positionstyps-ID:er och returnerar en lista över personer som har den positionen i Contoso. Den här aktiviteten har skapats deklarativt (med hjälp av aktivitetsdesignern).
- SaveHiringRequestInfo: Den här aktiviteten sparar information om en HiringRequest (med ).HiringRequestRepository.Save Den här aktiviteten har skapats med imperativ kod som utökar CodeActivity.
HiringRequestService
Systembaserad SQL Server-beständighet Den WorkflowServiceHost instans som är värd för flödesschemaprocessdefinitionen är konfigurerad för att använda den systemspecifika SQL Server-beständigheten. HiringRequestService/ResumeRequestService
Anpassad spårning Exemplet innehåller en anpassad spårningsdeltagare som sparar historiken för en HiringRequestProcess (den registrerar vilken åtgärd som har utförts, av vem och när). Källkoden finns i mappen Tracking i HiringRequestService. HiringRequestService
ETW-spårning Systembaserad ETW-spårning konfigureras i filen App.config i tjänsten HiringRequestService. HiringRequestService
Sammansättningen av aktiviteter Processdefinitionen använder den kostnadsfria sammansättningen av Activity. Flödesschemat innehåller flera sekvens- och parallella aktiviteter som samtidigt innehåller andra aktiviteter (och så vidare). HiringRequestService
Parallella aktiviteter - ParallelForEach<T> används för att registrera sig parallellt i inkorgen för VD och HR-chefer (väntar på två hr-chefers godkännandesteg).
- Parallel används för att utföra vissa rensningsuppgifter i stegen Slutförd och Avvisad
HiringRequestService
Modellavbokning Flödesschemat använder CancellationScope för att skapa annulleringsbeteende (i det här fallet rensar det upp.) HiringRequestService
Kundpersistencedeltagare HiringRequestPersistenceParticipant sparar data från en arbetsflödesvariabel till en tabell som lagras i Contoso HR-databasen. HiringRequestService
Tjänster för arbetsflöden ResumeRequestService implementeras med hjälp av arbetsflödestjänster. Arbetsflödesdefinition och tjänstinformation finns i ResumeRequestService.xamlx. Tjänsten är konfigurerad för att använda beständighet och spårning. ResumeRequestService
Varaktiga timers ResumeRequestService använder varaktiga timers för att definiera varaktigheten för en jobbbokföring (när en tidsgräns upphör att gälla stängs jobbbokföringen). ResumeRequestService
Transaktioner TransactionScope används för att säkerställa konsekvens för data i körningen av flera aktiviteter (när ett nytt CV tas emot). ResumeRequestService
Transaktioner Den anpassade beständighetsdeltagaren (HiringRequestPersistenceParticipant) och den anpassade spårningsdeltagaren (HistoryFileTrackingParticipant) använder samma transaktion. HiringRequestService
Använda WF i ASP.NET program. Arbetsflöden nås från två ASP.NET program. InternalClient/CareersWebSite

Datalagring

Data lagras i en SQL Server-databas med namnet ContosoHR (skriptet för att skapa den här databasen finns i DbSetup mappen). Arbetsflödesinstanser lagras i en SQL Server-databas som heter InstanceStore (skripten för att skapa instansarkivet är en del av .NET Framework 4.6.1-distributionen).

Båda databaserna skapas genom att köra Setup.cmd skript från en kommandotolk för utvecklare för Visual Studio.

Köra exemplet

Så här skapar du databaserna

  1. Öppna en kommandotolk för utvecklare för Visual Studio.

  2. Navigera till exempelmappen.

  3. Kör Setup.cmd.

  4. Kontrollera att de två databaserna ContosoHR och InstanceStore skapades i SQL Express.

Så här konfigurerar du lösningen för körning

  1. Kör Visual Studio som administratör. Öppna HiringRequest.sln.

  2. Högerklicka på lösningen i Solution Explorer och välj Egenskaper.

  3. Välj alternativet Flera startprojekt och ange CareersWebSite, InternalClient, HiringRequestService och ResumeRequestService till Start. Lämna ContosoHR, InboxService och OrgService som Ingen.

  4. Skapa lösningen genom att trycka på CTRL+SKIFT+B. Kontrollera att bygget lyckades.

Så här kör du lösningen

  1. När lösningen har skapats trycker du på CTRL+F5 för att köra utan felsökning. Kontrollera att alla tjänster har startats.

  2. Högerklicka på InternalClient i lösningen och välj sedan Visa i webbläsare. Standardsidan för InternalClient visas. Kontrollera att tjänsterna körs och klicka på länken.

  3. Modulen HiringRequest visas. Du kan följa scenariot som beskrivs här.

  4. När är HiringRequest klar kan du starta ResumeRequest. Du kan följa scenariot som beskrivs här.

  5. När den ResumeRequest publiceras är den tillgänglig på den offentliga webbplatsen (Contoso Careers webbplats). Om du vill se jobbbokföringen (och ansöka om tjänsten) går du till webbplatsen Karriärer.

  6. Högerklicka på CareersWebSite i lösningen och välj Visa i webbläsare.

  7. Gå tillbaka till genom att InternalClienthögerklicka på InternalClient i lösningen och välja Visa i webbläsare.

  8. Gå till avsnittet JobPostings genom att klicka på länken Jobbposter i den översta menyn i inkorgen. Du kan följa scenariot som beskrivs här.

Scenarier

Anställningsförfrågan

  1. Michael Alexander (programvaruingenjör) vill begära en ny tjänst för att anställa en programvaruingenjör i test (SDET) på teknikavdelningen som har minst 3 års erfarenhet av C#.

  2. Efter att ha skapats visas begäran i Michaels inkorg (klicka på Uppdatera om du inte ser begäran) som väntar på Peter Brehms godkännande, som är Michaels chef.

  3. Peter vill agera på Michaels begäran. Han tror att positionen kräver 5 års C#-erfarenhet istället för 3, så han skickar tillbaka sina kommentarer för granskning.

  4. Michael ser ett meddelande i sin inkorg från sin chef och vill agera. Michael ser historien om position begäran och håller med Peter. Michael ändrar beskrivningen för att kräva 5 års C#-erfarenhet och accepterar ändringen.

  5. Peter agerar på Michaels ändrade begäran och accepterar den. Begäran måste nu godkännas av teknikchefen Tsvi Reiter.

  6. Tsvi Reiter vill påskynda begäran, så han lägger in en kommentar för att säga att begäran är brådskande och accepterar den.

  7. Begäran måste nu godkännas av två HR-chefer eller VD. Vd:n Brian Richard Goldstein ser Tsvi:s brådskande begäran. Han agerar på begäran genom att godkänna den, vilket kringgår godkännandet av två HR-chefer.

  8. Begäran tas bort från Michaels inkorg och processen med att anställa en SDET har nu påbörjats.

Starta återuppta begäran

  1. Nu väntar jobbpositionen på att publiceras på en extern webbplats där personer kan ansöka (du kan se att den klickar på länken Jobbposter ). För närvarande sitter jobbpositionen hos en HR-representant som ansvarar för att slutföra anställningen och publicera den.

  2. HR vill redigera den här jobbpositionen (genom att klicka på länken Redigera ) genom att ange en tidsgräns på 60 minuter (i verkligheten kan det vara dagar eller veckor). Tidsgränsen gör att jobbpositionen kan tas bort från den externa webbplatsen enligt den angivna tiden.

  3. När du har sparat den redigerade jobbpositionen visas den på fliken Ta emot meritförteckningar (uppdatera webbsidan för att se den nya jobbpositionen).

Samla in meritförteckningar

  1. Jobbpositionen ska visas på den externa webbplatsen. Som person som är intresserad av att söka jobbet kan du ansöka om den här tjänsten och skicka in ditt CV.

  2. Om du går tillbaka till tjänsten Lista över jobbannonser kan du "visa meritförteckningar" som har samlats in hittills.

  3. HR kan också sluta samla in meritförteckningar (till exempel när rätt kandidat har identifierats).

Felsökning

  1. Se till att du kör Visual Studio med administratörsbehörighet.

  2. Om lösningen inte kan byggas kontrollerar du följande:

    • Referensen till ContosoHR saknas inte i InternalClient projekten eller CareersWebSite .
  3. Om lösningen inte kan köras kontrollerar du följande:

    1. Alla tjänster körs.

    2. Tjänstreferenserna uppdateras.

      1. Öppna mappen App_WebReferences

      2. Högerklicka på Contoso och välj Uppdatera webb-/tjänstreferenser.

      3. Återskapa lösningen genom att trycka på CTRL+SKIFT+B i Visual Studio.

Avinstallera

  1. Ta bort SQL Server-instansarkivet genom att köra Cleanup.bat, som finns i mappen DbSetup.

  2. Ta bort källkoden från hårddisken.