#activiti
#activiti
Вопрос:
В настоящее время у меня есть следующий дизайн процесса:
start-event -> user-task-A -> user-task-B -> end-event
Как показано, за user-task-A следует user-task-B по завершении.
Мне нужно изменить его в соответствии с требованием, в соответствии с которым пользователь, работающий над user-task-A, может приостановить его, потому что у него / нее есть некоторые запросы к нему. Если это произойдет, то user-task-B не будет создаваться, а вместо этого должна быть создана новая задача пользователя для разрешения этих запросов. И когда на эти запросы будут даны ответы, пользовательская задача-A должна быть восстановлена, и следует обычный курс.
Я понимаю, что пользовательские задачи в activiti не могут быть приостановлены. Весь процесс должен быть приостановлен.
Как я могу этого добиться?
Ответ №1:
Ну, вы можете достичь этого, смоделировав это требование в бизнес-процессе:
start -> user-task-A -> exclusive gateway (is task done?)
-> yes -> user-task-B
-> no -> sub process for answering queries
-> go back to user-task-A
Комментарии:
1. Спасибо за входные данные. У меня есть запрос здесь. Не нужно ли нам выполнить user-task-A, чтобы активировать эксклюзивное решение шлюза? И если да, то это означает, что мы не можем вернуться к user-task-A как завершенному.
2. Пользовательскую задачу-A можно выполнить с разными выходными данными.. использование переменной, чтобы процесс мог понять, действительно ли задача была выполнена или для ее решения требуются дополнительные запросы. После разрешения запросов пользовательская задача-A может быть воссоздана с новыми данными, и в этот момент она может быть действительно «логически» завершена.
Ответ №2:
Здесь есть несколько вариантов. Ответ Salaboys является одним из этих вариантов. Когда мне нужно включить фрагменты встроенного процесса, я обычно использую сигнальные события для запуска фрагмента, а затем ожидаю завершения (другого сигнального события) для продолжения.
Этот подход упрощает модель и позволяет вам поддерживать каждый из фрагментов независимо (что-то вроде модульности с согласованным интерфейсом).
Комментарии:
1. «Когда мне нужно включить фрагменты встроенного процесса»… не могли бы вы, пожалуйста, объяснить это немного подробнее?
2. Подход Greg также хорош.. это действительно зависит от требований. Сигналы хороши, и в некоторых случаях это помогает, как только они хорошо поняты и используются последовательно.
3. Manroid, рассмотрите сценарий: task1 -> Task2 -> Task3 -> Task2a -> task2b -> Task3 Task2 и Task2a / Task2b являются независимыми процессами с согласованным интерфейсом (ввод и вывод переменных). Вы можете выборочно вызывать любой из этих потоков как динамический подпроцесс, через эксклюзивный шлюз, через шлюз событий или с использованием сигналов. У всех есть свои преимущества и недостатки в зависимости от сценария. С помощью сигналов каждый из подпотоков (фрагментов) имеет событие запуска сигнала и отправляет завершенный сигнал для освобождения родительского потока.