Внедрение GoTo в WF 4 - PullRequest
       27

Внедрение GoTo в WF 4

1 голос
/ 29 ноября 2010

С учетом того, что служба рабочего процесса Windows. Workflow Foundation (WF) в SQL Server, сохраненная в среде Windows Server, развернутая в AppFabric, как я могу "перепрыгнуть" службу из одного действия в другое?Рабочий процесс может быть последовательным или блок-схемой.

Вариант использования - административный.Длительный рабочий процесс простаивает при получении действия A. Некоторые клиенты по ошибке вызывают службу, переводя ее в действие получения B. Рабочий процесс (который может быть встроен в больший рабочий процесс) не имеет пути назад к A. Клиент вызывает службу поддержки.рабочий стол и требует, чтобы рабочий процесс был возвращен к A.

Мы видели, как этот случай часто встречается в производстве.Наша существующая система BPM поддерживает вызов goto.Как это может быть выполнено в WF 4?

РЕДАКТИРОВАТЬ: Если вышеприведенное нецелесообразно, каков хороший шаблон проектирования для реализации действия «сбой» из «счастливого пути»что может перейти к одному из ограниченного числа известных предыдущих действий (перезапустить отсюда) на основе переменной?Цель состоит в том, чтобы избежать создания нечитаемого рабочего процесса с множеством строк.

РЕДАКТИРОВАТЬ 2: Мы решили не идти по этому пути, но есть более новая статья MSDN делать только это.

РЕДАКТИРОВАТЬ 3: Мы снова передумали и продолжаем с решением Леона Велицкого из статьи MSDN, связанной выше.:)

1 Ответ

2 голосов
/ 30 ноября 2010

Это не может быть сделано из коробки.

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

Предположим, что я собираюсь попробовать это, я буду пытаться копировать состояние из базы данных SQL каждый раз, когда рабочий процесс простаивает, так что вы получаете вид стека со всемисостояния простоя рабочего процесса.Затем в более позднее время, когда рабочий процесс простаивает и не находится в памяти, вы можете заменить текущее состояние предыдущим состоянием и перезагрузить рабочий процесс.Я никогда не пробовал, поэтому не знаю, сработает ли это, и вижу немало потенциальных проблем, думает, что транзакция с БД конкурировала, или электронные письма были отправлены, но выполняются во второй раз.

...