Реализация GoTo в WF 4

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

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

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

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

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

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


person TrueWill    schedule 29.11.2010    source источник


Ответы (1)


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

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

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

person Maurice    schedule 30.11.2010
comment
Я этого боялся. Есть ли у вас какие-либо предложения по обходным путям (даже если только частичные решения)? - person TrueWill; 30.11.2010
comment
Мое предложение о копировании записи о состоянии рабочего процесса было лучшим решением, которое я мог придумать. Извините, у меня нет лучшего ответа :-( - person Maurice; 01.12.2010