目前我有一个流程开始 - >子流程开始 - > 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()
但是这给了进程内的所有任务而不是子进程。
我甚至有历史服务。我可以获得该过程的任务,但我只想要子过程。
请咨询
答案 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