提问者:小点点

Activiti-无法访问委托执行. getEngineServices()中的任务列表


我在Activti中有一个serviceTask,它有一个java类,可以启动一个类

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

类本身像这样实现Java委托

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

}

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

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


共2个答案

匿名用户

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

匿名用户

尝试使用ProcessEngines方法之一来查找ProcEngine实例,可能是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);