java - 卡蒙达 : get active tasks

标签 java bpmn business-process-management camunda

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

我已经看过这个答案“How to query the position of a process instance?”,但我不明白什么是“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;
}

}

预先感谢您的帮助。

最佳答案

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

processEngine.getTaskService().createTaskQuery().active().list()

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

int processInstanceId = processEngine.getRuntimeService()
 .createProcessInstanceQuery()
 .processDefinitionKey(processDefinitionKey)
 .singleResult()
 .getId()

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

关于java - 卡蒙达 : get active tasks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39640993/

相关文章:

java - 带有 Tomcat 8 的 JSP 2.3

java - 业务事件框架

java - 如何为应用程序上的用户制作一次性 "I agree" Activity 屏幕?

java - 如何以编程方式删除/暂停 Activiti 中的流程实例?

java - 使用 Java API 设置/获取 Camunda 用户任务的输入/输出参数

java - java中的时区显示

java - 将变量从正在运行的进程传递到另一个进程(露天 - activiti)

javascript - 通过 Enterprise Architect 中的脚本访问嵌套元素

bpmn - 有没有办法在 Camunda 中给定执行 ID 来获取父执行?

java - 微流引擎算法与实现