一、从执行过程分析
//查询任务
@Test
public void excuteTask()
{
List<Task> tasks = taskService.createTaskQuery()
.taskCandidateOrAssigned("晓")
.list();
if(tasks!=null && tasks.size()>0){
for(Task task:tasks){
System.out.println("任务ID:"+task.getId());
System.out.println("任务名称:"+task.getName());
System.out.println("任务的创建时间:"+task.getCreateTime());
System.out.println("任务的办理人:"+task.getAssignee());
System.out.println("流程实例ID:"+task.getProcessInstanceId());
System.out.println("执行对象ID:"+task.getExecutionId());
System.out.println("流程定义ID:"+task.getProcessDefinitionId());
System.out.println("########################################################");
}
}
}
1.可以看出使用TaskService创建TaskQuery对象进行查询,TaskQuery只存储参数条件
2.TaskQuery对象从CommandContext中获取TaskEntityManager对象进行查询
3.TaskEntityManager调用TaskDataManager对象获取数据-接口实现类MybatisTaskDataManager
4.MybatisTaskDataManager中从CommandContext获取DbSqlSession对象进行会话与数据库交互。
public <T> T getSession(Class<T> sessionClass) {
Session session = sessions.get(sessionClass);
if (session == null) {
SessionFactory sessionFactory = sessionFactories.get(sessionClass);
if (sessionFactory == null) {
throw new ActivitiException("no session factory configured for " + sessionClass.getName());
}
session = sessionFactory.openSession(this);
sessions.put(sessionClass, session);
}
return (T) session;
}
可以看出key就是DbSqlSession.class
另外6.0中AbstractManager已经不实现Session接口,过往的自定义群组表和用户表方法都会失效
那么要6.0如何自定义群组表和用户表呢?如果项目不是使用的6.0,建议直接跳到7.0使用。
首先必须知道为什么要群组表和用户表。原因是为了利用原生的Api,实现查询,流程中配置了group,便能根据用户查询任务。
二、自定义用户表和群组表
只要用自定义的类替换掉GroupEntityManagerImpl加载进ProcessEngineConfigurationImpl配置类就行了。