Поддержка человеческой активности в Windows Workflow 4

Я изучаю Windows Workflow (WF) для .NET 4.0, и мне кажется, что кое-что отсутствует. С точки зрения BPM вам нужны концепции рабочих очередей и безопасности (авторизация пользователей).

Например, предположим, что у вас есть несколько экземпляров длительного рабочего процесса из нескольких разных рабочих процессов, запущенных на сервере приложений (например, AppFabric). Несколько экземпляров ожидают в действии вызова от клиента (возможно, приема WCF с корреляцией на основе содержимого). Клиенты должны иметь возможность запрашивать сервер, чтобы определить, какие экземпляры рабочего процесса (из любого рабочего процесса) ожидают ввода от них. Это должно быть основано на правах (желательно с использованием служб Active Directory) на уровне активности.

Например:

  • Workflow 1
    • Activity A, correlated on orderId
      • Rights for: Abby, Bill
    • Activity B, correlated on orderId
      • Rights for: Abby
  • Workflow 2
    • Activity C, correlated on workItemId
      • Rights for: Bill

Рабочий процесс 1 имеет 3 запущенных экземпляра: два - в действии A (заказы 123 и 456) и один - в действии B (заказ 789).
В рабочем процессе 2 один экземпляр выполняется в действии C (рабочий элемент 99).

Билл запрашивает сервер и видит:

Workflow  Activity  Key
1         A         orderId=123
1         A         orderId=456
2         C         workItemId=99

Эбби запрашивает сервер и видит:

Workflow  Activity  Key
1         A         orderId=123
1         A         orderId=456
1         B         orderId=789

В этой статье обсуждается написание функциональности (поддержка человеческой деятельности) с нуля для WF 3. .Икс.

Вопросов:

  1. Есть ли какие-либо из этих функций в WF 4? Если да, то как это называется?
  2. Если нет, существует ли проект с открытым исходным кодом, который добавляет какие-либо из этих функций в WF 4?
  3. Если нет, есть ли более актуальные рекомендации по его реализации, чем в упомянутой выше статье?

Примечание. Я бы предпочел не связывать решение с SharePoint, если я могу этого избежать.


person TrueWill    schedule 12.11.2010    source источник
comment
Я создаю такую ​​систему сейчас и исследую ее несколько месяцев. Это большая работа - к сожалению, я не могу поделиться, так как это коммерческое предприятие. Мой также использует MSMQ в качестве транспорта, поэтому он добавляет еще больше сложностей. Надежный дуплекс, корреляция контекста .NET и многое другое. Удачи!   -  person x0n    schedule 17.11.2010


Ответы (1)


Хорошо, начнем с простых тентов.

  1. Нет, в коробке нет прямой поддержки для этого
  2. Насколько мне известно, не существует проекта ОС, предлагающего эту функциональность.
  3. Не то чтобы я в курсе, но должен признать, что я тоже не знал об этой статье.

Итак, плохие новости.

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

Также существует концепция продвижения свойств в SqlWorkflowInstanceStore, которая позволит вам извлекать и, таким образом, запрашивать переменные рабочего процесса, такие как orderId в вашем примере. Еще одна вещь, которую нужно зарегистрировать, - это человек, запустивший рабочий процесс, поскольку довольно часто определенные действия разрешены только создателем.

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

person Maurice    schedule 15.11.2010
comment
+1, и возможный ответ (я дам время другим). Я рассматривал возможность использования расширения PersistenceParticipant и Promote вместе с SqlWorkflowInstanceStore, как вы предлагаете, и хорошо иметь подтверждение того, что это разумно. Спасибо! - person TrueWill; 15.11.2010