IT 工作流:足跡第六十八步:eclipse搭配activiti工作流的必須結構

1.引擎自動創建23張表

    @Test
    public void createTable(){
        //創建引擎配置類
        ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
        configuration.setJdbcDriver("com.mysql.jdbc.Driver");
        configuration.setJdbcUrl("jdbc:mysql://192.168.27.xx:3306/activiti");
        configuration.setJdbcUsername("root");
        configuration.setJdbcPassword("root");

        //不自動創建表,需要表存在 DB_SCHEMA_UPDATE_FALSE = "false";
        //先刪除表,再創建表 DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop";
        //如果表不存在,先創建表 DB_SCHEMA_UPDATE_TRUE = "true";
        configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
        //創建工作流核心對象
        ProcessEngine processEngine = configuration.buildProcessEngine();
        System.out.println(processEngine);
    }

2.部署和定義.png:通過processEngine.getRepositoryService()

2.1流程部署:依據兩張圖片,通過RepositoryService實現部署(插入act_ge_bytearray二進制數據表;act_re_deployment部署信息表;act_re_procdef流程定義數據表)

//xxx.bpmn和xxx.png壓縮成xxx.zip
//先使用processEngine.getRepositoryService()獲取RepositoryService類
repositoryService.createDeployment()
		 .addZipInputStream(zipInputStream)
		 .name("xxx")
		 .deploy();

2.2流程定義:通過RepositoryService獲取流程定義,三種方式:

//先使用processEngine.getRepositoryService()獲取RepositoryService類

//1依據畫bpmn時的自定義Id查詢一個流程定義
repositoryService.createProcessDefinitionQuery()
		.processDefinitionKey("key");
//2依據畫bpmn時的Name查詢一個流程定義
repositoryService.createProcessDefinitionQuery()
		.processDefinitionName("name");
//3遍歷獲取全部流程定義
		List<ProcessDefinition> pds = repositoryService.createProcessDefinitionQuery().list()
		
		for (ProcessDefinition pd : pds) {
			System.out.println("數字ID=流程定義的key+版本+隨機生成數"+pd.getId()+",KEY:"+pd.getKey()+",NAME:"+pd.getName())
		}

3.啓動流程實例:通過processEngine.getRuntimeService()

3.1在這一步通過RuntimeService啓動請假單流程,使用流程定義的Key(act_ru_task運行時任務節點表 ,act_ru_execution運行時流程執行實例表, act_ru_identitylink運行時節點人員參與表)

//先使用processEngine.getRuntimeService()獲取RuntimeService類

		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("key");
		System.out.println("id:"+processInstance.getId()+",activitiId:"+processInstance.getActivityId());

3.2流程執行的過程中,創建的流程實例ID在整個過程中都不會變

在這裏插入圖片描述

4.查詢流程實例狀態(判斷流程是正在執行還是結束)

    /**查詢流程狀態(依據庫中有沒這個實例,判斷流程正在執行,還是結束)*/
    @Test
    public void isProcessEnd(){
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()//創建流程實例查詢
                .processInstanceId("processInstanceId")//使用流程實例ID查詢
                .singleResult();
        if(processInstance ==null){
            System.out.println("流程已經結束");
        }
        else{
            System.out.println("流程沒有結束");
        }
    }

5.任務:實例與任務是一對多

5.1先查詢個人任務:通過"用戶ID",查詢該用戶的個人任務

//先使用processEngine.getTaskService()獲取TaskService類

		List<Task> tasks = taskService.createTaskQuery().taskAssignee("loginName").list()
		for (Task task : tasks) {
			System.out.println("ID:"+task.getId()+",姓名:"+task.getName()+",接收人:"+task.getAssignee();
		}

5.2.後辦結個人任務:只能通過5.1查出任務ID,再辦結個人任務(辦結後,將從act_ru_task中刪除)

在這裏插入圖片描述

//先使用processEngine.getTaskService()獲取TaskService類

		taskService.complete("act_ru_task表裏的任務id")

6.歷史節點表

6.1流程完畢,可以再act_hi_actinst歷史節點表中看到整個請假流程

在這裏插入圖片描述

6.2查詢歷史任務:通過"用戶ID",查詢該用戶的歷史個人任務

/**查詢歷史任務*/
@Test
public void findHistoryTask(){
    List<HistoricTaskInstance> list = processEngine.getHistoryService()//與歷史數據(歷史表)相關的Service
            .createHistoricTaskInstanceQuery()//創建歷史任務實例查詢
            .taskAssignee("用戶ID")
            .list();
    if(list!=null && list.size()>0){
        for(HistoricTaskInstance hti:list){
            System.out.println(hti.getId()+"    "+hti.getName()+"    "+hti.getProcessInstanceId()+"   "+hti.getStartTime()+"   "+hti.getEndTime();
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章