Activiti工作流(二)6.0源碼查看及如何使用自己的用戶表和羣組表

一、從執行過程分析

 //查詢任務
    @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配置類就行了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章