Программно отменить рабочий процесс SharePoint - PullRequest
7 голосов
/ 26 июня 2009

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

Вопрос в том, как прекратить рабочий процесс изнутри рабочего процесса, как если бы я нажимал кнопку «Завершить рабочий процесс» на веб-странице SharePoint.

[Update] Я пробовал SPWorkflowManager.CancelWorkflow (), который действительно отменяет рабочий процесс, но не сразу. То, что происходит, - это код для отмены запусков, но затем мой рабочий процесс продолжает создавать следующую задачу, а затем переходит в спящий режим, когда он выполняет следующие задачи в операции TasksChanged. Только после того, как он переходит в спящий режим, рабочий процесс прерывается, а не при вызове CancelWorkflow.

Это вызывает очевидную проблему: я не хочу, чтобы была создана следующая задача. Я звоню CancelWorkflow, потому что я хочу, чтобы он отменил то и дело.

Ответы [ 3 ]

9 голосов
/ 26 июня 2009

Есть несколько предложений по этой теме MSDN:

Программное завершение рабочего процесса SharePoint

Вот сообщение в блоге, которое кратко содержит ту же самую информацию: Отмена рабочего процесса SharePoint

Наконец, и наиболее конкретно, вам нужно использовать статический метод: SPWorkflowManager.CancelWorkflow(SPWorkflow workflowInstanceToBeCancelled)

РЕДАКТИРОВАТЬ

CancelWorkflow - статический класс, поэтому я изменил вызов.

0 голосов
/ 26 июля 2014

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

SPWorkflowManager.CancelWorkflow(workflowProperties.Workflow);
throw new Exception();

workflowProperties в этом примере равно

public SPWorkflowActivationProperties workflowProperties = 
           new SPWorkflowActivationProperties();

Метод CancelWorkflow помечает рабочий процесс как «отменяющий», но не останавливает его до паузы (например, ожидания события ontaskchanged) или исключения в рабочем процессе. Поэтому следующая инструкция throw new Exception () остановит рабочий процесс и установит его статус «Отменено».

0 голосов
/ 29 июня 2009

Я не уверен, что это лучший способ, но я просто улавливаю ошибку, регистрирую ее, а затем повторно выкидываю. Это приводит к состоянию «Произошла ошибка» в списке и немедленно останавливает рабочий процесс.

protected override ActivityExecutionStatus Execute(ActivityExecutionContext provider)
{
    try
    {
        // do work
        // ...
    }
    catch (Exception e)
    {
        // log the error to the history list
        // ...
        throw;
    }

    return ActivityExecutionStatus.Closed;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...