我有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当前实例,但我不知道如何获取它。 如果你看到解决方案,非常感谢你。
答案 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);