Процесс найма
В примере "Наймпроцесс" показано, как реализовать бизнес-процесс с помощью действий обмена сообщениями и двух рабочих процессов, размещенных в качестве служб рабочих процессов. Эти рабочие процессы входят в ИT-инфраструктуру вымышленной компании Contoso, Inc.
Рабочий процесс HiringRequest
(реализованный как Flowchart) запрашивает авторизацию у нескольких менеджеров организации. Для достижения этой цели рабочий процесс использует другие существующие службы в организации (в нашем случае служба папки "Входящие" и служба данных организации, реализованная как обычные службы Windows Communication Foundation (WCF).
Рабочий процесс ResumeRequest
(реализованный как Sequence) публикует объявления о вакансиях на соответствующей странице внешнего веб-узла компании Contoso, а также управляет получением резюме. Размещенное объявление о вакансии находится на внешнем веб-узле в течение определенного времени (до истечения времени ожидания) либо до тех пор, пока сотрудник компании Contoso не решит удалить его.
В этом примере показаны следующие функции платформа .NET Framework 4.6.1:
Рабочие процессы Flowchart и Sequence для моделирования бизнес-процессов.
Службы рабочего процесса.
Действия обмена сообщениями.
Корреляция по содержимому.
Настраиваемые действия (декларативные и основанные на коде).
Предоставляемая системой сохраняемость сервера SQL.
Настраиваемый PersistenceParticipant.
Настраиваемое отслеживание.
Отслеживание Event Tracking for Windows (ETW).
Сочетание действий.
Действия Parallel.
Действие CancellationScope.
Устойчивые таймеры (действие Delay).
Транзакции.
Несколько рабочих процессов в одном решении.
Описание процесса
Компании Contoso, Inc. требуется постоянно контролировать количество сотрудников во всех своих отделах. Поэтому каждый раз, когда какой-нибудь сотрудник хочет нанять нового сотрудника, он должен выполнить процесс одобрения запроса о найме до того, как объявление о вакансии будет опубликовано. Этот процесс называется запросом о найме (он определен в проекте HiringRequestService), он состоит из двух этапов.
Сотрудник (инициатор) создает запрос о найме.
Менеджер запрашивающего сервера должен утвердить запрос:
Менеджер может отклонить запрос.
Менеджер может вернуть запрос инициатору для получения дополнительных сведений.
- Инициатор анализирует ответ менеджера и возвращает ему запрос.
Менеджер может его утвердить.
После утверждения менеджера запрашивающего отдела владелец отдела должен утвердить запрос:
Глава отдела может отклонить запрос.
Глава отдела может одобрить запрос.
После получения одобрения главы отдела запрос должен быть одобрен двумя менеджерами по персоналу или главой компании.
Процесс может перейти в состояние «одобрено» или «отклонено».
Если запрос одобрен, создается новый экземпляр рабочего процесса
ResumeRequest
(ResumeRequest
связывается с HiringRequest.csproj с помощью ссылки на службу).
После одобрения менеджерами найма нового сотрудника отдел кадров должен найти подходящего кандидата. Этот процесс выполняется вторым рабочим процессом (ResumeRequest
, определенным в ResumeRequestService.csproj). Этот рабочий процесс определяет процесс публикации объявления о вакансии на соответствующей странице внешнего веб-узла компании Contoso, получает резюме от претендентов и отслеживает состояние объявления о вакансии. Объявление отображается в течение определенного времени (до истечения времени ожидания) либо до тех пор, пока сотрудник не решит удалить его. Рабочий процесс ResumeRequest
состоит из следующих шагов.
Сотрудник компании Contoso вводит сведений о вакансии и время, в течение которого она будет доступна. После ввода сотрудником этих сведений вакансия размещается на соответствующей странице веб-узла.
После публикации сведений заинтересованные кандидаты могут подавать свои резюме. После подачи резюме оно сохраняется в записи, связанной с вакансией.
Претенденты могут подавать свои резюме до истечения времени ожидания или до тех пор, пока кто-то из сотрудников отдела кадров компании Contoso не решит удалить вакансию, остановив процесс.
Проекты в этом образце
В следующей таблице приведены проекты из этого образца решения.
Проекты | Description |
---|---|
ContosoHR | Содержит контракты данных, бизнес-объекты и классы репозитория. |
HiringRequestService | Содержит определение рабочего процесса запроса на найм. Этот проект реализован в виде консольного приложения, в котором рабочий процесс (файл xaml) является резидентной службой. |
ResumeRequestService | Служба рабочего процесса, которая собирает резюме от кандидатов до истечения времени ожидания или до того момента, когда кто-то решит остановить процесс. Этот проект реализован в виде декларативной службы рабочего процесса (xamlx). |
OrgService | Служба, которая предоставляет данные организации (Employees, Positions, PositionTypes и Departments). Эту службу можно представить в виде модуля организации компании плана ресурсов предприятия. Этот проект реализуется как консольное приложение, которое предоставляет службу Windows Communication Foundation (WCF). |
InboxService | Папка «Входящие», содержащая императивные задачи для сотрудников. Этот проект реализован в виде консольного приложения, предоставляющего службу WCF. |
InternalClient | Веб-приложение для взаимодействия с процессом. Пользователи могут запускать свои рабочие процессы HiringProcess, участвовать в них, просматривать их. С помощью этого приложения они также могут запускать и отслеживать процессы ResumeRequest. Этот узел реализован как внутренний в интрасети компании Contoso. Этот проект реализован в виде веб-узла ASP.NET. |
CareersWebSite | Внешний веб-узел, на котором отображаются открытые вакансии в компании Contoso. Любой потенциальный кандидат может перейти на этот узел и отправить резюме. |
Сводка по функции
В следующей таблице приведено описание того, как в этом образце используется каждая возможность.
Возможность | Description | Project |
---|---|---|
Блок-схема | Бизнес-процесс представлен в виде блок-схемы. Это описание с помощью блок-схемы представляет процесс так же, как в реальной жизни он был бы нарисован на доске. | HiringRequestService |
Службы рабочего процесса | Flowchart с определением процесса размещается в службе (в данном примере служба размещается в консольном приложении). | HiringRequestService |
Действия обмена сообщениями | На блок-схеме действия обмена сообщениями используются двумя способами. — Получение сведений от пользователя (для получения решений и связанных сведений на каждом шаге утверждения). — взаимодействие с другими существующими службами (InboxService и OrgDataService, используемых с помощью ссылок на службы). |
HiringRequestService |
Корреляция на основе содержимого | Сообщения об одобрении связываются со свойством ID запроса о найме. — При запуске процесса дескриптор корреляции инициализируется с идентификатором запроса. — Входящие сообщения об утверждении коррелируют по идентификатору (первый параметр каждого сообщения утверждения — это идентификатор запроса). |
HiringRequestService / ResumeRequestService |
Настраиваемые действия (декларативные и основанные на коде) | В этом образце присутствует несколько пользовательских действий. - SaveActionTracking : это действие выдает пользовательское TrackingRecord (с помощью Track). Это действие создано с помощью императивного кода, расширяющего NativeActivity.- GetEmployeesByPositionTypes : это действие получает список идентификаторов типов позиций и возвращает список людей, имеющих эту позицию в Contoso. Это действие создано декларативно (с помощью конструктора действий).- SaveHiringRequestInfo : это действие сохраняет сведения о ( HiringRequest с помощью HiringRequestRepository.Save ). Это действие создано с помощью императивного кода, расширяющего CodeActivity. |
HiringRequestService |
Предоставляемая системой сохраняемость сервера SQL | Экземпляр WorkflowServiceHost, в котором размещается определение процесса Flowchart, настроен на использование предоставляемой системой сохраняемости SQL Server. | HiringRequestService / ResumeRequestService |
Настраиваемое отслеживание | Этот образец содержит настраиваемого участника отслеживания, который сохраняет журнал HiringRequestProcess (он записывает, какие действия выполнены, кем и когда). Исходный код находится в папке Tracking службы HiringRequestService. |
HiringRequestService |
Отслеживание трассировки событий Windows | Предоставляемое системой отслеживание трассировки событий Windows настраивается в файле App.config в службе HiringRequestService. | HiringRequestService |
Сочетание действий | В определении процесса используется свободное сочетание действий Activity. Flowchart содержит несколько действий Sequence и Parallel, которые одновременно содержат другие действия (и так далее). | HiringRequestService |
Параллельные действия | - ParallelForEach<T> используется для регистрации в папке "Входящие" генерального директора и руководителей отдела кадров параллельно (ожидание двух шагов утверждения руководителей отдела кадров). - Parallel используется для выполнения некоторых задач очистки в шагах "Завершено" и "Отклонено" |
HiringRequestService |
Отмена модели | Flowchart использует CancellationScope для создания режима отмены (в данном случае он выполняет очистку). | HiringRequestService |
Участник Customer Persistence | HiringRequestPersistenceParticipant сохраняет данные из переменной рабочего процесса в таблицу, хранящуюся в базе данных персонала Contoso. |
HiringRequestService |
Службы рабочих процессов | ResumeRequestService реализована с помощью служб рабочего процесса. Сведения об определении рабочего процесса и службе содержатся в resumeRequestService.xamlx. Служба настроена на использование сохраняемости и отслеживания. |
ResumeRequestService |
Устойчивые таймеры | ResumeRequestService использует устойчивые таймеры для определения продолжительности публикации вакансии (по истечении времени ожидания вакансия закрывается). |
ResumeRequestService |
Транзакции | TransactionScope используется для обеспечения согласованности данных в рамках выполнения нескольких действий (при получении нового резюме). | ResumeRequestService |
Транзакции | Участник настраиваемой сохраняемости (HiringRequestPersistenceParticipant ) и участник настраиваемого отслеживания (HistoryFileTrackingParticipant ) используют одну и ту же транзакцию. |
HiringRequestService |
Использование WF в приложениях ASP.NET. | Рабочие процессы доступны из двух приложений ASP.NET. | InternalClient / CareersWebSite |
Хранилище данных
Данные хранятся в базе данных SQL Server ContosoHR
(скрипт для создания этой базы данных находится в папке DbSetup
). Экземпляры рабочих процессов хранятся в базе данных InstanceStore
SQL Server (скрипты для создания хранилища экземпляров являются частью дистрибутива платформа .NET Framework 4.6.1).
Обе базы данных создаются с помощью скрипта Setup.cmd из командной строки разработчика для Visual Studio.
Выполнение примера
Создание баз данных
Откройте Командную строку разработчика Visual Studio.
Перейдите к папке с примерами.
Запустите команду Setup.cmd.
Удостоверьтесь, что две базы данных,
ContosoHR
иInstanceStore
, были созданы в SQL Express.
Настройка решения для выполнения
Запустите Visual Studio от имени администратора. Откройте HiringRequest.sln.
Щелкните правой кнопкой мыши решение в Обозреватель решений и выберите "Свойства".
Выберите параметр "Несколько запускаемых проектов " и задайте для параметра CareersWebSite, InternalClient, НаймRequestService и ResumeRequestService значение Start. Оставьте ContosoHR, InboxService и OrgService как None.
Выполните сборку решения, нажав клавиши CTRL+SHIFT+B. Удостоверьтесь, что построение выполнено успешно.
Запуск решения
После построения решения нажмите клавиши CTRL+F5, чтобы запустить его без отладки. Удостоверьтесь, что все службы запустились.
Щелкните правой кнопкой мыши InternalClient в решении, а затем выберите "Вид" в браузере. Будет отображена страница
InternalClient
по умолчанию. Удостоверьтесь, что службы работают, и щелкните ссылку.Отображается модуль "НаймRequest". Далее можно выполнить описанный здесь сценарий.
После выполнения
HiringRequest
можно запуститьResumeRequest
. Далее можно выполнить описанный здесь сценарий.При размещении
ResumeRequest
она появляется на открытом веб-узле (странице с вакансиями в компании Contoso). Чтобы увидеть объявление о вакансии (и подать заявление о приеме на работу), перейдите на страницу веб-узла с вакансиями.Щелкните правой кнопкой мыши CareersWebSite в решении и выберите "Вид" в браузере.
Вернитесь к
InternalClient
правой кнопке мыши InternalClient в решении и выберите "Вид" в браузере.Перейдите в раздел JobPostings , щелкнув ссылку "Публикации заданий" в верхнем меню папки "Входящие". Далее можно выполнить описанный здесь сценарий.
Сценарии
Запрос о найме
Майкл Александр (инженер-программист) отправил запрос о найме нового сотрудника на должность «Инженер-программист по тестированию» в отдел разработок, имеющего не менее трех лет стажа работы с языком C#.
После создания запрос появится в папке "Входящие" Майкла (нажмите кнопку " Обновить ", если запрос не отображается) ожидает утверждения Питера Брема, который является менеджером Майкла.
Питер хочет действовать по просьбе Майкла. Он полагает, что для этой должности нужен человек с пятилетним, а не с трехлетним опытом работы с C#, о чем он и сообщил Майклу в своем комментарии.
Майкл видит сообщение в папке "Входящие" от своего менеджера и хочет действовать. Майкл видит историю запроса позиции и согласен с Питером. Майкл изменяет описание, указав требование пятилетнего опыта работы с C# и принимает изменение.
Питер действует на измененный запрос Майкла и принимает его. Теперь запрос должен быть одобрен главой отдела разработок Цви Рейтиром.
Цви Рейтир хочет ускорить запрос, поэтому в своем комментарии он пишет, что запрос является срочным и принимает его.
Теперь запрос должен быть одобрен двумя менеджерами по персоналу и главой компании. Глава компании Брайан Ричард Голдштайн видит срочный запрос от Цви. Он принимает запрос, обойдя, таким образом, одобрение двух менеджеров по персоналу.
Запрос удаляется из папки "Входящие" Майкла, и процесс найма SDET в настоящее время начался.
Запуск запроса резюме
Теперь позиция задания ожидает отправки на внешний веб-сайт, где пользователи могут применяться (вы можете увидеть, щелкнув ссылку "Публикация заданий "). В настоящий момент задача по размещению вакансии лежит на представителе отдела кадров, который отвечает за ее размещение.
Hr хочет изменить эту позицию задания (щелкнув ссылку "Изменить"), задав время ожидания от 60 минут (в реальной жизни это может быть дней или недель). Значение времени ожидания позволяет убрать объявление о вакансии с внешнего веб-узла по истечении указанного времени.
После сохранения измененной позиции задания на вкладке "Получение резюме " (обновите веб-страницу, чтобы увидеть новое положение задания).
Сбор резюме
Объявление о вакансии должно появиться на внешнем веб-узле. Если вы заинтересованы в этой работе, можно подать заявление на эту должность и подать свое резюме.
Если вернуться в службу списка публикаций заданий, вы можете просмотреть резюме, которые были собраны до сих пор.
Отдел кадров также может остановить сбор резюме (например, после того как нужный кандидат был найден).
Устранение неполадок
Убедитесь, что вы используете Visual Studio с правами администратора.
Если решение не было построено, то проверьте следующее.
- Ссылка на
ContosoHR
не отсутствует вInternalClient
проектах илиCareersWebSite
проектах.
- Ссылка на
Если решение не выполняется, убедитесь в следующем.
Все службы работают.
Ссылки на службы обновлены.
Откройте папку App_WebReferences.
Щелкните правой кнопкой мыши Contoso и выберите "Обновить веб-сайты или ссылки на службы".
Перестройте решение, нажав клавиши CTRL+SHIFT+B в Visual Studio.
Удаление
Удалите хранилище экземпляров SQL Server, для этого запустите файл Cleanup.bat из папки DbSetup.
Удалите исходный код с жесткого диска.