Condividi tramite


Processo di assunzione

L'esempio HiringProcess illustra come implementare un processo aziendale usando le attività di messaggistica e due flussi di lavoro ospitati come servizi del flusso di lavoro. Questi flussi di lavoro fanno parte dell'infrastruttura IT di una società fittizia denominata Contoso, Inc.

Il HiringRequest processo del flusso di lavoro (implementato come Flowchart) richiede l'autorizzazione da diversi responsabili dell'organizzazione. Per raggiungere questo obiettivo, il flusso di lavoro usa altri servizi esistenti nell'organizzazione (in questo caso, un servizio posta in arrivo e un servizio dati dell'organizzazione implementato come servizi WCF (Windows Communication Foundation) semplici.

Il ResumeRequest flusso di lavoro (implementato come Sequence) pubblica un post di lavoro nel sito Web delle carriere esterne di Contoso e gestisce l'acquisizione dei curriculum. Un annuncio di lavoro è disponibile sul sito Web esterno per un periodo di tempo fisso (fino alla scadenza di un timeout) o fino a quando un dipendente di Contoso decide di rimuoverlo.

Questo esempio illustra le funzionalità seguenti di .NET Framework 4.6.1:

  • Flowchart e Sequence flussi di lavoro per la modellazione dei processi aziendali.

  • Servizi flusso di lavoro.

  • Attività di messaggistica.

  • Correlazione basata sul contenuto.

  • Attività personalizzate (dichiarative e basate su codice).

  • Persistenza di SQL Server fornita dal sistema.

  • Personalizzato PersistenceParticipant.

  • Rilevamento personalizzato.

  • Tracciamento eventi per Windows (ETW).

  • Composizione delle attività.

  • Parallel Attività.

  • CancellationScope attività.

  • Timer durevoli (attività Delay).

  • Transazioni.

  • Più flussi di lavoro nella stessa soluzione.

Descrizione del processo

Contoso, Inc. vuole avere un controllo stretto del personale in ognuno dei suoi reparti. Pertanto, ogni volta che un dipendente vuole avviare un nuovo processo di assunzione, deve passare attraverso un'approvazione del processo di richiesta di assunzione prima che il reclutamento possa effettivamente verificarsi. Questo processo è denominato richiesta di processo di assunzione (definito nel progetto HiringRequestService) ed è costituito dai passaggi seguenti:

  1. Un dipendente (richiedente) avvia la richiesta di processo di assunzione.

  2. Il responsabile del richiedente deve approvare la richiesta:

    1. Il responsabile può rifiutare la richiesta.

    2. Il responsabile può restituire la richiesta al richiedente per ulteriori informazioni:

      1. Il richiedente esamina e invia di nuovo la richiesta al responsabile.
    3. Il responsabile può approvare.

  3. Dopo l'approvazione del responsabile del richiedente, il proprietario del reparto deve approvare la richiesta:

    1. Il proprietario del reparto può rifiutare.

    2. Il proprietario del reparto può approvare.

  4. Dopo l'approvazione del proprietario del reparto, il processo richiede l'approvazione di 2 responsabili delle risorse umane o del CEO:

    1. Il processo può passare allo stato accettato o rifiutato.

    2. Se il processo è Accettato, viene avviata una nuova istanza del ResumeRequest flusso di lavoro (ResumeRequest collegata a HiringRequest.csproj tramite un riferimento al servizio).

Dopo che i responsabili approvano l'assunzione di un nuovo dipendente, le risorse umane devono trovare il candidato appropriato. Questo processo viene eseguito dal secondo flusso di lavoro (ResumeRequest, definito in ResumeRequestService.csproj). Questo flusso di lavoro definisce il processo di invio di un post di lavoro con un'opportunità di carriera al sito Web di Carriere esterne di Contoso, riceve i curriculum dai candidati e monitora lo stato della registrazione del lavoro. Le posizioni sono disponibili per un periodo di tempo fisso (fino alla scadenza di un periodo di tempo) o fino a quando un dipendente di Contoso decide di rimuoverlo. Il ResumeRequest flusso di lavoro è costituito dai passaggi seguenti:

  1. Un dipendente di Contoso digita le informazioni relative alla posizione e un intervallo di timeout. Dopo che il dipendente digita queste informazioni, la posizione viene pubblicata nel sito Web Carriere.

  2. Una volta pubblicate le informazioni, le parti interessate possono inviare i loro curriculum. Quando viene inviato un curriculum, viene archiviato in un record collegato all'annuncio di lavoro.

  3. I candidati possono inviare curriculum fino alla scadenza del timeout o fino a quando qualcuno del reparto risorse umane di Contoso decide esplicitamente di rimuovere l'annuncio interrompendo il processo.

Progetti nell'esempio

La tabella seguente illustra i progetti nella soluzione di esempio.

Progetto Descrizione
ContosoHR Contiene contratti di dati, oggetti aziendali e classi di repository.
HiringRequestService Contiene la definizione del flusso di lavoro del processo di richiesta di assunzione.

Questo progetto viene implementato come applicazione console che ospita automaticamente il flusso di lavoro (file xaml) come servizio.
ResumeRequestService Un servizio di flusso di lavoro che raccoglie i curriculum dai candidati fino alla scadenza del timeout o finché qualcuno decide che il processo deve essere interrotto.

Questo progetto viene implementato come servizio del flusso di lavoro dichiarativo (xamlx).
OrgService Servizio che espone le informazioni dell'organizzazione (Dipendenti, Posizioni, PositionType e Reparti). È possibile considerare questo servizio come il modulo Organizzazione aziendale di un piano di risorse organizzazione (ERP).

Questo progetto viene implementato come applicazione console che espone un servizio Windows Communication Foundation (WCF).
InboxService Una cartella posta in arrivo che contiene attività utilizzabili per i dipendenti.

Questo progetto viene implementato come applicazione console che espone un servizio WCF.
InternalClient Applicazione Web per interagire con il processo. Gli utenti possono avviare, partecipare e visualizzare i flussi di lavoro di assunzione. Usando questa applicazione, possono anche avviare e monitorare i processi ResumeRequest.

Questo sito viene implementato per essere interno alla intranet di Contoso. Questo progetto viene implementato come sito Web ASP.NET.
CarriereWebSite Sito Web esterno che mostra le posizioni aperte in Contoso. Qualsiasi potenziale candidato può passare a questo sito e inviare un curriculum.

Riepilogo delle funzionalità

Nella tabella seguente viene descritto il modo in cui ogni funzionalità viene usata in questo esempio.

Caratteristica / Funzionalità Descrizione Progetto
Diagramma di flusso Il processo aziendale è rappresentato come diagramma di flusso. Questa descrizione del diagramma di flusso rappresenta il processo nello stesso modo in cui un'azienda lo avrebbe disegnato in una lavagna. HiringRequestService
Servizi di flusso di lavoro Il diagramma di flusso con la definizione del processo è ospitato in un servizio (in questo esempio il servizio è ospitato in un'applicazione console). HiringRequestService
Attività di messaggistica Il diagramma di flusso usa le attività di messaggistica in due modi:

- Per ottenere informazioni dall'utente (per ricevere le decisioni e le informazioni correlate in ogni passaggio di approvazione).
- Per interagire con altri servizi esistenti (InboxService e OrgDataService, usati tramite i riferimenti al servizio).
HiringRequestService
Correlazione basata sul contenuto I messaggi di approvazione sono correlati alla proprietà ID della richiesta di assunzione:

- Quando viene avviato un processo, l'handle di correlazione viene inizializzato con l'ID della richiesta.
- I messaggi di approvazione in ingresso sono correlati al relativo ID (il primo parametro di ogni messaggio di approvazione è l'ID della richiesta).
HiringRequestService/ResumeRequestService
Attività personalizzate (dichiarative e basate su codice) In questo esempio sono disponibili diverse attività personalizzate:

- SaveActionTracking: questa attività genera un evento personalizzato TrackingRecord (usando Track). Questa attività è stata creata usando codice imperativo che estende NativeActivity.
- GetEmployeesByPositionTypes: questa attività riceve un elenco di ID dei tipi di posizione e restituisce un elenco di persone con tale posizione in Contoso. Questa attività è stata creata in modo dichiarativo (tramite ActivityDesigner).
- SaveHiringRequestInfo: questa attività salva le informazioni di un oggetto HiringRequest (utilizzando HiringRequestRepository.Save). Questa attività è stata creata usando codice imperativo che estende CodeActivity.
HiringRequestService
Persistenza di SQL Server fornita dal sistema L'istanza WorkflowServiceHost che ospita la definizione del processo diagramma di flusso è configurata per l'uso della persistenza di SQL Server fornita dal sistema. HiringRequestService/ResumeRequestService
Rilevamento personalizzato L'esempio include un partecipante di rilevamento personalizzato che salva la cronologia di un oggetto HiringRequestProcess (registra l'azione eseguita, da chi e quando). Il codice sorgente si trova nella cartella Tracking di HiringRequestService. HiringRequestService
Rilevamento ETW Il rilevamento ETW fornito dal sistema viene configurato nel file App.config nel servizio HiringRequestService. HiringRequestService
Composizione delle attività La definizione del processo usa la composizione libera di Activity. Il diagramma di flusso contiene diverse attività Sequence e Parallel che allo stesso tempo contengono altre attività (e così via). HiringRequestService
Attività parallele - ParallelForEach<T> viene usato per registrare nella Posta in arrivo del CEO e dei responsabili delle risorse umane in parallelo (in attesa dell'approvazione di due responsabili delle risorse umane).
- Parallel viene usato per eseguire alcune attività di pulizia nei passaggi Completati e Rifiutati
HiringRequestService
Annullamento del modello Il diagramma di flusso usa CancellationScope per creare un comportamento di annullamento (in questo caso esegue alcune operazioni di pulizia). HiringRequestService
Partecipante alla fidelizzazione del cliente HiringRequestPersistenceParticipant salva i dati da una variabile del flusso di lavoro in una tabella archiviata nel database delle risorse umane contoso. HiringRequestService
Servizi di flusso di lavoro ResumeRequestService viene implementato usando i servizi del flusso di lavoro. La definizione del flusso di lavoro e le informazioni sul servizio sono contenute in ResumeRequestService.xamlx. Il servizio è configurato per l'uso della persistenza e del rilevamento. ResumeRequestService
Temporizzatori durevoli ResumeRequestService utilizza timer durevoli per definire la durata di un annuncio di lavoro (una volta scaduto un timeout, l'annuncio di lavoro viene chiuso). ResumeRequestService
Transazioni TransactionScope viene usato per garantire la coerenza dei dati all'interno dell'esecuzione di diverse attività (quando viene ricevuto un nuovo curriculum). ResumeRequestService
Transazioni Il partecipante di persistenza personalizzato (HiringRequestPersistenceParticipant) e il partecipante di rilevamento personalizzato (HistoryFileTrackingParticipant) usano la stessa transazione. HiringRequestService
Uso di WF nelle applicazioni ASP.NET. È possibile accedere ai flussi di lavoro da due applicazioni ASP.NET. InternalClient/CareersWebSite

Archiviazione dati

I dati vengono archiviati in un database di SQL Server denominato ContosoHR (lo script per la creazione di questo database si trova nella DbSetup cartella ). Le istanze del flusso di lavoro vengono archiviate in un database di SQL Server denominato InstanceStore (gli script per la creazione dell'archivio di istanze fanno parte della distribuzione di .NET Framework 4.6.1).

Entrambi i database vengono creati eseguendo Setup.cmd script da un prompt dei comandi per gli sviluppatori per Visual Studio.

Esecuzione dell'esempio

Per creare i database

  1. Aprire un prompt dei comandi per gli sviluppatori per Visual Studio.

  2. Passare alla cartella dell'esempio.

  3. Eseguire Setup.cmd.

  4. Verificare che i due database ContosoHR e InstanceStore siano stati creati in SQL Express.

Per configurare la soluzione per l'esecuzione

  1. Eseguire Visual Studio come amministratore. Aprire HiringRequest.sln.

  2. Fare clic con il pulsante destro del mouse sulla soluzione in Esplora soluzioni e scegliere Proprietà.

  3. Selezionare l'opzione Progetti di avvio multipli e impostare CareersWebSite, InternalClient, HiringRequestService e ResumeRequestService su Start. Lasciare ContosoHR, InboxService e OrgService come Nessuno.

  4. Compilare la soluzione premendo CTRL+MAIUSC+B. Verificare che la compilazione sia riuscita.

Per eseguire la soluzione

  1. Dopo la compilazione della soluzione, premere CTRL+F5 per eseguire senza eseguire il debug. Verificare che tutti i servizi siano stati avviati.

  2. Fare clic con il pulsante destro del mouse su InternalClient nella soluzione e quindi scegliere Visualizza nel browser. Viene visualizzata la pagina predefinita per InternalClient . Verificare che i servizi siano in esecuzione e fare clic sul collegamento.

  3. Viene visualizzato il modulo HiringRequest . È possibile seguire lo scenario descritto qui.

  4. Una volta completato il HiringRequest, è possibile avviare il ResumeRequest. È possibile seguire lo scenario descritto qui.

  5. Quando l'oggetto ResumeRequest viene pubblicato, è disponibile nel sito Web pubblico (Contoso Careers Web Site). Per visualizzare l'annuncio di lavoro (e candidarsi per la posizione), andare al sito web delle carriere.

  6. Fare clic con il pulsante destro del mouse su CareersWebSite nella soluzione e scegliere Visualizza nel browser.

  7. Tornare a InternalClient facendo clic con il pulsante destro del mouse su InternalClient nella finestra della soluzione e selezionando Visualizza nel browser.

  8. Passare alla sezione JobPostings facendo clic sul collegamento Offerte di lavoro nel menu in alto nella casella di posta in arrivo. È possibile seguire lo scenario descritto qui.

Scenari

Richiesta di assunzione

  1. Michael Alexander (Software Engineer) vuole richiedere una nuova posizione per l'assunzione di un Software Engineer in Test (SDET) nel reparto Engineering che ha almeno 3 anni di esperienza in C#.

  2. Dopo la creazione, la richiesta viene visualizzata nella posta in arrivo di Michael (fare clic su Aggiorna se non viene visualizzata la richiesta) in attesa dell'approvazione di Peter Brehm, responsabile di Michael.

  3. Peter vuole agire sulla richiesta di Michael. Ritiene che la posizione richieda 5 anni di esperienza in C# invece di 3, quindi invia i commenti per la revisione.

  4. Michael vede un messaggio nella posta in arrivo dal suo manager e vuole agire. Michael vede la storia della richiesta di posizione e concorda con Peter. Michael modifica la descrizione per richiedere 5 anni di esperienza C# e accetta la modifica.

  5. Peter agisce sulla richiesta modificata di Michael e lo accetta. La richiesta deve ora essere approvata dal direttore di ingegneria, Tsvi Reiter.

  6. Tsvi Reiter vuole accelerare la richiesta, quindi inserisce un commento per dire che la richiesta è urgente e lo accetta.

  7. La richiesta deve ora essere approvata da due responsabili delle risorse umane o dal CEO. Il CEO, Brian Richard Goldstein, vede la richiesta urgente da parte di Tsvi. Agisce sulla richiesta accettandola, ignorando così l'approvazione da due responsabili delle risorse umane.

  8. La richiesta viene rimossa dalla posta in arrivo di Michael e il processo di assunzione di un SDET è iniziato.

Avvia richiesta di ripresa

  1. A questo punto, la posizione lavorativa è in attesa di essere pubblicata su un sito Web esterno dove le persone possono candidarsi (è possibile vederla facendo clic sul collegamento Annunci di lavoro). Attualmente, la posizione di lavoro è nelle mani di un rappresentante delle risorse umane responsabile della finalizzazione della posizione e della sua pubblicazione.

  2. Le Risorse Umane desiderano modificare questa posizione lavorativa (facendo clic sul collegamento Modifica) impostando un timeout di 60 minuti (nella vita reale, questo potrebbe significare giorni o settimane). Il timeout consente di rimuovere la posizione lavorativa dal sito Web esterno in conformità con il tempo specificato.

  3. Dopo aver salvato la posizione lavorativa modificata, questa viene visualizzata nella scheda Ricezione curriculum (aggiornare la pagina Web per vedere la nuova posizione lavorativa).

Raccolta di curriculum

  1. La posizione lavorativa dovrebbe essere visualizzata sul sito web esterno. In qualità di persona interessata a richiedere il lavoro, è possibile richiedere questa posizione e inviare il curriculum.

  2. Se torni al servizio Elenco annunci di lavoro, puoi "visualizzare i curriculum" raccolti finora.

  3. Le risorse umane possono anche interrompere la raccolta di curriculum (ad esempio, dopo che il candidato corretto è stato identificato).

Risoluzione dei problemi

  1. Assicurarsi di eseguire Visual Studio con privilegi di amministratore.

  2. Se la soluzione non riesce a compilare, verificare quanto segue:

    • Il riferimento a ContosoHR non manca nei progetti InternalClient o CareersWebSite.
  3. Se la soluzione non viene eseguita, verificare quanto segue:

    1. Tutti i servizi sono in esecuzione.

    2. I riferimenti al servizio vengono aggiornati.

      1. Aprire la cartella App_WebReferences

      2. Fare clic con il pulsante destro del mouse su Contoso e scegliere Aggiorna riferimenti Web/Servizio.

      3. Ricompilare la soluzione premendo CTRL+MAIUSC+B in Visual Studio.

Disinstallando

  1. Eliminare l'archivio di istanze di SQL Server eseguendo Cleanup.bat, che si trova nella cartella DbSetup.

  2. Eliminare il codice sorgente dal disco rigido.