Запустить / завершить службу Workflow из двух разных действий - PullRequest
0 голосов
/ 27 февраля 2012

У меня есть рабочий процесс (прикрепленное изображение) с двумя действиями Recieve (Start и Finish). Оба действия соотносятся с параметром WorkflowId. У меня также есть параметр FinishWorkflow (bool).

Я хотел запустить рабочий процесс с помощью Start Action, а затем подождать, пока параметр FinishWorkflow изменится на true (с помощью действия FinishWorkflow).

Я думаю, что когда действие FinishWorkflow завершено, весь рабочий процесс завершается, поэтому действие StartWorkflow не ожидает и не проверяет параметр FinishWorkflow. Знаете ли вы, как изменить действие FinishWorkflow, чтобы оно не заканчивало весь рабочий процесс?

ТИА

enter image description here

1 Ответ

3 голосов
/ 27 февраля 2012

Да, ваш сценарий немного сложен для понимания.Почему ваш стартовый рабочий процесс в пике?Вы ожидаете отменить операцию «Начать рабочий процесс»?

Вы, конечно, могли бы вообще избавиться от пиков и получить последовательность с помощью «Начать рабочий процесс» -> «Сделать некоторые вещи» -> «Завершить рабочий процесс», но я подозреваю, что это только потому, что ваша диаграммаупрощение сценария.

Возможно, вы должны спросить себя:

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

Если ничего из вышеперечисленного не применимо, поскольку вы используете одностороннюю передачу сообщений, то один способ атаковатьпроблема заключается в том, чтобы держать FinishWorkflow внутри цикла while с условием, установленным в «FinishWorkflow = false», поэтому он будет продолжать цикл до последнего вызова после того, как для переменной FinishWorkflow установлено значение true.Затем вы можете избавиться от Inner Pick, Branch2, задержки и т. Д. Единственный нужный вам пик - после Start и ветки 1 будет содержаться ваше время с финишем внутри, а Branch два будет содержать любой код вычисления, который у вас есть, когдаготово, установит для переменной окончания рабочего процесса значение true.

Помните, что действие получения заблокирует текущую ветвь и будет ждать сообщения, поэтому вам не требуется задержка для продолжения проверки значения, фактически сзадержка, ваша активность будет без необходимости просыпаться и искать вход, когда его не было.Довольно дорогой и не масштабируемый.

...