Activiti工作流(二)6.0原始碼檢視及如何使用自己的使用者表和群組表
阿新 • • 發佈:2019-01-29
一、從執行過程分析
//查詢任務 @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配置類就行了。