2014-06-16 2 views
0

Activiti - DelegateExecution.getEngineServices() 나는 Activti에있는

public class DelegateInitialisation implements JavaDelegate 
{ 
    @Override 
    public void execute(DelegateExecution de) throws Exception 
    { 
      String processId = de.getProcessInstanceId(); 
      TaskService tkService = de.getEngineServices().getTaskService(); 
      List<Task> ltasks = tkService.createTaskQuery().processInstanceId(processId).list(); 
      for (Task task : ltasks) 
      { 
        System.out.println(task.getId()); 
      } 
    } 
같은 클래스

<serviceTask id="Initialisation" name="Initialisation" activiti:class="acoss.activiti.DelegateInitialisation"></serviceTask> 

클래스 자체가 구현을 JavaDelegate를 시작 자바 클래스와 serviceTask에서 작업 목록을 액세서 할 수 없습니다

}

문제 : 그것은 나에게 빈 작업 목록을 제공합니다. 내가 얻은 processId가 "실제"processInstanceId가 아닌 것 같습니다. 그래서 TaskService, runtimeService 등을 얻을 수 없습니다.

processEngine의 현재 인스턴스를 얻는 것이 가장 좋지만 얻을 방법이 없습니다. 해결책을 찾으면 대단히 감사합니다.

답변

0

쿼리를 사용하면 프로세스에서 정의한 모든 작업이 아니라 사용자 상호 작용이나 이미 완료된 작업을 기다리는 작업 인스턴스를 얻을 수 있습니다. 프로세스가 대기 중이거나 프로세스가 통과 한 태스크가없는 경우 빈 목록이 표시됩니다.
프로세스 정의에 액세스하고 원하는 것을 얻기 위해 활동을 반복해야합니다.

0

ProcessEngines 방법 중 하나를 사용하여 processEngine 인스턴스 (예 : getProcessEngines())를 찾으십시오.

Activiti에서 사용하는 용어는 혼동을 줄 수 있습니다. Task 인터페이스는 "인간 사용자를위한 하나의 작업"을 나타냅니다. 어쩌면 당신이 정말로 원하는 것은 활동 목록 일 것입니다. 다음과 같이하면 이런 결과를 얻을 수 있습니다.

RuntimeService runtimeService = de.getEngineServices().getRuntimeService(); 
String procId = de.getProcessInstanceId(); 
List<String> activityIds = runtimeService.getActiveActivityIds(procId); 
System.out.println("Active activity IDs = " + activityIds);