WF4: Получить информацию об аргументе / переменной во время простоя - PullRequest
3 голосов
/ 06 апреля 2010

Это похоже на простую проблему: у меня есть действие WF4, которое направляет пользователя через ряд вопросов. После того, как отображается каждый вопрос, действие должно быть приостановлено, пока на вопрос не будет дан ответ. После ответа на каждый вопрос я хочу предложить пользователю следующий вопрос. (Следующий вопрос определяется на основе ответа на предыдущий вопрос.)

Для этого у меня есть простое действие рабочего процесса, которое реализует Закладку. У меня есть консольное приложение, выполняющее рабочий процесс с использованием WorkflowApplication.Run, ожидающий ввода и затем вызывающий .ResumeBookmark.

Что мне нужно сделать, это получить значение Current_Question_Text из рабочего процесса, когда он становится бездействующим. Я установил свойство WorkflowApplication.Idle для делегата, и в этом делегате я хотел бы получить текст текущего вопроса, хранящийся в Activity. Однако выходные аргументы будут недоступны до тех пор, пока не сработает метод Completed, а WorkflowApplicationIdleEventArgs не предоставит никакой информации о текущем состоянии данных.

Я также посмотрел на переменные Activity и WorkflowApplication в делегате Idle и не вижу способа добраться до данных таким образом.

Есть ли способ получить значения данных из Activity, когда она простаивает?

Спасибо, Дэвид Бергетт

1 Ответ

5 голосов
/ 06 апреля 2010

Есть несколько способов сделать это. Что работает лучше всего, зависит от обстоятельств.

  1. Явно сохраните переменную в каком-то внешнем месте, например в базе данных, и попросите клиента прочитать ее оттуда. Легко сделать с помощью пользовательского действия, но добавляет еще одно отключение к вашему приложению.
  2. Используйте постоянство рабочего процесса и продвижение свойства, чтобы извлечь значение и сохранить его в хранилище экземпляров рабочего процесса. С продвинутыми свойствами работать нельзя, и для этого необходимо использовать WorkflowInstanceStore. Также значение обновляется только при сохранении рабочего процесса.
  3. Использование настраиваемого расширения для отслеживания рабочего процесса и извлечение значения с помощью ActivityStateQuery. Я подозреваю, что это будет самый простой подход во многих случаях.
...