2009-09-06 3 views
7

Я создал рабочий процесс, и я запускаю его через WorkflowInstance.Run(). Этот рабочий процесс имеет множество закладок, и я хотел был бы иметь возможность запросить его, для которого закладка несет ответственность за текущее состояние бездействия.Как запросить экземпляр рабочего процесса для его состояния выполнения

Как я могу это сделать?

Благодаря

ответ

6

для процесса 4.0

Вы можете получить закладки из WorkflowInstance

IEnumerable<BookmarkInfo> bookMarks = workflowInstance.GetAllBookmarks(); 

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

Возможно, вам удастся получить дополнительную информацию, подключив что-то к событию WorkflowInstance.OnIdle. Это не совсем настоящее событие .NET, но оно выполняет одно и то же. Это не скажет вам, почему вы попали в состояние ожидания, но, надеюсь, зная, что время покажет вам больше.

для процесса 3.0

Я не уверен, что это поможет, но так как у вас есть WorkflowInstance вы можете задать его для коллекции объектов WorkflowQueueInfo по телефону GetWorkflowQueueData(). Класс WorkflowQueueInfo сообщит вам, какие действия подписаны на очередь и если в очереди есть элементы. Пустая очередь с действиями, подписанными на нее, может показать вам, что вам нужно. Эти действия ждут чего-то, но делать нечего. Это должна быть закладка, которую вы ищете.

+0

Извините, я забыл уточнить, это WF 4.0, о котором я говорю ... WorkflowInstance.GetWorkflowQueueData не существует в 4.0 – Adam

+0

О, извините. Я должен был понять, что вы имели в виду 4.0, когда вы сказали «Закладка». Я отредактирую ответ. –

+0

В 4.0, где определено значение GetAllBookmarks()? Я не вижу его в System.Workflow.Runtime.WorkflowInstance. – lesscode