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


Процесс корпоративных закупок

Данный раздел относится к версии Windows Workflow Foundation 4.

Этот образец показывает, как создать очень простой запрос предложений на основе процесса покупки с автоматическим выбором наилучшего предложения. В нем совместно применяются операторы Parallel, ParallelForEach и ForEach, а также пользовательское действие для создания рабочего потока, который представляет процесс.

Этот образец содержит клиентское приложение ASP.NET, которое обеспечивает взаимодействие с процессом в качестве различных участников (исходной запрашивающей стороны или конкретного поставщика).

Требования

  • Visual Studio 2010.

  • .NET Framework, версия 4.

Демонстрации

  • Настраиваемые действия.

  • Сочетание действий.

  • Закладки.

  • Сохраняемость.

  • Схематизированная сохраняемость.

  • Трассировка.

  • Отслеживание.

  • Размещение WF в различных клиентах (веб-приложения ASP.NET и приложения WinForms).

Dd807514.Important(ru-ru,VS.100).gif Примечание
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).

<диск_установки>:\WF_WCF_Samples

Если этот каталог не существует, перейдите на страницу Образцы Windows Communication Foundation (WCF) и Windows Workflow Foundation (WF) для .NET Framework 4, чтобы загрузить все образцы Windows Communication Foundation (WCF) и WF. Этот образец расположен в следующем каталоге.

<диск_установки>:\WF_WCF_Samples\WF\Application\PurchaseProcess

Описание процесса

В этом образце показана реализация программы Windows Workflow Foundation (WF) для сбора предложений от поставщиков в интересах типичной компании.

  1. Сотрудник компании X создает запрос предложений.

    1. Сотрудник вводит название и описание запроса предложений.

    2. Сотрудник выбирает поставщиков, которых он желает пригласить для передачи предложений.

  2. Сотрудник передает предложение.

    1. Создается экземпляр рабочего процесса.

    2. Рабочий процесс ожидает, чтобы все поставщики передали свои предложения.

  3. После получения всех предложений рабочий процесс обрабатывает в цикле все полученные предложения и выбирает наилучшее.

    1. Каждый поставщик имеет репутацию (в этом образце список репутаций сохраняется в VendorRepository.cs).

    2. Общая стоимость предложения определяется по формуле (Стоимость, предложенная поставщиком)*(Зарегистрированный показатель репутации поставщика) / 100.

  4. Исходная запрашивающая сторона может видеть все переданные предложения. Наилучшее предложение представлено в специальном разделе отчета.

Определение процесса

В основной логике образца используется действие ParallelForEach, которое ожидает предложения от каждого поставщика (с применением пользовательского действия, которое создает закладку) и регистрирует предложение поставщика как запрос предложений (с применением действия InvokeMethod).

Затем в образце выполняется обработка в цикле всех полученных предложений, сохраненных в RfpRepository, вычисление откорректированного значения (с использованием действия Assign и действий System.Activities.Expressions), и если откорректированное значение оказывается лучше по сравнению с предыдущим наилучшим предложением, присваивание нового значения как наилучшего предложения (с использованием действий If и Assign).

Проекты в этом образце

Этот образец содержит следующие проекты.

Проект Описание

Common

Объекты сущности, используемые в процессе («Запрос предложения», «Поставщик» и «Предложение поставщика»).

WfDefinition

Определение процесса (как программы WF) и узел (PurchaseProcessHost), используемый клиентскими приложениями для создания и использования экземпляров рабочего потока процесса покупки.

WebClient

Клиентское приложение ASP.NET, которое позволяет пользователям создавать и участвовать в работе экземпляров процесса покупки. Для взаимодействия с подсистемой рабочих процессов используется настраиваемый сервер.

WinFormsClient

Клиентское приложение Windows Forms, которое позволяет пользователям создавать и участвовать в работе экземпляров процесса покупки. Для взаимодействия с подсистемой рабочих процессов используется настраиваемый сервер.

WfDefinition

В следующей таблице содержится описание наиболее важных файлов в проекте WfDefinition.

Файл Описание

IPurchaseProcessHost.cs

Интерфейс для узла рабочего процесса.

PurchaseProcessHost.cs

Реализация узла для рабочего процесса. Узел позволяет абстрагироваться от подробных сведений о среде выполнения рабочего процесса и используется во всех клиентских приложениях для загрузки, запуска и взаимодействия с экземплярами рабочего процесса PurchaseProcess.

PurchaseProcessWorkflow.cs

Действие, которое содержит определение рабочего процесса покупки (происходит от Activity).

Действия, которые происходят от Activity, формируют функциональные возможности, выполняя сборку существующих пользовательских действий и действий из библиотеки действий .NET Framework, версия 4. Сборка этих действий является наиболее простым способом создания пользовательских функциональных возможностей.

WaitForVendorProposal.cs

Это пользовательское действие происходит от NativeActivity и создает именованную закладку, которая должна быть возобновлена в дальнейшем поставщиком путем передачи предложения.

Действия, которые являются производными от NativeActivity аналогично производным действиям от CodeActivity, создают императивные функции путем переопределения Execute, но также имеют доступ ко всем функциям среды выполнения рабочего процесса благодаря ActivityContext, который передается методу Execute. Этот контекст поддерживает планирование и отмену дочерних действий, подготовку к работе зон, не обеспечивающих сохраняемость (блоков выполнения, в ходе работы которых среда выполнения не сохраняет данные рабочего потока, как при неразрывных транзакциях), и объекты Bookmark (маркеры возобновления приостановленных рабочих процессов).

TrackingParticipant.cs

Участник TrackingParticipant, который получает все события отслеживания и сохраняет их в текстовом файле.

Участники отслеживания добавляются к экземпляру рабочего процесса как расширения.

XmlWorkflowInstanceStore.cs

Пользовательское хранилище InstanceStore, которое сохраняет приложения рабочего процесса в XML-файлах.

XmlPersistenceParticipant.cs

Пользовательское хранилище PersistenceParticipant, которое сохраняет экземпляр запроса предложения в XML-файле.

AsyncResult.cs / CompletedAsyncResult.cs

Вспомогательные классы для реализации асинхронной технологии в компонентах сохраняемости.

Common

В следующей таблице содержится описание наиболее важных классов в проекте Common.

Класс Описание

Vendor

Поставщик, который передает предложения в запросе предложений.

RequestForProposal

Запрос предложений представляет собой приглашение для поставщиков, согласно которому они должны передать предложения по конкретному товару или услуге.

VendorProposal

Предложение, переданное поставщиком в ответ на конкретный запрос предложений.

VendorRepository

Репозиторий поставщиков. Эта реализация содержит в оперативной памяти коллекцию экземпляров поставщиков и методов доступа к этим экземплярам.

RfpRepository

Репозиторий запросов предложений. Эта реализация содержит примеры использования Linq to XML для запроса XML-файла запросов предложений, созданного схематизированными средствами обеспечения сохраняемости. Этот класс реализует IDataViewMapper.

IOHelper

Этот класс разрешает все проблемы, связанные с вводом-выводом (которые касаются папок, путей и т. д.).

Веб-клиент

В следующей таблице содержится описание наиболее важных веб-страниц в проекте веб-клиента.

Файл

Описание

CreateRfp.aspx

Создает и отправляет новый запрос предложений.

Default.aspx

Показывает все активные и завершенные запросы предложений.

GetVendorProposal.aspx

Возвращает предложение от поставщика в конкретном запросе предложений. Эта страница используется только поставщиками.

ShowRfp.aspx

Выводит все сведения о запросе предложений (полученные предложения, даты, стоимость и другие данные). Эта страница используется только создателем запроса предложений.

Клиент WinForms

В следующей таблице содержится описание наиболее важных форм в проекте WinForms.

Форма

Описание

NewRfp

Создает и отправляет новый запрос предложений.

ShowProposals

Показывает все активные и завершенные запросы предложений.

Dd807514.note(ru-ru,VS.100).gifПримечание
Может потребоваться нажать кнопку Обновить в пользовательском интерфейсе для просмотра изменений на этом экране после создания или изменения запроса предложений.

SubmitProposal

Возвращает предложение от поставщика в конкретном запросе предложений. Это окно используется только поставщиками.

ViewRfp

Выводит все сведения о запросе предложений (полученные предложения, даты, стоимость и другие данные). Это окно используется только создателем запроса предложений.

Файлы сохраняемости

В следующей таблице показаны файлы, созданные поставщиком сохраняемости (XmlPersistenceProvider), которые находятся в пути к временной папке текущей системы (использующей GetTempPath). Файл трассировки создается в текущем пути выполнения.

Имя файла

Описание

Путь

rfps.xml

XML-файл со всеми активными и завершенными запросами предложений.

GetTempPath

[instanceid]

Этот файл содержит все сведения об экземпляре рабочего процесса.

Этот файл создается схематизированной реализацией сохраняемости (PersistenceParticipant в XmlPersistenceProvider).

GetTempPath

[instanceId].tracking

Текстовый файл со всеми событиями, которые произошли в конкретном экземпляре.

Этот файл создается объектом TrackingParticipant.

GetTempPath

PurchaseProcess.Tracing.TraceLog.txt

Файл трассировки, созданный рабочим потоком на основе параметров конфигурации в файлах App.config или Web.config.

Текущий путь выполнения

Использование этого образца

  1. С использованием Visual Studio 2010 откройте файл решения PurchaseProcess.sln.

  2. Чтобы выполнить проект веб-клиента, откройте Обозреватель решений и щелкните правой кнопкой проект Web Client. Выберите команду Назначить запускаемым проектом.

  3. Чтобы выполнить проект клиента WinForms, откройте Обозреватель решений и щелкните правой кнопкой проект WinForms Client. Выберите команду Назначить запускаемым проектом.

  4. Чтобы построить решение, нажмите клавишу F6.

  5. Чтобы запустить решение, нажмите клавиши CTRL+F5.

Параметры веб-клиента

  • Создание нового запроса предложений — создает новый запрос предложений и запускает рабочий процесс покупки.

  • Обновить: Обновляет список активных и завершенных запросов предложений в главном окне.

  • Представление — показывает содержимое существующего запроса предложений. Поставщики могут передавать свои предложения (если они приглашены или запрос предложений не завершен).

  • Просматривать как — пользователь может обращаться к запросу предложений, используя другие идентификаторы, путем выбора желаемого участника в поле со списком Просматривать как активной таблицы запросов предложений.

Параметры клиента WinForms

  • Создание запроса предложений — создает новый запрос предложений и запускает рабочий процесс покупки.

  • Обновить: Обновляет список активных и завершенных запросов предложений в главном окне.

  • Просмотр запроса предложений — показывает содержимое существующего запроса предложений. Поставщики могут передавать свои предложения (если они приглашены или запрос предложений не завершен).

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