找出候选组的任务的最佳方法是什么?

时间:2015-02-13 07:39:18

标签: process bpm camunda

使用taskQuery

加载任务列表后
taskService.createTaskQuery()
            .processDefinitionKey(PROCESSKEY)
            .taskCandidateGroupIn(list).initializeFormKeys().list()

找出每个task的候选组的最佳方法是什么? 我想在JSF视图中显示它,但类Task没有相应的字段。

3 个答案:

答案 0 :(得分:3)

您可以使用任务服务获取任务的身份链接。在其他关系中,候选组关系表示为身份链接。以下代码过滤了代表候选组的任务的身份链接:

List<IdentityLink> identityLinks = taskService.getIdentityLinksForTask(task.getId());

for (IdentityLink identityLink : identityLinks) {
  String type = identityLink.getType(); 
  /* type corresponds to the constants defined in IdentityLinkType.
  "candidate" identitifies a candidate relation */

  String groupId = identityLink.getGroupId();

  if (IdentityLinkType.CANDIDATE.equals(type) && groupId != null) {
    // we have found a candidate group; do something
  }
}

答案 1 :(得分:3)

最好的方法是编写一个自定义查询,以select的方式为您提供所需的所有任务信息。您不希望开始循环结果列表并为每个项目发送一个或多个查询,尤其是不在高性能应用程序中作为任务列表。

查看custom query documentation了解详情。

答案 2 :(得分:1)

仅选择具有候选组的任务。

List<Task> candidateGroupList = taskService.createTaskQuery().withCandidateGroups().list();