Каков лучший дизайн для веб-приложения, которое принимает WF? - PullRequest
11 голосов
/ 25 мая 2011

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

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

В прототипе мы успешно включили рабочий процесс, и он отлично работает. однако мы не можем определить действия, которые должны быть доступны пользователю. Например, у меня есть следующие операции получения: create (), managerApprove (), RAApprove (), ORMApprove () .. теперь, если я вызову их по порядку, используя правильное имя пользователя, они будут работать. Очевидно, что если я не вызову их по порядку, то будет выдано исключение FaultException, поскольку оно не в правильном состоянии. Вопрос в том, как я узнаю, какие функции доступны для отображения в пользовательском интерфейсе - скажем, если в данный момент он ожидает одобрения менеджера, просто покажите кнопку одобрения для менеджера ...

В качестве обходного пути я создал еще одну службу WCF, которая извлекает те же данные из базы данных, а затем определяет правильное состояние пользовательского интерфейса (какие действия может выполнять пользователь). Я думаю, что это дублирование логики, поскольку это уже предполагается в WF.

Кроме того, если WF изменится, это может привести к поломке моей отдельной службы WCF. Например, если я переключаю порядок утверждения в рабочем процессе, мне нужно обновить логику и в службе WCF. В противном случае будет показано неверное состояние страницы, а нажатие кнопки «Подтвердить» вызовет неправильный метод и вызовет исключение FaultException.

Любая помощь будет высоко оценена ... Я действительно новичок в WF4.

UPDATE:

Мой коллега поставил мой вопрос так:

Какой лучший дизайн для веб-приложения, в котором используется WF?

Основные причины, по которым WF рассматривается - вовлеченные рабочие процессы являются долгосрочными - Рабочие процессы - это человеческие рабочие процессы - они должны координировать действия реальных людей - прозрачность процесса

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

Ответы [ 2 ]

5 голосов
/ 25 мая 2011

Сам рабочий процесс не предоставляет информацию напрямую. Он существует, поскольку каждый ожидающий получение является именованной закладкой, а имя закладки содержит поддерживаемое действие SOAP, а также контракт на обслуживание и пространство имен. Самый простой способ добиться этого - добавить SqlWorkflowInstanceStore в WorkflowServiceHost и проверить столбец с ожидающими закладками. Это не идеально, так как это даст вам информацию, поскольку она была сохранена в последний раз, которая не обязательно является текущим состоянием, но она работала для меня во многих приложениях. Просто убедитесь, что для TimeToPersist установлено довольно низкое значение, и добавьте некоторые действия Persist в стратегических местах.

0 голосов
/ 06 июня 2011

Очень простым подходом будет моделирование рабочего процесса путем управления статусом утверждений. Представьте, что у вас есть разные кнопки / страницы для разных пользователей, чтобы утверждать разные этапы («создание», «утверждение менеджера», «утверждение РА» и т. Д.) Процесса утверждения. Это очень старый школьный подход.

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

Если вы хотите использовать Workflow Foundation, самый простой способ - это то, что предложил Морис.

Другой вариант - использовать другие инструменты, которые будут масштабироваться больше и будут более гибкими, чем WF. Я использовал WF (но не самый последний выпуск), BizTalk и SharePoint.

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

...