如何在Camunda中使用的代码中获取活动任务列表?
我已经看过这个答案“How to query the position of a process instance? " but i can't understand what is " processInstanceId”,我应该让它让这个方法有效 .
这是我正在尝试的代码:
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;
}
}
在此先感谢您的帮助 .
2 回答
以下语句将返回所有活动任务,这些任务也可以是独立任务 .
如果要获取与特定运行进程相对应的所有活动任务,则必须将
.processInstanceId(processInstanceId)
添加到.list()
之前的语句中 .processInstanceId
是id
,用于标识流程实例 . 如果启动流程/工作流,将使用唯一ID创建流程实例 . 要获取这些ID,您可以执行以下语句 .变量
processDefinitionKey
是在流程定义xml中设置的id .流程实例是流程定义的当前正在执行的“实例” . 换句话说,每次启动流程时都会创建流程“实例” .
因此,对于任何给定的流程定义,您可能具有多个“实例”,并且每个“实例”可能具有一个更活跃的“任务”(有时是服务任务,有时是用户任务,有时是其他等待状态 - 例如计时器) .
在我回答您的问题之前,我需要了解您要检索的是什么 .
您是否在寻找给定流程定义的所有任务?如果是这样,这相当于所有“实例”的所有任务 . 为此,您将查询流程定义的所有实例,然后查询每个实例的所有任务 .
或者,您是否只查找单个实例的任务 . 您发布的代码将检索单个实例的任务,但您需要通过查询活动实例的runtimeService而不是匹配所需的查询参数(例如业务数据,流程变量或仅通过流程定义)来传递检索到的实例ID .
希望这会有所帮助,让我们具体了解您要实现的目标,我相信我们可以提供帮助 .
问候,格雷格