一、從執行過程分析
//查詢任務
@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配置類就行了。