Activiti避免用户索取任务

时间:2018-04-27 13:55:27

标签: activiti

目前我有一个流程开始 - >子流程开始 - > usertask1 - > usertask2 - >端。

所以这个过程是以每个id的id列表开始的,我们用start创建一个子进程 - > usertask1 - > usertask2 - >结束。 usertask1可以分配给Candidategroup A和B. usertask2可以被命名为Candidategroup B

现在在我的用例中,如果candidategroup B的用户得到usertask1,他就无法获得usertask2。怎么做到这一点?

我的工作到现在为止。

在指定usertask2

时添加了一个表达式

并使用

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

但是这给了进程内的所有任务而不是子进程。

我甚至有历史服务。我可以获得该过程的任务,但我只想要子过程。

请咨询

1 个答案:

答案 0 :(得分:0)

如果您的子进程有一个进程定义键,那么您可以尝试通过.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)或名称相匹配的任务(在这种情况下它是&#39) ; s taskNameIn)。

您还可以在执行task1期间在流程实例上设置变量,并在查询中使用该变量的值。例如,您可以设置一个名为' actionedTask1'的变量。并记录操作task1的用户的id。然后我认为您可以查询processVariableValueNotEquals(" actionedTask1",用户ID)来查找当前用户未执行的任务。

需要注意的另一点是,您可以访问DelegateTask,因此您可以从那里访问DelegateExecution,从那里您应该能够获取流程实例和父流程实例的ID。然后,您可以使用runTimeService查询实例,并使用它来获取实例所属的ProcessDefinition。但我不确定你的主要问题是关于子进程还是关于任务分配。如果关于我建议的任务分配和查询不合适,那么您可以查看Dynamically setting user task assignee