Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В примере HiringProcess показано, как реализовать бизнес-процесс с помощью активностей обмена сообщениями и двух рабочих процессов, размещенных в качестве служб рабочих процессов. Эти рабочие процессы являются частью ИТ-инфраструктуры вымышленной компании Contoso, Inc.
Процесс HiringRequest рабочего потока (реализован как Flowchart) запрашивает авторизацию у нескольких руководителей в организации. Для достижения этой цели рабочий процесс использует другие существующие службы в организации (в нашем случае служба папки "Входящие" и служба данных организации, реализованная как обычные службы Windows Communication Foundation (WCF).
Рабочий процесс ResumeRequest (реализованный как Sequence) публикует объявление о вакансии на внешнем сайте вакансий Contoso и управляет обработкой резюме. Объявление о вакансии доступно на внешнем веб-сайте на определенный срок (до истечения времени ожидания) или до тех пор, пока сотрудник из Contoso не решит удалить его/ее.
В этом примере показаны следующие функции .NET Framework 4.6.1:
Flowchart и Sequence рабочие процессы для моделирования бизнес-процессов.
Службы рабочих процессов.
Действия обмена сообщениями.
Корреляция на основе содержимого.
Пользовательские действия (декларативные и кодовые).
Сохраняемость сервера SQL Server, предоставляемого системой.
Кастомный PersistenceParticipant.
Настраиваемое отслеживание.
Отслеживание событий Windows (ETW).
Состав действий.
Parallel Мероприятия.
CancellationScope активность.
Устойчивые таймеры (Delay действие).
Транзакции.
Несколько рабочих процессов в одном решении.
Описание процесса
Contoso, Inc. хочет иметь строгий контроль над численностью сотрудников в каждом отделе. Таким образом, любой сотрудник, который хочет начать новый процесс найма, должен пройти процедуру утверждения запроса на найм, прежде чем процесс найма может быть осуществлён. Этот процесс называется запросом на прием на работу (указанным в проекте СлужбаЗапросаНаНайм) и состоит из следующих шагов:
Сотрудник (инициатор) запускает процесс запроса на найм.
Менеджер запрашивающего сервера должен утвердить запрос:
Менеджер может отклонить запрос.
Менеджер может вернуть запрос запрашивающему для получения дополнительных сведений.
- Запрашиватель проверяет и отправляет запрос обратно руководителю.
Менеджер может утвердить.
После утверждения менеджера запрашивающего отдела владелец отдела должен утвердить запрос:
Руководитель отдела может отклонить.
Владелец отдела может утвердить.
После утверждения владельца отдела процесс требует утверждения 2 менеджеров отдела или генерального директора:
Процесс может перейти в принятое или отклоненное состояние.
Если процесс принят, запускается новый экземпляр
ResumeRequestрабочего процесса (ResumeRequestсвязан с HiringRequest.csproj через служебную ссылку).
Как только руководители одобрят прием нового сотрудника, HR должен найти подходящего кандидата. Этот процесс выполняется вторым рабочим процессом (ResumeRequestопределенный в ResumeRequestService.csproj). Этот рабочий процесс определяет процедуру отправки объявления о вакансии с возможностью карьерного роста на внешний сайт вакансий Contoso, получает резюме от кандидатов и отслеживает состояние объявления о вакансии. Должности доступны для фиксированного периода времени (до истечения срока действия) или до тех пор, пока сотрудник из Contoso не решит удалить его. Рабочий ResumeRequest процесс состоит из следующих шагов:
Сотрудник компании Contoso ввёл информацию о должности и длительности тайм-аута. После того как сотрудник вводит эту информацию, должность размещается на карьерном сайте.
После публикации информации заинтересованные стороны могут отправить свои резюме. Когда резюме отправляется, оно хранится в записи, связанной с вакансией.
Заявители могут отправлять резюме до истечения срока ожидания или кто-то из отдела кадров Contoso явно решает удалить публикацию, остановив процесс.
Проекты в примере
В следующей таблице показаны проекты в примере решения.
| Проект | Описание |
|---|---|
| ContosoHR | Содержит контракты данных, бизнес-объекты и классы репозитория. |
| СлужбаЗапросовНаНаём | Содержит описание рабочего процесса запроса на прием на работу. Этот проект реализуется как консольное приложение, которое самостоятельно размещает рабочий процесс (xaml-файл) в качестве службы. |
| СлужбаЗапросаПоПродолжению | Служба управления рабочим процессом, которая собирает резюме от кандидатов до истечения времени тайм-аута или пока кто-то не решит, что процесс должен быть остановлен. Этот проект реализуется как декларативная служба рабочих процессов (xamlx). |
| OrgService | Служба, которая предоставляет сведения о организации (сотрудники, должности, позиции и отделы). Эту службу можно считать модулем корпоративной организации плана ресурсов предприятия (ERP). Этот проект реализуется как консольное приложение, которое предоставляет службу Windows Communication Foundation (WCF). |
| Служба входящих сообщений | Папка "Входящие", содержащая практические задачи для сотрудников. Этот проект реализуется как консольное приложение, которое предоставляет службу WCF. |
| InternalClient | Веб-приложение для взаимодействия с процессом. Пользователи могут запускать, участвовать и просматривать рабочие процессы НаймПроцесс. С помощью этого приложения они также могут запускать и отслеживать процессы ResumeRequest. Этот сайт реализуется для внутренней интрасети Contoso. Этот проект реализуется как веб-сайт ASP.NET. |
| CareersWebSite | Внешний сайт, публикующий открытые вакансии в Contoso. Любой потенциальный кандидат может перейти на этот сайт и отправить резюме. |
Сводка по функциям
В следующей таблице описывается, как каждая функция используется в этом примере.
| Функция | Описание | Проект |
|---|---|---|
| Блок-схема | Бизнес-процесс представлен в виде блок-схемы. Это описание блок-схемы представляет процесс таким же образом, как бизнес нарисовал бы его на доске. | СлужбаЗапросовНаНаём |
| Службы рабочих процессов | Блок-схема с определением процесса размещается в службе (в этом примере служба размещается в консольном приложении). | СлужбаЗапросовНаНаём |
| Действия обмена сообщениями | Блок-схема использует действия обмена сообщениями двумя способами: — Получение сведений от пользователя (для получения решений и связанных сведений на каждом шаге утверждения). — взаимодействие с другими существующими службами, такими как InboxService и OrgDataService, которые используются через ссылки на службы. |
СлужбаЗапросовНаНаём |
| Корреляция на основе содержимого | Сообщения об утверждении коррелируются по идентификатору запроса на наём. — При запуске процесса дескриптор корреляции инициализируется с идентификатором запроса. — Входящие сообщения об утверждении коррелируют по идентификатору (первый параметр каждого сообщения утверждения — это идентификатор запроса). |
СервисЗапросовНаём / СервисЗапросовРезюме |
| Пользовательские действия (декларативные и кодовые) | В этом примере существует несколько пользовательских действий: - SaveActionTracking: это действие генерирует пользовательское TrackingRecord (с помощью Track). Это действие было создано с использованием императивного кода, расширяющего NativeActivity.- GetEmployeesByPositionTypes: это действие получает список идентификаторов типов позиций и возвращает список людей, имеющих эту позицию в Contoso. Это действие было создано декларативно (с помощью конструктора действий).- SaveHiringRequestInfo: это действие сохраняет информацию о HiringRequest, используя HiringRequestRepository.Save. Это действие было создано с использованием императивного кода, расширяющего CodeActivity. |
СлужбаЗапросовНаНаём |
| Сохраняемость SQL Server, предоставляемая системой | Экземпляр WorkflowServiceHost , на котором размещено определение процесса блок-схемы, настроен для использования сохраняемости SQL Server, предоставленной системой. | СервисЗапросовНаём / СервисЗапросовРезюме |
| Настраиваемое отслеживание | Пример включает настраиваемого участника, который отслеживает HiringRequestProcess и сохраняет его историю (фиксируя, какое действие было сделано, кем и когда). Исходный код находится в папке Tracking службы HiringRequestService. |
СлужбаЗапросовНаНаём |
| Отслеживание событий ETW | Система предоставила отслеживание ETW, настроенное в файле App.config в службе запросов на найм. | СлужбаЗапросовНаНаём |
| Состав действий | Определение процесса использует свободную композицию Activity. Блок-схема содержит действия нескольких последовательных и параллельных операций, которые одновременно содержат другие действия (и т. д.). | СлужбаЗапросовНаНаём |
| Параллельные действия |
-
ParallelForEach<T> используется для регистрации в папке "Входящие" генерального директора и руководителей отдела кадров параллельно (ожидание утверждения от двух руководителей отдела кадров). - Parallel используется для выполнения некоторых задач очистки в шагах "Завершено" и "Отклонено" |
СлужбаЗапросовНаНаём |
| Отмена модели | Блок-схема использует CancellationScope для создания поведения отмены, с помощью которого происходит некоторая очистка. | СлужбаЗапросовНаНаём |
| Участник программы лояльности клиентов |
HiringRequestPersistenceParticipant сохраняет данные из переменной рабочего процесса в таблицу, хранящуюся в базе данных отдела кадров Contoso. |
СлужбаЗапросовНаНаём |
| Службы рабочих процессов |
ResumeRequestService реализуется с помощью служб рабочих процессов. Сведения об определении рабочего процесса и службе содержатся в resumeRequestService.xamlx. Служба настроена для использования сохраняемости и отслеживания. |
СлужбаЗапросаПоПродолжению |
| Устойчивые таймеры |
ResumeRequestService использует устойчивые таймеры для определения длительности публикации задания (после истечения срока действия, публикация задания закрыта). |
СлужбаЗапросаПоПродолжению |
| Транзакции | TransactionScope используется для обеспечения согласованности данных в рамках выполнения нескольких действий (при получении нового резюме). | СлужбаЗапросаПоПродолжению |
| Транзакции | Пользовательский участник постоянства (HiringRequestPersistenceParticipant) и пользовательский участник отслеживания (HistoryFileTrackingParticipant) используют одну и ту же транзакцию. |
СлужбаЗапросовНаНаём |
| Использование 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.
Щелкните правой кнопкой мыши решение в обозревателе решений и выберите пункт "Свойства".
Выберите вариант Multiple Startup Projects и установите для CareersWebSite, InternalClient, HiringRequestService и ResumeRequestService значение Start. Оставьте ContosoHR, InboxService и OrgService как None.
Создайте решение, нажав клавиши CTRL+SHIFT+B. Убедитесь, что сборка выполнена успешно.
Запуск решения
После сборки решения нажмите клавиши CTRL+F5, чтобы запустить без отладки. Убедитесь, что все службы запустились.
Щелкните правой кнопкой мыши InternalClient в решении, а затем выберите "Вид" в браузере. Отображается страница
InternalClientпо умолчанию. Убедитесь, что службы запущены и щелкните ссылку.Отображается модуль "Заявка на приём". Вы можете следовать сценарию, подробно описанному здесь.
После завершения
HiringRequestвы можете начатьResumeRequest. Вы можете следовать сценарию, подробно описанному здесь.ResumeRequestПри публикации он доступен на общедоступном веб-сайте (веб-сайт Компании Contoso Careers). Чтобы просмотреть вакансию (и подать заявку на должность), перейдите на сайт с вакансиями.Щелкните правой кнопкой мыши CareersWebSite в решении и выберите "Вид" в браузере.
Щелкните правой кнопкой мыши на
InternalClientв решении и выберите Просмотр в браузере, чтобы вернуться к .Перейдите в раздел JobPostings , щелкнув ссылку " Публикации заданий " в верхнем меню папки "Входящие". Вы можете следовать сценарию, подробно описанному здесь.
Сценарии
Запрос на наем
Майкл Александр (инженер программного обеспечения) хочет запросить новую должность для найма инженера программного обеспечения в тесте (SDET) в отделе инженеров, который имеет по крайней мере 3 года опыта работы в C#.
После создания запрос появится в папке "Входящие" Майкла (нажмите кнопку "Обновить", если запрос не отображается), где ожидает утверждения Питера Брема, менеджера Майкла.
Питер хочет действовать по просьбе Майкла. Он думает, что позиция требует 5 лет опыта C# вместо 3, поэтому он отправляет свои комментарии обратно на обзор.
Майкл видит сообщение в папке "Входящие" от своего менеджера и намерен предпринять действия. Майкл видит историю запроса на должность и согласен с Питером. Майкл изменяет описание, чтобы требовать 5 лет опыта C# и принимает изменение.
Питер действует на измененный запрос Майкла и принимает его. Теперь запрос должен быть утвержден директором по проектированию Tsvi Reiter.
Цви Рейтер хочет ускорить запрос, поэтому он оставляет комментарий о срочности запроса и принимает его.
Теперь запрос должен быть утвержден двумя менеджерами отдела кадров или генеральным директором. Генеральный директор Брайан Ричард Голдштейн видит срочный запрос от Цви. Он действует по запросу, принимая его, таким образом, обходя утверждение двумя менеджерами отдела кадров.
Запрос удаляется из папки "Входящие" Майкла, и процесс найма SDET в настоящее время начался.
Запустить запрос на возобновление
Теперь вакансия ожидает размещения на внешнем веб-сайте, где люди могут подавать заявки (вы можете увидеть это, перейдя по ссылке "Публикация вакансий"). В настоящее время должность находится у представителя отдела кадров, который отвечает за утверждение должности и размещение объявления о ней.
Hr хочет изменить эту позицию задания (щелкнув ссылку " Изменить "), задав время ожидания от 60 минут (в реальной жизни это может быть дней или недель). Тайм-аут позволяет убрать вакансию с внешнего веб-сайта согласно указанному времени.
После сохранения измененной должности она появляется на вкладке «Получение резюме» (обновите веб-страницу, чтобы увидеть новую должность).
Сбор резюме
Позиция задания должна отображаться на внешнем веб-сайте. Как человек, заинтересованный в подаче заявки на работу, вы можете подать заявку на эту позицию и отправить резюме.
Если вернуться в службу списка вакансий, вы можете просмотреть собранные резюме.
Hr также может прекратить сбор резюме (например, после определения подходящего кандидата).
Устранение неполадок
Убедитесь, что вы используете Visual Studio с правами администратора.
Если процесс сборки решения завершился неудачей, проверьте следующее:
- Ссылка на
ContosoHRне отсутствует вInternalClientпроектах илиCareersWebSiteпроектах.
- Ссылка на
Если решение не удается выполнить, проверьте следующее:
Все службы работают.
Ссылки на службы обновляются.
Откройте папку App_WebReferences
Щелкните правой кнопкой мыши Contoso и выберите "Обновить веб-сайты или ссылки на службы".
Перестройте решение, нажав клавиши CTRL+SHIFT+B в Visual Studio.
Удаление
Удалите хранилище экземпляров SQL Server, запустив скрипт Cleanup.bat, расположенный в папке DbSetup.
Удалите исходный код с жесткого диска.