Поделиться через


Процесс найма

В примере "Наймпроцесс" показано, как реализовать бизнес-процесс с помощью действий обмена сообщениями и двух рабочих процессов, размещенных в качестве служб рабочих процессов. Эти рабочие процессы входят в И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), он состоит из двух этапов.

  1. Сотрудник (инициатор) создает запрос о найме.

  2. Менеджер запрашивающего сервера должен утвердить запрос:

    1. Менеджер может отклонить запрос.

    2. Менеджер может вернуть запрос инициатору для получения дополнительных сведений.

      1. Инициатор анализирует ответ менеджера и возвращает ему запрос.
    3. Менеджер может его утвердить.

  3. После утверждения менеджера запрашивающего отдела владелец отдела должен утвердить запрос:

    1. Глава отдела может отклонить запрос.

    2. Глава отдела может одобрить запрос.

  4. После получения одобрения главы отдела запрос должен быть одобрен двумя менеджерами по персоналу или главой компании.

    1. Процесс может перейти в состояние «одобрено» или «отклонено».

    2. Если запрос одобрен, создается новый экземпляр рабочего процесса ResumeRequest (ResumeRequest связывается с HiringRequest.csproj с помощью ссылки на службу).

После одобрения менеджерами найма нового сотрудника отдел кадров должен найти подходящего кандидата. Этот процесс выполняется вторым рабочим процессом (ResumeRequest, определенным в ResumeRequestService.csproj). Этот рабочий процесс определяет процесс публикации объявления о вакансии на соответствующей странице внешнего веб-узла компании Contoso, получает резюме от претендентов и отслеживает состояние объявления о вакансии. Объявление отображается в течение определенного времени (до истечения времени ожидания) либо до тех пор, пока сотрудник не решит удалить его. Рабочий процесс ResumeRequest состоит из следующих шагов.

  1. Сотрудник компании Contoso вводит сведений о вакансии и время, в течение которого она будет доступна. После ввода сотрудником этих сведений вакансия размещается на соответствующей странице веб-узла.

  2. После публикации сведений заинтересованные кандидаты могут подавать свои резюме. После подачи резюме оно сохраняется в записи, связанной с вакансией.

  3. Претенденты могут подавать свои резюме до истечения времени ожидания или до тех пор, пока кто-то из сотрудников отдела кадров компании 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.

Выполнение примера

Создание баз данных

  1. Откройте Командную строку разработчика Visual Studio.

  2. Перейдите к папке с примерами.

  3. Запустите команду Setup.cmd.

  4. Удостоверьтесь, что две базы данных, ContosoHR и InstanceStore, были созданы в SQL Express.

Настройка решения для выполнения

  1. Запустите Visual Studio от имени администратора. Откройте HiringRequest.sln.

  2. Щелкните правой кнопкой мыши решение в Обозреватель решений и выберите "Свойства".

  3. Выберите параметр "Несколько запускаемых проектов " и задайте для параметра CareersWebSite, InternalClient, НаймRequestService и ResumeRequestService значение Start. Оставьте ContosoHR, InboxService и OrgService как None.

  4. Выполните сборку решения, нажав клавиши CTRL+SHIFT+B. Удостоверьтесь, что построение выполнено успешно.

Запуск решения

  1. После построения решения нажмите клавиши CTRL+F5, чтобы запустить его без отладки. Удостоверьтесь, что все службы запустились.

  2. Щелкните правой кнопкой мыши InternalClient в решении, а затем выберите "Вид" в браузере. Будет отображена страница InternalClient по умолчанию. Удостоверьтесь, что службы работают, и щелкните ссылку.

  3. Отображается модуль "НаймRequest". Далее можно выполнить описанный здесь сценарий.

  4. После выполнения HiringRequest можно запустить ResumeRequest. Далее можно выполнить описанный здесь сценарий.

  5. При размещении ResumeRequest она появляется на открытом веб-узле (странице с вакансиями в компании Contoso). Чтобы увидеть объявление о вакансии (и подать заявление о приеме на работу), перейдите на страницу веб-узла с вакансиями.

  6. Щелкните правой кнопкой мыши CareersWebSite в решении и выберите "Вид" в браузере.

  7. Вернитесь к InternalClient правой кнопке мыши InternalClient в решении и выберите "Вид" в браузере.

  8. Перейдите в раздел JobPostings , щелкнув ссылку "Публикации заданий" в верхнем меню папки "Входящие". Далее можно выполнить описанный здесь сценарий.

Сценарии

Запрос о найме

  1. Майкл Александр (инженер-программист) отправил запрос о найме нового сотрудника на должность «Инженер-программист по тестированию» в отдел разработок, имеющего не менее трех лет стажа работы с языком C#.

  2. После создания запрос появится в папке "Входящие" Майкла (нажмите кнопку " Обновить ", если запрос не отображается) ожидает утверждения Питера Брема, который является менеджером Майкла.

  3. Питер хочет действовать по просьбе Майкла. Он полагает, что для этой должности нужен человек с пятилетним, а не с трехлетним опытом работы с C#, о чем он и сообщил Майклу в своем комментарии.

  4. Майкл видит сообщение в папке "Входящие" от своего менеджера и хочет действовать. Майкл видит историю запроса позиции и согласен с Питером. Майкл изменяет описание, указав требование пятилетнего опыта работы с C# и принимает изменение.

  5. Питер действует на измененный запрос Майкла и принимает его. Теперь запрос должен быть одобрен главой отдела разработок Цви Рейтиром.

  6. Цви Рейтир хочет ускорить запрос, поэтому в своем комментарии он пишет, что запрос является срочным и принимает его.

  7. Теперь запрос должен быть одобрен двумя менеджерами по персоналу и главой компании. Глава компании Брайан Ричард Голдштайн видит срочный запрос от Цви. Он принимает запрос, обойдя, таким образом, одобрение двух менеджеров по персоналу.

  8. Запрос удаляется из папки "Входящие" Майкла, и процесс найма SDET в настоящее время начался.

Запуск запроса резюме

  1. Теперь позиция задания ожидает отправки на внешний веб-сайт, где пользователи могут применяться (вы можете увидеть, щелкнув ссылку "Публикация заданий "). В настоящий момент задача по размещению вакансии лежит на представителе отдела кадров, который отвечает за ее размещение.

  2. Hr хочет изменить эту позицию задания (щелкнув ссылку "Изменить"), задав время ожидания от 60 минут (в реальной жизни это может быть дней или недель). Значение времени ожидания позволяет убрать объявление о вакансии с внешнего веб-узла по истечении указанного времени.

  3. После сохранения измененной позиции задания на вкладке "Получение резюме " (обновите веб-страницу, чтобы увидеть новое положение задания).

Сбор резюме

  1. Объявление о вакансии должно появиться на внешнем веб-узле. Если вы заинтересованы в этой работе, можно подать заявление на эту должность и подать свое резюме.

  2. Если вернуться в службу списка публикаций заданий, вы можете просмотреть резюме, которые были собраны до сих пор.

  3. Отдел кадров также может остановить сбор резюме (например, после того как нужный кандидат был найден).

Устранение неполадок

  1. Убедитесь, что вы используете Visual Studio с правами администратора.

  2. Если решение не было построено, то проверьте следующее.

    • Ссылка на ContosoHR не отсутствует в InternalClient проектах или CareersWebSite проектах.
  3. Если решение не выполняется, убедитесь в следующем.

    1. Все службы работают.

    2. Ссылки на службы обновлены.

      1. Откройте папку App_WebReferences.

      2. Щелкните правой кнопкой мыши Contoso и выберите "Обновить веб-сайты или ссылки на службы".

      3. Перестройте решение, нажав клавиши CTRL+SHIFT+B в Visual Studio.

Удаление

  1. Удалите хранилище экземпляров SQL Server, для этого запустите файл Cleanup.bat из папки DbSetup.

  2. Удалите исходный код с жесткого диска.