我在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当前实例,但我不知道如何获取它。如果您看到解决方案,非常感谢您。
使用您的查询,您可以获得正在等待用户交互的任务实例或已经完成的任务,而不是您在流程中定义的所有任务。如果您没有流程正在等待或流程已通过的任何任务,您将获得一个空列表。
您需要访问流程定义并遍历活动以获得您想要的内容。
尝试使用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);