2016-09-22 4 views
0

Как я могу получить список активных задач в коде, который я использую в Camunda?Camunda: получить активные задания

Я уже смотрю на этот ответ «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; 
} 

} 

Заранее спасибо за вашу помощь.

ответ

3

Следующий оператор возвращает все активные задачи, которые могут быть также автономные задачи.

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

Если вы хотите, чтобы получить все активные задачи, соответствующие конкретным запущенного процесса вы должны добавить .processInstanceId(processInstanceId) на заявление перед .list(). processInstanceId - это id, который идентифицирует экземпляр процесса. Если вы запустите процесс/рабочий процесс, экземпляр процесса будет создан с уникальным идентификатором. Чтобы получить этот идентификатор, вы можете, например, выполнить следующий оператор.

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

переменной processDefinitionKey это идентификатор, который устанавливается в XML описания процесса.

0

Экземпляр процесса представляет собой выполняемый в настоящее время «экземпляр» определения процесса. Иными словами, каждый раз, когда вы начинаете процесс, вы создаете «экземпляр» процесса.

Таким образом, для любого определения процесса у вас может быть несколько «экземпляров», и каждый «экземпляр» может иметь одну из более активных «задач» (иногда сервисные задачи, иногда пользовательские задачи и иногда другие состояния ожидания - например, таймер).

Прежде чем я смогу ответить на ваш вопрос, мне нужно понять, что именно вы пытаетесь получить.

Вы ищете все задачи для данного определения процесса? Если это так, это соответствует всем задачам для всех «экземпляров». Для этого вы должны запросить все экземпляры для определения процесса, а затем все задачи для каждого экземпляра.

Или вы ищете только задачи для одного экземпляра. Код, который вы отправили, будет получать задачи для одного экземпляра, но вам необходимо передать идентификатор экземпляра, полученный путем запроса экземпляра runtimeService для активных экземпляров, чем соответствовать требуемым параметрам запроса (например, бизнес-данные, переменные процесса или просто по определению процесса).

Надеюсь, что это поможет, сообщите нам, что именно вы пытаетесь достичь, и я уверен, что мы сможем помочь.

С уважением, Грег

Смежные вопросы