В настоящее время мы создаем приложение, которое использует непростой процесс утверждения, который включает в себя несколько уровней одобрения, возврата, просмотра, уведомлений и т.д.
Из-за указанного требования нас попросили также использовать структуру рабочего процесса, чтобы облегчить прозрачность процесса.
В прототипе мы успешно включили рабочий процесс, и он отлично работает. однако мы не можем определить действия, которые должны быть доступны пользователю. Например, у меня есть следующие операторы получения: create(), managerApprove(), RAApprove(), ORMApprove().. теперь, если я их вызову в порядке, используя правильное имя пользователя, тогда они будут работать. Очевидно, если я не буду их приводить по порядку, тогда он выкинет исключение FaultException, потому что оно не в правильном состоянии. Вопрос в том, как я узнаю, какие функции доступны для экспонирования в пользовательском интерфейсе - скажем, если в настоящее время он ждет одобрения менеджера, просто покажите кнопку подтверждения для менеджера...
В качестве обходного пути я создал еще одну службу WCF, которая извлекает те же данные из базы данных и затем определяет правильное состояние пользовательского интерфейса (какие действия могут выполнять пользователь). Я думаю, что это дублирование логики, так как это предполагается в WF уже.
Кроме того, если WF изменяется, то моя отдельная служба WCF может потенциально сломаться. Например, если я переключу заказ утверждения в рабочий процесс, мне также необходимо обновить логику в службе WCF. В противном случае он отобразит недопустимое состояние страницы, и нажатие кнопки подтверждения приведет к неправильному методу и вызовет исключение FaultException.
Любая помощь будет очень оценена... Я действительно новичок в WF4.
UPDATE:
Мой коллега поставил мой вопрос таким образом:
Какой лучший дизайн для веб-приложения, использующего WF?
Основные причины, по которым рассматривается WF - Применяемые рабочие процессы долго выполняются - Рабочие процессы - это человеческие рабочие процессы - им необходимо координировать действия реальных людей - Прозрачность процесса
Также, как рабочий процесс интегрируется с пользовательским интерфейсом? - как UI узнает, в каком состоянии должно быть и на каких страницах показывать, какие пользователи?