2016-09-22 3 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() 

당신은 .list() 전에 문에 .processInstanceId(processInstanceId)을 추가해야합니다. processInstanceId은 프로세스 인스턴스를 식별하는 id입니다. 프로세스/워크 플로우를 시작하면 프로세스 인스턴스가 고유 ID로 작성됩니다. 이 id를 얻으려면 예를 들어 다음 명령문을 실행할 수 있습니다.

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

변수 processDefinitionKey은 프로세스 정의 xml에 설정된 ID입니다.

0

프로세스 인스턴스는 프로세스 정의의 현재 실행중인 "인스턴스"입니다. 다시 말하면, 프로세스를 시작할 때마다 프로세스 "인스턴스"를 생성합니다.

따라서 주어진 프로세스 정의에 대해 "인스턴스"가 여러 개있을 수 있으며 각 인스턴스는 더 많은 활성 "작업"중 하나를 가질 수 있습니다 (때로는 서비스 작업, 때로는 사용자 작업 및 때로는 다른 대기 상태 - 예 : 시간제 노동자).

질문에 대답하기 전에 무엇을 검색하려고하는지 이해해야합니다.

주어진 프로세스 정의에 대한 모든 작업을 찾고 있습니까? 그렇다면 이것은 모든 "인스턴스"에 대한 모든 작업과 동일합니다. 이를 위해 모든 인스턴스에 프로세스 정의를 쿼리 한 다음 각 인스턴스에 대해 모든 작업을 쿼리합니다.

또는 단일 인스턴스에 대한 작업 만 찾고 계십니까? 게시 한 코드는 단일 인스턴스에 대한 작업을 검색하지만 필요 한 검색어 매개 변수 (예 : 비즈니스 데이터, 프로세스 변수 또는 프로세스 정의)와 일치하는 활성 인스턴스에 대해 runtimeService를 쿼리하여 검색 한 인스턴스 ID를 전달해야합니다.

호프가 도움이 되었으면 좋겠어. 구체적으로 성취하려는 것을 알려주십시오. 도와 드리겠습니다. 또한 독립형 타스크가 될 수

감사합니다, 그렉