Activiti - 无法从DelegateExecution.get Engine Services()访问任务列表

时间:2014-06-16 08:27:59

标签: java activiti

我有Activti,一个带有java类的serviceTask,它启动一个类

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

类本身就像这样实现JavaDelegate

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());
            }
   }

}

问题: 它给了我一个空的任务列表。 似乎我获得的processId不是“真正的”processInstanceId。 所以我无法获得TaskService,runtimeService等。

最好的方法是获取processEngine当前实例,但我不知道如何获取它。 如果你看到解决方案,非常感谢你。

2 个答案:

答案 0 :(得分:0)

使用您的查询,您将获得等待用户交互的任务实例或已完成的任务,而不是您在此过程中定义的所有任务。如果您没有任何流程正在等待的任务或流程已经过去,您将获得一个空列表。
您需要访问流程定义并迭代活动以获得您想要的内容。

答案 1 :(得分:0)

尝试使用其中一种ProcessEngines方法查找processEngine个实例,可能是getProcessEngines()

Activiti使用的术语可能令人困惑。 Task界面&#34;表示人类用户的一项任务&#34;。也许你真正想要的是一系列活动。你可以通过以下方式获得这些:

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