雇用プロセス
HiringProcess サンプルでは、メッセージング アクティビティ、およびワークフロー サービスとしてホストされる 2 つのワークフローを使用して、ビジネス プロセスを実装する方法を示します。 この 2 つのワークフローは、Contoso, Inc という架空の会社の IT インフラストラクチャの一部です。
HiringRequest
ワークフロー プロセス (Flowchart として実装) は、組織の複数のマネージャーの承認が必要です。 この目標を達成するため、ワークフローでは、組織内の他の既存のサービス (ここでは、プレーンな Windows Communication Foundation (WCF) サービスとして実装された受信トレイ サービスおよび組織データ サービス) を使用します。
ResumeRequest
ワークフロー (Sequence として実装) は、Contoso 社の外部 Careers Web サイトに求人情報を発行し、履歴書の受け取りを管理します。 求人情報は、指定した期間 (タイムアウトになるまで) または Contoso の従業員が削除を決定するまで、外部 Web サイトに掲載されます。
このサンプルでは、次の .NET Framework 4.6.1 機能の使用例を示します。
ワークフロー サービス。
メッセージング アクティビティ。
コンテンツ ベースの相関関係。
カスタム アクティビティ (宣言型およびコードベース)。
システムで指定された SQL サーバー永続性。
カスタム PersistenceParticipant。
カスタム追跡
Event Tracking for Windows (ETW) 追跡。
アクティビティの構成。
Parallel アクティビティ。
CancellationScope アクティビティ。
永続的なタイマー (Delay アクティビティ)。
トランザクション。
同一ソリューションの複数のワークフロー。
プロセスの説明
Contoso 社は、各部門の人数を綿密に管理しようとしています。 このため、従業員が新しい雇用プロセスを開始する場合、求人を実際に開始する前に雇用要件プロセスの承認を受ける必要があります。 このプロセスは、雇用プロセス要求 (HiringRequestService プロジェクトで定義) と呼ばれ、次の手順で構成されます。
従業員 (要求者) は雇用プロセス要求を開始します。
要求者のマネージャーは、要求を承認する必要があります。
マネージャーは要求を拒否できます。
マネージャーは、追加情報が必要な場合、要求者に要求を戻すことができます。
- 要求者は要求をレビューし、マネージャーに再承認を求めることができます。
マネージャーはこれを承認します。
要求者のマネージャーの承認後は、その部門の責任者が要求を承認する必要があります。
部門の責任者は要求を拒否できます。
部門の責任者は要求を承認できます。
部門の責任者の承認後は、HR (人事部) の 2名のマネージャーまたは CEO (最高経営責任者) の承認を受ける必要があります。
プロセスは承認状態または拒否状態のいずれかになります。
プロセスが [承諾済み] になると、
ResumeRequest
ワークフローの新しいインスタンスが開始されます (ResumeRequest
はサービス参照を使用して HiringRequest.csproj にリンクされます)。
マネージャーが新しい従業員の雇用を承認すると、HR は適切な応募者を採用する必要があります。 このプロセスは、2 番目のワークフロー (ResumeRequest
。ResumeRequestService.csproj で定義。) で実行されます。 このワークフローによって、Contoso 社の外部 Careers Web サイトに求人情報を送信するプロセスが定義され、応募者から履歴書を受信し、募集の状況が監視されます。 求人は、指定した期間 (有効期間が過ぎるまで) または Contoso の従業員が削除を指定するまで有効です。 ResumeRequest
ワークフローは、次のステップから構成されています。
Contoso 社の従業員は、求人およびタイムアウト期間に関する情報を入力します。 従業員がこの情報を入力すると、Careers Web サイトに求人情報が掲載されます。
この情報が発行されると、この情報に興味を持った人が自分の履歴書を送信します。 履歴書は、送信後、求人にリンクされたレコードに保存されます。
応募者は、タイムアウトになるまで、または Contoso 社の HR 部でプロセスを停止して求人を削除することを明示的に決定するまでは履歴書を送信することができます。
サンプルのプロジェクト
サンプル ソリューションのプロジェクトを次の表に示します。
プロジェクト | 説明 |
---|---|
ContosoHR | データ コントラクト、ビジネス オブジェクト、およびリポジトリ クラスを含んでいます。 |
HiringRequestService | Hiring Request Process ワークフローの定義を含んでいます。 このプロジェクトは、サービスとしてワークフロー (xaml ファイル) を自己ホストするコンソール アプリケーションとして実装されます。 |
ResumeRequestService | タイムアウトとなるかプロセス終了が決定するまで応募者からの履歴書を収集するワークフロー サービス。 このプロジェクトは、宣言型ワークフロー サービス (xamlx) として実装されます。 |
OrgService | 組織情報 (Employees、Positions、PositionTypes、および Departments) を公開するサービス。 このサービスは、Enterprise Resource Plan (ERP) の Company Organization モジュールと考えることができます。 このプロジェクトは、Windows Communication Foundation (WCF) サービスを公開するコンソール アプリケーションとして実装されます。 |
InboxService | 従業員のアクション可能なタスクを含んでいる受信トレイです。 このプロジェクトは、WCF サービスを公開するコンソール アプリケーションとして実装されます。 |
InternalClient | プロセスと対話するための Web アプリケーション。 ユーザーは、HiringProcess ワークフローを開始して、参加し、表示できます。 このアプリケーションを使用すると、ResumeRequest プロセスを開始および監視することもできます。 このサイトは、Contoso のイントラネット内のサイトとして実装されます。 このプロジェクトは ASP.NET Web サイトとして実装されます。 |
CareersWebSite | Contoso 社で募集中の求人を公開する外部 Web サイト。 興味を持った応募者は、このサイトに移動して、履歴書を送信します。 |
機能の概要
このサンプルでの各機能の使用方法を次の表に示します。
機能 | 説明 | Project |
---|---|---|
フローチャート | ビジネス プロセスがフローチャートとして表されます。 このフローチャートの説明では、業務時にプロセスがホワイトボードに描画されるのと同じ方法でプロセスが表されます。 | HiringRequestService |
ワークフロー サービス | プロセスの定義を持つフローチャートは、サービスでホストされます (この例では、サービスはコンソール アプリケーションでホストされます)。 | HiringRequestService |
メッセージング アクティビティ | フローチャートでは、次の 2 つの方法でメッセージング アクティビティが使用されます。 - ユーザーから情報を取得する (各承認手順で決定および関連情報を受信する)。 - 他の既存のサービス (サービス参照から使用できる InboxService および OrgDataService) と対話する。 |
HiringRequestService |
コンテンツ ベースの相関関係 | 雇用要求の ID プロパティにおける承認メッセージ相関関係は次のとおりです。 - プロセスが開始されると、関連付けハンドルが要求の ID によって初期化されます。 - 受信承認メッセージは、その ID (各承認メッセージの最初のパラメーターが要求の ID です) に基づいて関連付けられます。 |
HiringRequestService / ResumeRequestService |
カスタム アクティビティ (宣言型およびコード ベース) | このサンプルには、次の複数のカスタム アクティビティがあります。 - SaveActionTracking : このアクティビティは、カスタムの TrackingRecord を出力します (Track を使用)。 このアクティビティは、NativeActivity を拡張する命令型コードを使用して作成されています。- GetEmployeesByPositionTypes : このアクティビティは、タイプ ID のリストを受信し、Contoso 社でその職種に就いている従業員のリストを返します。 このアクティビティは、宣言的に作成されています (アクティビティ デザイナーを使用)。- SaveHiringRequestInfo : このアクティビティは、HiringRequest の情報を保存します (HiringRequestRepository.Save を使用)。 このアクティビティは、CodeActivity を拡張する命令型コードを使用して作成されています。 |
HiringRequestService |
システムで指定された SQL サーバー永続性 | Flowchart プロセス定義をホストするWorkflowServiceHost インスタンスは、システムで指定された SQL サーバー永続性を使用するように構成されています。 | HiringRequestService / ResumeRequestService |
カスタム追跡 | このサンプルには、HiringRequestProcess の履歴を保存するカスタム追跡参加要素が含まれています (これによって、アクションの内容、実行者、および時期が記録されます)。 ソース コードは、HiringRequestService の Tracking フォルダーにあります。 |
HiringRequestService |
ETW 追跡 | システムで指定された ETW 追跡は、HiringRequestService サービスの App.config ファイルで設定されます。 | HiringRequestService |
アクティビティの構成 | プロセス定義では、Activity のフリー コンポジションが使用されます。 Flowchart には、その他のアクティビティなどを同時に含んでいる複数の Sequence アクティビティと Parallel アクティビティが含まれています。 | HiringRequestService |
並列アクティビティ | - ParallelForEach<T> は、CEO および HR マネージャーの受信トレイへの同時登録を可能にするために使用されます (2 人の HR マネージャーの承認手順を待機します)。 - Parallel は、[完了] および [却下] 手順のクリーンアップ タスクの一部を実行するために使用されます。 |
HiringRequestService |
モデルの取り消し | フローチャートでは、CancellationScope を使用して、取り消し動作を作成します (この場合、一部のクリーンアップが実行されます)。 | HiringRequestService |
カスタマー永続参加要素 | HiringRequestPersistenceParticipant は、ワークフロー変数のデータを Contoso HR データベースに保存されているテーブルに保存します。 |
HiringRequestService |
ワークフロー サービス | ResumeRequestService は、ワークフロー サービスを使用して実装されます。 ワークフロー定義およびサービス情報は、ResumeRequestService.xamlx に含まれています。 サービスは、永続性と追跡を使用するように構成されます。 |
ResumeRequestService |
永続的なタイマー | ResumeRequestService は、永続的なタイマーを使用して、求人の期間を定義します (タイムアウトになると、求人は終了します)。 |
ResumeRequestService |
トランザクション | TransactionScope は、複数のアクティビティの実行時にデータの一貫性を保つために使用されます (新しい履歴書の受信時)。 | ResumeRequestService |
トランザクション | カスタムの永続参加要素 (HiringRequestPersistenceParticipant ) とカスタムの追跡参加要素 (HistoryFileTrackingParticipant ) では、同じトランザクションを使用します。 |
HiringRequestService |
ASP.NET アプリケーションでの WF の使用。 | ワークフローは 2 つの ASP.NET アプリケーションからアクセスされます。 | InternalClient / CareersWebSite |
データ ストレージ
データは、ContosoHR
という名前の SQL Server データベースに保存されます (このデータベースを作成するためのスクリプトは DbSetup
フォルダーにあります)。 ワークフロー インスタンスは InstanceStore
という名前の SQL Server データベースに保存されます (インスタンス ストアを作成するためのスクリプトは .NET Framework 4.6.1 の配布に含まれています)。
どちらのデータベースも、Visual Studio 用開発者コマンド プロンプトから Setup.cmd スクリプトを実行して作成されます。
サンプルの実行
データベースを作成するには
Visual Studio の開発者コマンド プロンプトを開きます。
サンプル フォルダーに移動します。
Setup.cmd を実行します。
2 つのデータベース (
ContosoHR
とInstanceStore
) が SQL Express に作成されたことを確認します。
ソリューションの実行を設定するには
Visual Studio を管理者として実行します。 HiringRequest.sln を開きます。
ソリューション エクスプローラーで、ソリューションを右クリックし、 [プロパティ] をクリックします。
オプション [マルチ スタートアップ プロジェクト] を選択して、 [CareersWebSite] 、 [InternalClient] 、 [HiringRequestService] 、および [ResumeRequestService] を [開始] に設定します。 [ContosoHR] 、 [InboxService] 、および [OrgService] は [なし] のままにしておいてください。
Ctrl キーと Shift キーを押しながら B キーを押して、ソリューションをビルドします。 ビルドが成功したことを確認します。
ソリューションを実行するには
デバッグを行わない場合は、ソリューションのビルド後、Ctrl キーを押しながら F5 キーを押してソリューションを実行します。 すべてのサービスが開始されたことを確認します。
ソリューションで [InternalClient] を右クリックしてから、 [ブラウザーで表示] をクリックします。
InternalClient
の既定のページが表示されます。 サービスが実行中であることを確認し、リンクをクリックします。HiringRequest モジュールが表示されます。 詳細については、以下のシナリオを参照してください。
HiringRequest
が完了すると、ResumeRequest
を開始できます。 詳細については、以下のシナリオを参照してください。ResumeRequest
は、投稿されると、パブリック Web サイト (Contoso Careers Web サイト) で使用可能になります。 求人を確認するには (さらに、応募するには)、Careers Web サイトに移動します。ソリューションで [CareersWebSite] を右クリックし、 [ブラウザーで表示] をクリックします。
ソリューションで [InternalClient] を右クリックし、[ブラウザーで表示] をクリックして、
InternalClient
に戻ります。受信トレイのトップ メニューの [求人] リンクをクリックし、 [JobPostings] セクションに移動します。 詳細については、以下のシナリオを参照してください。
シナリオ
雇用要求
Michael Alexander (ソフトウェア エンジニア) は、エンジニアリング部において、C# の分野で 3 年以上の実務経験を持つ SDET (Software Engineer in Test) を採用するための新たな求人を要求します。
要求を作成すると、その要求が Michael の受信トレイに表示されます (要求が表示されない場合は、 [更新] をクリックします)。 Michael のマネージャーである Peter Brehm の承認を待っている状態です。
Peter は、Michael の要求に対応します。 Peter は、この職種で要求される C# の実務経験は 3 年ではなく 5 年であると考え、その旨を知らせるコメントを送信します。
Michael は、Peter からのメッセージを受信し、これに対応します。Michael は、求人要求の履歴を確認し、Peter の意見に同意します。 Michael は、求人要求の C# の実務経験に関する説明を 5 年に変更し、その変更を受け入れます。
Peter は、Michael の変更済みの要求を確認し、これを受け入れます。 ここで、要求は、エンジニアリング部長 Tsvi Reiter の承認が必要になります。
Tsvi Reiter は、要求に多くの時間をかけることができないため、要求が緊急であることと、この要求を受け入れることをコメントします。
ここで、要求は、2 人の HR マネージャーまたは CEO の承認が必要になります。 CEO である Brian Richard Goldstein は Tsvi による緊急要求を確認します。 Brian Richard Goldstein は、これを受け入れ、2 人の HR マネージャーによる承認を省略して、要求に対応します。
要求は Michael の受信トレイから削除され、SDET を雇用するためのプロセスが開始されます。
履歴書の要求の開始
現在、求人は、多くの人々が申し込み可能な外部 Web サイトへの投稿を待っている状態です ( [求人] リンクをクリックすると、確認できます)。 現在、この求人は、求人を決定して掲載する HR 担当者の最終判断を待っている状態です。
HR は、60 分のタイムアウトを設定して (現実的には、数日または数週間になります)、この求人を編集します ( [編集] リンクをクリックします)。 タイムアウトによって、求人は指定時間に従い外部 Web サイトに掲載されます。
編集した求人情報は、保存されると、 [履歴書受付中] タブに表示されます (新たな求人を確認するには、Web ページを更新してください)。
履歴書の収集
求人は外部の Web サイトに提示されています。 求人の応募に興味がある人は、この求人に応募するために履歴書を送信することができます。
Job Postings List サービスに戻ると、これまでに応募があった履歴書を確認できます。
また、HR は履歴書の募集を停止することもできます (適切な応募者が見つかった場合など)。
トラブルシューティング
管理者特権で Visual Studio を実行していることを確認します。
ソリューションをビルドできない場合は、次の項目を確認してください。
ContosoHR
への参照がInternalClient
またはCareersWebSite
プロジェクトにある。
ソフトウェアを実行できない場合は、次の項目を確認してください。
すべてのサービスが実行中である。
サービス参照が更新されている。
App_WebReferences フォルダーを開きます。
[Contoso] を右クリックし、 [Web 参照またはサービス参照を更新する] をクリックします。
Visual Studio で、Ctrl + Shift + B キーを押してソリューションをリビルドします。
アンインストール
DbSetup フォルダーにある Cleanup.bat を実行して SQL Server インスタンス ストアを削除します。
ハード ドライブからソース コードを削除します。
.NET