...

Что за программа workflow

Windows Workflow Foundation – для чего и в каких случаях применять

Помню, еще в университете перед реализацией любого алгоритма мы описывали его в виде блок схемы, и только после этого переходили непосредственно к кодированию. Workflow, как одна из парадигм программирования, на ряду с процедурным и объектно ориентированным подходами, как раз и позволяет нам визуально реализовать любой процесс, используя набор предопределенных функциональных блоков (Activity), при этом, избавляя от его последующего кодирования.

Библиотека WF, являясь одной из реализаций парадигмы Workflow, предоставляет следующие основные возможности:

— богатый набор функциональных блоков;
— расширение набора стандартных функциональных блоков пользовательскими;
— сохранение и возобновление экземпляров Workflow в процессе их исполнения;
— использование Workflow дизайнера в вашем приложении;
— интеграция с WCF;
— пошаговая диагностика непосредственно в Workflow дизайнере;
— и многое другое.

Критерии применения

Как известно, каждой технологии своя область применения. Для определения необходимости использования WF при реализации конкретного алгоритма/процесса я применяю 3 критерия:

1. Реализация алгоритма/процесса постоянно меняется.

В нашей компании мы разработали подсистему Workflow, которая является ядром всех продуктов. Имея, к примеру, десятки клиентов наших продуктов, у которых десятки процессов, получаем сотни разных изменяющихся процессов.

2. Процесс/алгоритм имеет длительный срок выполнения.

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

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

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

Таким образом, если актуально хотя бы одно из выше перечисленных требований, следует рассмотреть WF как возможный вариант реализации алгоритма/процесса.

Ознакомительный пример

В качестве ознакомительного примера использования WF я как раз и реализую Workflow процесс, который ответит на вопрос о целесообразности использования WF.
1. Создаю новый проект IsWWFUsefullSample используя шаблон Blank Solution:

2. Добавляю новый проект IsWWFUsefullSample.Activities используя шаблон Activity Designer Library:

3. Удаляю сущеcтвующий файл ActivityDesigner1.xaml и добавляю новый элемент используя шаблон Activity:

4. Открываю Activity в дизайнере и добавляю необходимые параметры типа Boolean:

— три входящих параметра соответствующих нашим критериям: IsLongRunning, IsChangeable, IsDesignerNecessary;

— один исходящий параметр для возврата результата: Result.

Стоит упомянуть, что на данный момент для описания выражений и типов внутри Workflow Activity можно использовать только синтаксис VB.Net. Обещают добавить поддержку С#.

5. Для анализа входящих праметров использую три вложенных If Activities (Toolbox -> Control Flow -> If), хотя конечно можно обойтись и одним. Для присвоения результата использую Assign Activity (Toolbox -> Primitives -> Assign). В итоге получается следующий алгоритм:

6. Workflow процесс готов. Для его использования добавляю новое приложение IsWWFUsefullSample.TestClient на основании шаблона Workflow Console Application:

7. Удаляю файл Workflow1.xaml.

8. Добавляю ссылку на проект IsWWFUsefullSample.Activities.

9. Реализую Main метод. Он предлагает пользователю ответить на три вопроса, запускает процесс Workflow с полученными исходными данными и выводит результат вычисления.

namespace IsWWFUsefullSample.TestClient
using System;
using System.Activities;
using System.Collections.Generic;
using System.Linq;
using System.Text;

///

/// Console program class.
///

public class Program
///

/// Program starting point.
///

///

Program parameters.public static void Main(string[] args)
// Question answers
const string Yes = «yes»;
const string No = «no»;
var answers = new List < Yes, No >;

// Create new activity instance
var activity = new IsWWFUsefull();
var parameters = new Dictionary();

do
Console.WriteLine(«Please, answer following questions to determine necessity of using WWF.»);
Console.WriteLine();

// Read activity input parameters
parameters[«IsLongRunning»] = ReadAnswer(«Is process/algorithm long running?», answers) == Yes;
parameters[«IsChangeable»] = ReadAnswer(«Is process/algorithm frequently changed?», answers) == Yes;
parameters[«IsDesignerNecessary»] =
ReadAnswer(«Do you need a visual designer for your process/algorithm?», answers) == Yes;

// Execute activity
var result = WorkflowInvoker.Invoke(activity, parameters);

// Show result
Console.WriteLine();
if ((bool)result[«Result»])
Console.WriteLine(«Use WWF!»);
>
else
Console.WriteLine(«You don’t need WWF but still can use it if you like it :).»);
>
Console.WriteLine(«———————————————————————«);
Console.WriteLine();
>
while (ReadAnswer(«Do you want to proceed?», answers) == Yes);

///

/// Read answer from console.
///

///

Question text./// A list of posible/// Answer text.
private static string ReadAnswer(string question, IList answers)
// Prepare answers prompting string
var answersString = new StringBuilder();
for (var i = 0; i < answers.Count; i++)
answersString.AppendFormat(i == 0 ? «» : «/», answers[i]);
>

// Read and validate the answer
var text = string.Empty;
var answer = string.Empty;
do
if (!string.IsNullOrEmpty(text))
Console.WriteLine(
string.Format(«» doesn’t belong to list of posible answers: ».», text, answersString));
>

Console.Write(string.Format(» (): «, question, answersString));

text = Console.ReadLine();
answer = answers.Where(a => a == text.ToLower()).FirstOrDefault();
>
while (answer == null);

10. Запускаю и тестирую приложение:

Исходники проекта можно загрузить здесь.

Всем удачных архитектурных решений и приятного кодирования!

Общие сведения о Windows Workflow

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

Среда выполнения рабочих процессов

Каждый работающий экземпляр рабочего процесса создается и обслуживается внутрипроцессной подсистемой среды выполнения, с которой ведущий процесс взаимодействует с помощью одного из следующих инструментов:

  • WorkflowInvoker, который вызывает рабочий процесс как метод.
  • WorkflowApplication для явного управления выполнением одного экземпляра рабочего процесса.
  • WorkflowServiceHost для взаимодействия с помощью сообщений в многоэкземплярных сценариях.

Каждый из этих классов является оболочкой для среды выполнения основной операции, представленной как объект ActivityInstance, ответственный за выполнение операции. В домене приложения может быть несколько объектов ActivityInstance, работающих параллельно.

Каждый из трех предыдущих объектов взаимодействия узлов создается из дерева операций, называемого программой рабочего процесса. Используя эти типы или пользовательский узел, который создает оболочку ActivityInstance, рабочие процессы можно выполнять в любом процессе Windows, включая консольные приложения, приложения на основе форм, службы Windows, веб-сайты ASP.NET и службы Windows Communication Foundation (WCF).

Компоненты рабочего процесса в хост-процессе

Взаимодействие между компонентами рабочего процесса

На следующей диаграмме показано взаимодействие компонентов рабочего процесса.

На предыдущей диаграмме используется метод Invoke класса WorkflowInvoker для вызова нескольких экземпляров рабочего процесса. WorkflowInvoker используется для упрощенных рабочих процессов, не требующих управления с сервера. Рабочие же процессы, требующие управления с сервера (например, возобновление Bookmark), должны выполняться с помощью Run. Чтобы вызвать экземпляр рабочего процесса, не обязательно ждать завершения другого. Среда выполнения допускает одновременное выполнение нескольких экземпляров рабочего процесса. Вызываются следующие рабочие процессы:

  • Действие Sequence, содержащее дочернее действие WriteLine. Переменная Variable родительского действия привязана к InArgument дочернего действия. Дополнительные сведения о переменных, аргументах и привязке см. в разделе Переменные и аргументы.
  • Настраиваемое действие ReadLine . OutArgument действия ReadLine возвращается в вызывающий метод Invoke.
  • Настраиваемое действие, происходящее от абстрактного класса CodeActivity. CodeActivity может обращаться к возможностям среды выполнения (например, к отслеживанию и свойствам) с помощью CodeActivityContext, доступного в качестве параметра метода Execute. Дополнительные сведения об этих функциях времени выполнения см. в разделах Отслеживание и трассировка рабочих процессов и Свойства выполнения рабочих процессов.

См. также раздел

Обзор системы workflow-процессов

Функции, перечисленные в этой статье, в настоящее время доступны в изолированном приложении Dynamics 365 Human Resources и в объединенной инфраструктуре Finance. Навигация может отличаться от указанной после обновлений. Если требуется найти определенную страницу, можно воспользоваться поиском.

В этой статье описывается система workflow-процессов.

Что такое Wokrflow?

Термин workflow-процесс можно определить 2 способами: как система и как бизнес-процесс.

Документооборот как система

Рабочий процесс — это система, которая выполняется на сервере Application Object Server (AOS). Система workflow-процессов предоставляет функции, позволяющие создавать отдельные workflow-процессы, или бизнес-процессы.

Документооборот как бизнес-процесс

workflow-процесс представляет бизнес-процесс. Он определяет потоки, или перемещения, документа по системе, показывая, кто должен выполнить задачу, принять решение или утвердить документ. Например, на следующем рисунке показан workflow-процесс для отчетов о расходах.

Для прояснения этого workflow-процесса предположим, что Сэм подает отчет о расходах на сумму USD 7000. В этом случае Иван должен рассмотреть приходы, направленные ему Сэмом. Затем Фрэнк и Сью должны утвердить отчет о расходах. Теперь предположим, что Сэм подает отчет о расходах на сумму 11 000 USD. В этом случае Иван должен рассмотреть чеки, а Фрэнк, Сью и Анна должны утвердить отчет о расходах.

Преимущества использования системы workflow-процессов

Имеется несколько преимуществ использования системы workflow-процессов в организации:

  • Непротиворечивые процессы — можно определить как обрабатываются определенные документы, таких как заявки на покупку и отчеты по расходам. Использование системы workflow-процессов может обеспечить обработку и утверждение документов непротиворечивым и эффективным образом.
  • Видимость процессов — можно отслеживать статус, историю и метрики производительности экземпляров workflow-процесса. Это позволяет определить, должны ли быть внесены изменения в workflow-процесс для повышения эффективности.
  • Централизованный список работ — Пользователи могут просматривать централизованный список работ, отображающий задачи workflow-процесса и утверждения, назначенные им.

Содержимое workflow-процесса

  • Архитектура системы бизнес-правил
  • Элементы бизнес-правила
  • Действия в процессах утверждения бизнес-правил
  • Обзор создания бизнес-правил
  • Настройка свойств рабочего процесса
  • Настройка ручных задач в workflow-процессе
  • Настройка автоматизированных задач в workflow-процессе
  • Настройка процессов утверждения в workflow-процессе
  • Настройка этапов утверждения в workflow-процессе
  • Настройка ручных решений в workflow-процессе
  • Настройка условных решений в workflow-процессе
  • Настройка параллельных действий в workflow-процессе
  • Настройка параллельных ветвей в workflow-процессе
  • Настройка бизнес-правил по строке
  • Вопросы и ответы по рабочим процессам

При подготовке материала использовались источники:
https://habr.com/ru/articles/125008/
https://learn.microsoft.com/ru-ru/dotnet/framework/windows-workflow-foundation/overview
https://learn.microsoft.com/ru-ru/dynamics365/fin-ops-core/fin-ops/organization-administration/overview-workflow-system

Оцените статью