Activiti Избегайте нескольких пользователей от задачи претензии - PullRequest
0 голосов
/ 27 апреля 2018

В настоящее время у меня есть процесс Пуск -> Начало подпроцесса -> usertask1 -> usertask2 -> end.

Таким образом, процесс запускается со списком идентификаторов для каждого идентификатора. Мы создаем подпроцесс с помощью start -> usertask1 -> usertask2 -> end. usertask1 может быть назначен на группы A и B usertask2 может быть отнесен к Кандидатской группе B

Теперь в моем случае использования, если пользователь candidategroup B получает usertask1, он не может получить usertask2. Как этого добиться?

Моя работа до сих пор.

Добавлено выражение для назначения usertask2

и б

   taskService.createTaskQuery().processDefinitionId(delegateTask.getProcessDefinitionId()).orderByTaskCreateTime().asc().list()

Но это дает всю задачу внутри процесса, а не подпроцесс.

У меня даже есть служба истории. Я могу получить задачи процесса, но я хочу только подпроцесса.

пожалуйста, совет

1 Ответ

0 голосов
/ 30 апреля 2018

Если ваш подпроцесс имеет ключ определения процесса, вы можете попробовать выполнить запрос с помощью .processDefinitionKey вместо processDefinitionId. Например, вы можете увидеть, что он установлен на https://github.com/Activiti/Activiti/blob/develop/activiti-engine/src/test/resources/org/activiti/engine/test/api/task/TaskQueryTest.testProcessDefinition.bpmn20.xml#L7 и используется в https://github.com/Activiti/Activiti/blob/126e89911d49c6ec0ab3f222baeea2a256e24c0d/activiti-engine/src/test/java/org/activiti/engine/test/api/task/TaskQueryTest.java#L1874

Или, если вы действительно заинтересованы в конкретной задаче или наборе задач, вы можете дать этим задачам имена и запросить задачи, соответствующие этому имени (https://community.alfresco.com/thread/223377-throws-exception-taskservicecreatetaskquerytaskname) или именам (в этом случае это taskNameIn).

Вы также можете установить переменную в экземпляре процесса во время выполнения task1 и использовать значение этой переменной в своем запросе. Например, вы можете установить переменную с именем 'actionedTask1' и записать идентификатор пользователя, который выполнил действие task1. Тогда я думаю, что вы можете запросить processVariableValueNotEquals ("actionedTask1", ​​идентификатор пользователя), чтобы найти задачи, которые не были выполнены текущим пользователем.

Еще один момент, на который следует обратить внимание: у вас есть доступ к DelegateTask, так что вы можете перейти оттуда к DelegateExecution, и оттуда вы сможете получить идентификаторы экземпляра процесса и родительского экземпляра процесса. Затем вы можете использовать runTimeService для запроса экземпляра и использовать его для получения ProcessDefinition, к которому принадлежит экземпляр. Но я не уверен, действительно ли ваша основная проблема связана с подпроцессом или с назначением задачи. Если речь идет о назначении задачи и запросах, как я предлагал, не подходит, то вы можете посмотреть Динамически настраиваемый пользователь задачи:

...