首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Camunda :获取活动任务

Camunda :获取活动任务
EN

Stack Overflow用户
提问于 2016-09-22 21:52:12
回答 2查看 7.7K关注 0票数 2

如何在Camunda中使用的代码中获取活动任务列表?

我已经看过这个答案"How to query the position of a process instance?“,但我不能理解什么是"processInstanceId”,以及我应该从哪里获得它才能使这个方法工作。

下面是我目前正在尝试的代码:

代码语言:javascript
复制
package org.camunda.bpm;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.camunda.bpm.engine.ProcessEngine;
import org.camunda.bpm.engine.RepositoryService;
import org.camunda.bpm.engine.RuntimeService;
import org.camunda.bpm.engine.runtime.ProcessInstance;
import org.camunda.bpm.model.bpmn.BpmnModelInstance;
import org.camunda.bpm.model.xml.instance.ModelElementInstance;

public class AllActiveActivities {

public Map<String, String> getAllActiveActivities(String processInstanceId) {
// get engine services
ProcessEngine processEngine = BpmPlatform.getDefaultProcessEngine()
RuntimeService runtimeService = processEngine.getRuntimeService();
RepositoryService repositoryService = processEngine.getRepositoryService();

// get the process instance
ProcessInstance processInstance =
    runtimeService.createProcessInstanceQuery()
        .processInstanceId(processInstanceId)
        .singleResult();

HashMap<String, String> activityNameByActivityId = new HashMap<String, String>();

// get all active activities of the process instance
List<String> activeActivityIds =
    runtimeService.getActiveActivityIds(processInstance.getId());

// get bpmn model of the process instance
BpmnModelInstance bpmnModelInstance =
    repositoryService.getBpmnModelInstance(processInstance.getProcessDefinitionId());

for (String activeActivityId : activeActivityIds) {
  // get the speaking name of each activity in the diagram
  ModelElementInstance modelElementById =
      bpmnModelInstance.getModelElementById(activeActivityId);
  String activityName = modelElementById.getAttributeValue("name");

  activityNameByActivityId.put(activeActivityId, activityName);
}

// map contains now all active activities
return activityNameByActivityId;
}

}

提前感谢您的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-23 01:52:27

下面的语句将返回所有活动任务,这些任务也可以是独立任务。

代码语言:javascript
复制
processEngine.getTaskService().createTaskQuery().active().list()

如果希望获得与特定运行进程相对应的所有活动任务,则必须在.list()之前将.processInstanceId(processInstanceId)添加到语句中。processInstanceId是标识流程实例的id。如果您启动一个流程/工作流,将使用唯一的id创建一个流程实例。例如,要获得这些id,可以执行以下语句。

代码语言:javascript
复制
int processInstanceId = processEngine.getRuntimeService()
 .createProcessInstanceQuery()
 .processDefinitionKey(processDefinitionKey)
 .singleResult()
 .getId()

变量processDefinitionKey是在过程定义xml中设置的id。

票数 4
EN

Stack Overflow用户

发布于 2016-09-23 01:43:19

流程实例是当前正在执行的流程定义的“实例”。换句话说,每次你启动一个进程,你就创建了一个进程“实例”。

因此,对于任何给定的流程定义,您可能有许多“实例”,每个“实例”可能有一个更活跃的“任务”(有时是服务任务,有时是用户任务,有时是其他等待状态-例如计时器)。

在我回答您的问题之前,我需要了解您尝试检索的是什么。

您是否正在查找给定过程定义的所有任务?如果是这样的话,这等同于所有“实例”的所有任务。为此,您将查询流程定义的所有实例,然后查询每个实例的所有任务。

或者,您是否只查找单个实例的任务。您发布的代码将检索单个实例的任务,但您需要传入通过查询活动实例的runtimeService检索到的实例id,而不是匹配所需的查询参数(例如,业务数据、流程变量或简单地通过流程定义)。

希望这对你有所帮助,让我们知道你正在努力实现什么,我相信我们可以提供帮助。

问候你,格雷格

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39640993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档