共用方式為


招聘流程

HiringProcess 範例示範如何使用傳訊活動,並利用裝載為工作流程服務的兩個工作流程,來實作商務流程。 這些工作流程是虛構公司 Contoso, Inc. IT 基礎結構的一部分。

工作流程 HiringRequest(被實作為一個 Flowchart)會向組織中的數位經理尋求授權。 為了達成此目標,工作流程會使用組織中的其他現有服務(在我們的案例中為收件匣服務和實作為一般 Windows Communication Foundation (WCF) 服務的組織數據服務。

工作流程 ResumeRequest(以 Sequence 實現)會在 Contoso 的外部職業網站上發布工作職缺,並管理履歷資料的取得。 在外部網站上,工作職缺將張貼固定期間,直到超時期限到期或被 Contoso 員工移除為止。

此範例示範 .NET Framework 4.6.1 的下列功能:

  • FlowchartSequence 建立商務程式模型化的工作流程。

  • 工作流程服務。

  • 傳訊活動。

  • 以內容為基礎的相互關聯。

  • 自訂活動(宣告式和程序代碼型)。

  • 系統提供的 SQL Server 持久性。

  • 自訂 PersistenceParticipant

  • 自訂追蹤。

  • Windows 事件追蹤 (ETW) 追蹤。

  • 活動組合。

  • Parallel 活動。

  • CancellationScope 活動。

  • 長期定時器(Delay 活動)。

  • Transactions。

  • 相同解決方案中的多個工作流程。

流程的描述

Contoso, Inc. 希望密切控制其各部門的主管人數。 因此,每當任何員工想要開始新的招聘程式時,他們都必須經過招聘要求程式核准,才能實際進行招聘。 此程式稱為招聘程式要求(定義於 HiringRequestService 專案中),並包含下列步驟:

  1. 由員工(申請人)發起招聘流程申請。

  2. 要求者的管理員必須核准要求:

    1. 管理員可以拒絕要求。

    2. 管理員可以將要求傳回給要求者以取得其他資訊:

      1. 要求者會檢閱要求,並將要求傳回給管理員。
    3. 主管可以核准。

  3. 要求者經理核准之後,部門擁有者必須核准要求:

    1. 部門擁有者可以拒絕。

    2. 部門擁有者可以核准。

  4. 部門擁有者核准之後,此程式需要 2 名人力資源經理或 CEO 的核准:

    1. 此過程可以轉換到已接受或拒絕的狀態。

    2. 如果流程已接受,則會啟動新的工作流程實例ResumeRequestResumeRequest會透過服務參考連結至 HiringRequest.csproj)。

一旦經理核准新員工的僱用,HR 必須找到適當的候選人。 此程式是由第二個工作流程執行(ResumeRequest在 ResumeRequestService.csproj 中定義)。 此工作流程會定義向 Contoso 的外部職涯網站提交工作貼文的程式、接收申請人的履歷,以及監視職位張貼的狀態。 職位適用於固定時段(直到時間到期),或 Contoso 的員工決定將其移除為止。 工作流程 ResumeRequest 包含下列步驟:

  1. Contoso 的員工會輸入職位的相關信息和逾時期間。 當員工輸入這項資訊之後,職位就會張貼在職涯網站中。

  2. 一旦發佈資訊,有興趣的人士可以提交他們的履歷。 提交履歷時,它會儲存在連結到職缺的記錄中。

  3. 申請人可以提交履歷,直到時間期限到達,或者 Contoso 人力資源部門的某人明確決定通過結束程序來移除張貼。

範例中的專案

下表顯示範例解決方案中的專案。

專案 說明
ContosoHR 包含數據合約、商務物件和存放庫類別。
HiringRequestService 包含雇用申請工作流程的定義。

此專案實作為一個控制台應用程式,自我裝載工作流程(xaml 檔案)作為服務。
ResumeRequestService 從候選專案收集履歷的工作流程服務,直到逾時到期,或有人決定必須停止此程式。

此項目會實作為宣告式工作流程服務 (xamlx)。
OrgService 提供組織資訊的服務(員工、職位、職位類型和部門)。 您可以將此服務視為企業資源計劃 (ERP) 的公司組織模組。

此項目會實作為公開 Windows Communication Foundation (WCF) 服務的控制台應用程式。
收件匣服務 包含可讓員工執行任務的收件匣。

此項目會實作為公開 WCF 服務的控制台應用程式。
InternalClient 與程序互動的 Web 應用程式。 用戶可以啟動、參與及檢視其 HiringProcess 工作流程。 使用此應用程式,他們也可以啟動及監視 ResumeRequest 進程。

此網站實施於 Contoso 的內部網路中。 此項目會實作為 ASP.NET 網站。
CareersWebSite Contoso 的外部網站,展示空缺職位。 任何潛在候選人都可以瀏覽此網站並提交履歷。

功能摘要

下表描述此範例中每個功能的使用方式。

特徵 / 功能 說明 專案
流程圖 商務程式會以流程圖表示。 此流程圖描述以企業在白板上繪製的方式呈現過程。 HiringRequestService
工作流程服務 具有進程定義的流程圖裝載於服務中(在此範例中,服務裝載於主控台應用程式中)。 HiringRequestService
傳訊活動 流程圖會以兩種方式使用傳訊活動:

- 若要從使用者取得資訊(以在每個核准步驟中接收決策和相關信息)。
- 與其他現有服務互動(InboxService 和 OrgDataService,透過服務參考使用)。
HiringRequestService
以內容為基礎的相互關聯 核准訊息會依據招聘要求的識別碼屬性相關聯。

- 當啟動一個程序時,會使用請求的 ID 初始化相關句柄。
- 傳入的核准訊息會根據其ID互相關聯(每個核准訊息的第一個參數是請求的ID)。
HiringRequestService / ResumeRequestService
自訂活動(宣告式和程式代碼型) 這個範例中有數個自訂活動:

- SaveActionTracking:此活動會發出自定義 TrackingRecord (使用 Track)。 此活動已使用擴充的命令式程式代碼NativeActivity撰寫。
- GetEmployeesByPositionTypes:此活動會接收位置類型標識符的清單,並傳回 Contoso 中具有該位置的人員清單。 此活動已以宣告方式撰寫(使用活動設計工具)。
- SaveHiringRequestInfo:此活動會儲存HiringRequest(使用HiringRequestRepository.Save)的資訊。 此活動已使用擴充的命令式程式代碼CodeActivity撰寫。
HiringRequestService
系統提供的 SQL Server 持久化 承載 WorkflowServiceHost 流程圖流程定義的實例被設定為使用系統提供的 SQL Server 持久性。 HiringRequestService / ResumeRequestService
自訂追蹤 此範例包含一個自定義追蹤參與者,可儲存 HiringRequestProcess 的歷史紀錄(這會記錄已完成哪些動作、由誰執行、以及執行時間)。 原始碼位於 HiringRequestService 的 Tracking 資料夾中。 HiringRequestService
ETW 追蹤 系統提供的 ETW 追蹤是在 HiringRequestService 服務的 App.config 檔案中設定。 HiringRequestService
活動組合 程序定義使用自由組合的Activity。 流程圖包含數個順序和並行活動,這些活動同時包含其他活動(如此類推)。 HiringRequestService
平行活動 - ParallelForEach<T> 用來在 CEO 和 HR 經理的收件匣中同時註冊(需等候兩位 HR 經理的核准步驟)。
- Parallel 用來在 [已完成] 和 [已拒絕] 步驟中執行一些清除工作
HiringRequestService
模型取消 流程圖會使用 CancellationScope 來建立取消行為(在此情況下,它會進行一些清理。) HiringRequestService
客戶持續性參與者 HiringRequestPersistenceParticipant 會將工作流程變數中的數據儲存至儲存在 Contoso HR 資料庫中的數據表。 HiringRequestService
工作流程服務 ResumeRequestService 是使用工作流程服務實作。 工作流程定義和服務資訊包含在 ResumeRequestService.xamlx 中。 服務已設定為使用持續性和追蹤。 ResumeRequestService
長期定時器 ResumeRequestService 會使用長期定時器來定義作業張貼的持續時間(逾時到期后,就會關閉作業張貼)。 ResumeRequestService
交易 TransactionScope 是用來確保執行數個活動內的數據一致性(收到新的履歷時)。 ResumeRequestService
交易 自訂持續性參與者 (HiringRequestPersistenceParticipant) 和自訂追蹤參與者 (HistoryFileTrackingParticipant) 使用相同的交易。 HiringRequestService
在 ASP.NET 應用程式中使用 WF。 工作流程可從兩個 ASP.NET 應用程式存取。 InternalClient / CareersWebSite

數據記憶體

數據會儲存在名為 ContosoHR 的 SQL Server 資料庫中(用於建立此資料庫的腳本位於 DbSetup 資料夾中)。 工作流程實例會儲存在名為 InstanceStore 的 SQL Server 資料庫中(建立實例存放區的腳本是 .NET Framework 4.6.1 散發的一部分)。

這兩個資料庫都是透過從 Visual Studio 開發人員命令提示字元執行Setup.cmd腳本所建立。

執行範例

建立資料庫

  1. 開啟 Visual Studio 的開發人員命令提示字元。

  2. 巡覽至範例資料夾。

  3. 執行Setup.cmd。

  4. 確認兩個資料庫 ContosoHR 已在 InstanceStore SQL Express 中建立。

設定方案以便執行

  1. 以系統管理員身分執行 Visual Studio。 開啟HiringRequest.sln。

  2. 以滑鼠右鍵按一下方案總管中的方案,然後選取屬性

  3. 選取 [多個啟始專案] 選項,並將 CareersWebSiteInternalClientHiringRequestService 和 ResumeRequestService 設定為 StartContosoHRInboxServiceOrgService 保留為 None。

  4. 按 CTRL+SHIFT+B 建置解決方案。 確認組建成功。

若要執行解決方案

  1. 建置解決方案之後,請按 CTRL+F5 執行而不偵錯。 確認所有服務都已啟動。

  2. 以滑鼠右鍵按兩下解決方案中的 InternalClient ,然後選取 [ 在瀏覽器中檢視]。 InternalClient 的預設頁面隨即顯示。 確保服務正在運行,並且點擊連結。

  3. HiringRequest 模組已顯示出來。 您可以遵循這裏詳述的案例。

  4. HiringRequest完成之後,您就可以啟動 ResumeRequest。 您可以遵循這裏詳述的案例。

  5. ResumeRequest張貼後,"Contoso Careers Web Site" 公開網站即可查看。 若要查看職位張貼(並申請職位),請流覽至職業網站。

  6. 以滑鼠右鍵按兩下方案中 的 [CareersWebSite ],然後選取 [ 在瀏覽器中檢視]。

  7. 在解決方案中滑鼠右鍵點擊 InternalClient 然後選擇 [在瀏覽器中檢視],以導覽回

  8. 單擊收件匣頂端功能表中的 [作業張貼] 連結,以移至 [JobPostings] 區段。 您可以遵循這裏詳述的案例。

情境

招聘要求

  1. Michael Alexander(軟體工程師)想要要求在工程部門設立一個新的職位,以雇用一位具至少 3 年 C# 經驗的測試軟體工程師(SDET)。

  2. 建立之後,請求會出現在 Michael 的收件匣中(如果您看不到請求,請按一下 重新整理),等待彼得·佈雷姆的核准,他是邁克爾的經理。

  3. 彼得想根據邁克爾的要求採取行動。 他認為這個職位需要 5 年的 C# 經驗,而不是 3 年,所以他把他的評論送回審查。

  4. 邁克爾在他的收件匣中看到來自經理的一條消息,想要採取行動。邁克爾查看了職位申請的過程,並同意彼得的意見。 Michael 將職缺描述修改為需要 5 年的 C# 經驗,並接受了修改。

  5. 彼得根據邁克爾修改的要求行事,並接受該要求。 現在要求必須由 Tsvi Reiter 工程總監核准。

  6. Tsvi Reiter 希望加快申請,因此他留下評論表示這是一個緊急請求,並接受了它。

  7. 要求現在必須由兩位人力資源經理或首席執行官核准。 首席執行官布賴恩·理查·戈德斯坦看到了茨維的緊急要求。 他接受要求,從而繞過兩名人力資源經理的批准。

  8. 請求已從邁克爾的收件匣中移除,而僱用一名SDET的程序現已開始。

開始履歷請求

  1. 現在,該職缺正在等待張貼到外部網站,求職者可以申請(您可以點擊職位張貼 連結來查看)。 目前,該職位由人力資源代表負責,他們負責完成該職位並發布相關資訊。

  2. HR 想藉由點擊編輯連結,並將逾時設定為 60 分鐘(在現實生活中,這可能是幾天或幾週),來編輯此職位。 時間控制功能允許在指定的時間將職位從外部網站下架。

  3. 儲存編輯的職缺之後,它會出現在 接收履歷 標籤中(重新整理網頁以查看新的職缺)。

收集履歷

  1. 作業位置應該會出現在外部網站上。 身為有興趣申請工作的人員,您可以申請此職位並提交履歷。

  2. 如果您回到職缺列表服務,您可以檢視到目前為止所收集的履歷。

  3. HR 也可以停止收集履歷(例如,一旦識別出合適的候選人)。

故障排除

  1. 請確定您以系統管理員許可權執行 Visual Studio。

  2. 如果解決方案無法建置,請確認下列各項:

    • ContosoHR 的參考並未遺漏於 InternalClientCareersWebSite 專案中。
  3. 如果解決方案無法執行,請確認下列事項:

    1. 所有服務都在執行中。

    2. 服務引用已更新。

      1. 開啟 App_WebReferences資料夾

      2. 以滑鼠右鍵按兩下 [Contoso ],然後選取 [ 更新Web/服務參考]。

      3. 在 Visual Studio 中按 CTRL+SHIFT+B 來重建方案。

卸載

  1. 執行位於 DbSetup 資料夾中的 Cleanup.bat,以刪除 SQL Server 實例存放區。

  2. 刪除您的硬碟中的原始碼。