Должен ли я использовать конечный автомат или последовательность операций в WF? - PullRequest
2 голосов
/ 16 сентября 2008

У меня повторяемый бизнес-процесс, который я выполняю каждую неделю в рамках своих обязанностей по управлению конфигурацией. Процесс не меняется: я загружаю детали изменений в Excel, открываю электронную таблицу и копирую детали на основе макроса, создаю документ Word из шаблона повестки дня, обновляю повестку дня данными Excel, создаю PDF-файлы из документа Word и отправить их по электронной почте.

Этот процесс очень легко представить в последовательном рабочем процессе, и так оно и есть, благодаря автоматизации COM для автоматической обработки фрагментов Excel и Word. Ключ в механизмах заключается в том, что между «создать повестку дня» и «отправить ее» существует человеческий шаг, в котором я просматриваю детали изменений и формулирую вопросы о них, которые добавляются в повестку дня. В настоящее время у меня есть действие Suspend, чтобы приостановить рабочий процесс, пока я выполняю эту часть процесса вручную.

Мой вопрос заключается в том, должен ли я переписать свой рабочий процесс, чтобы сделать его конечным автоматом, который следовал бы передовым методам взаимодействия человека в бизнес-процессе, или операция Suspend является разумным решением?

Ответы [ 2 ]

2 голосов
/ 16 сентября 2008

Обновление: Panos делает хорошее замечание о Suspend Activity. Я согласен, что в автомате рабочего процесса это имеет другое назначение.

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

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

2 голосов
/ 16 сентября 2008

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

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

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

Источник: MSDN

Типичным способом добавления неавтоматизированной задачи в рабочий процесс (последовательность или конечный автомат) является определение интерфейса внешнего обмена данными и использование действия HandleExternalEvent (и, возможно, действия CallExternalMethod). Для более подробной информации, пожалуйста, смотрите следующие статьи:

...