簡體   English   中英

卡蒙達:獲得積極的任務

[英]Camunda : get active tasks

如何在Camunda中使用的代碼中獲取活動任務列表?

我已經看過這個答案“ 如何查詢流程實例的位置? ”,但是我不明白什么是“ 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;
}

}

在此先感謝您的幫助。

以下語句將返回所有活動任務,這些任務也可以是獨立任務。

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

如果要獲取與特定正在運行的進程相對應的所有活動任務,則必須在.list()之前的語句中添加.processInstanceId(processInstanceId) .list() processInstanceId是標識流程實例的id 如果啟動流程/工作流,則將創建具有唯一ID的流程實例。 要獲取這些ID,您可以例如執行以下語句。

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

變量processDefinitionKey是在流程定義xml中設置的ID。

流程實例是流程定義的當前正在執行的“實例”。 換句話說,每次啟動流程時,都會創建一個流程“實例”。

因此,對於任何給定的流程定義,您可能有多個“實例”,並且每個“實例”可能都具有多個活動的“任務”(有時是服務任務,有時是用戶任務,有時是其他等待狀態,例如計時器)。

在回答您的問題之前,我需要了解您要檢索的內容。

您是否正在尋找給定流程定義的所有任務? 如果是這樣,這等同於所有“實例”的所有任務。 為此,您將在所有實例中查詢流程定義,然后在每個實例中查詢所有任務。

或者,您是否僅在尋找單個實例的任務。 您發布的代碼將檢索單個實例的任務,但是您需要傳遞通過查詢runtimeService以獲取活動實例的實例ID,而不是所需的查詢參數(例如,業務數據,流程變量或僅按流程定義)。

希望能對您有所幫助,請讓我們具體了解您要達到的目標,我相信我們會為您提供幫助。

問候,格雷格

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM