感覺跟activiti6差不多,不過7中刪除了兩個service(IdentityService、FormService),反而又多了兩個表。這里所有輸出的信息都是以后可以放在前端里的信息。
1.Activiti的架構說明
ProcessEngineConfiguration類,主要作用是加載activiti.cfg.xml配置文件
ProcessEngine類 作用是幫助我們可以快速得到各個Service接口,並且可以生成activiti的工作環境 25張表生成
Service接口 作用:可以快速實現數據25張表的操作。
RepositoryService
RuntimeService
TaskService
HistoryService
2.用BPMN的ActivitiDesigner插件繪制流程定義圖
3.部署流程定義
方式一:單個文件(bpmn文件,png文件)
/** * 流程定義的部署 * 影響的activiti表有哪些 * act_re_deployment 部署信息 * act_re_procdef 流程定義的一些信息 * act_ge_bytearray 流程定義的bpmn文件以及png文件 */ public class ActivitiDeployment { // 流程定義部署 public static void main(String[] args){ //1.創建ProcessEngine對象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到RepositoryService實例 RepositoryService repositoryService = processEngine.getRepositoryService(); //3.進行部署 Deployment deployment = repositoryService.createDeployment()//創建Deployment對象 .addClasspathResource("diagram/holiday.bpmn")//添加bpmn文件 .addClasspathResource("diagram/holiday.png")//添加png文件 .name("請假申請單流程") .deploy();//部署 //4.輸出部署的一些信息 System.out.println(deployment.getName()); System.out.println(deployment.getId()); } }
方式二:先將bpmn文件和png文件壓縮成zip文件。但是activiti最終也是以單個文件形式保存,說明activiti進行了解壓工作。
/** * Zip文件部署流程 * 影響的activiti表有哪些 * act_re_deployment 部署信息 * act_re_procdef 流程定義的一些信息 * act_ge_bytearray 流程定義的bpmn文件以及png文件 */ public class ActivitiZipDeployment { // 流程定義部署 public static void main(String[] args){ //1.創建ProcessEngine對象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到RepositoryService實例 RepositoryService repositoryService = processEngine.getRepositoryService(); //3.轉換出ZipInputStream流對象 InputStream is = ActivitiZipDeployment.class.getClass().getClassLoader().getResourceAsStream("holidayBPMN.zip"); //將InputStream流轉化為ZipInputStream ZipInputStream zipInputStream = new ZipInputStream(is); //3.進行部署 Deployment deployment = repositoryService.createDeployment()//創建Deployment對象 .addZipInputStream(zipInputStream) .name("請假申請單流程") .deploy();//部署 //4.輸出部署的一些信息 System.out.println(deployment.getName()); System.out.println(deployment.getId()); } }
4.啟動流程實例:
/** * 啟動流程實例: * 前提是先已經完成流程定義的部署工作 * * 背后影響的表: * act_hi_actinst 已完成的活動信息 * act_hi_identitylink 參與者信息 * act_hi_procinst 流程實例 * act_hi_taskinst 任務實例 * act_ru_execution 執行表 * act_ru_identitylink 參與者信息 * act_ru_task 任務表 */ public class ActivitiStartInstance { public static void main(String[] args) { //1.得到ProcessEngine對象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到RunService對象 RuntimeService runtimeService = processEngine.getRuntimeService(); //3.創建流程實例(關鍵步驟)即 啟動流程實例 //需要知道流程定義的Key:holiday(找key的方法 1:bpmn文件中的id,它對應的值就是key // 2:直接看數據庫中流程定義表act_re_procdet的key值) ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday"); //4.輸出實例的相關信息 System.out.println("流程部署ID="+processInstance.getDeploymentId());//null System.out.println("流程定義ID="+processInstance.getProcessDefinitionId());//holiday:1:4 System.out.println("流程實例ID="+processInstance.getId());//2501 System.out.println("流程活動ID="+processInstance.getActivityId());//獲取當前具體執行的某一個節點的ID(null) } }
5.查看任務
TaskService taskService.createTaskQuery()
/** * 查詢當前用戶的任務列表 */ public class ActivitiTaskQuery { //lisi完成自己任務列表的查詢 public static void main(String[] args) { //1.得到ProcessEngine對象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到TaskService對象 TaskService taskService = processEngine.getTaskService(); //3.根據流程定義的key以及負責人assignee來實現當前用戶的任務列表查詢 List<Task> taskList = taskService.createTaskQuery() .processDefinitionKey("holiday") .taskAssignee("lisi") .list();//這里還有一個查詢唯一結果的方法:singleResult();、還有分頁查詢listPage(index,limit); //4.任務列表展示 for (Task task : taskList) { //查的act_hi_procinst表的id System.out.println("流程實例ID="+task.getProcessInstanceId()); //查的act_hi_taskinst表的id System.out.println("任務ID="+task.getId()); //查的act_hi_taskinst表的Assignee_ System.out.println("任務負責人名稱="+task.getAssignee()); //查的act_hi_taskinst表的NAME_ System.out.println("任務名稱="+task.getName()); } } }
6.完成任務
TaskService taskService.complete(task.getId());//參數為任務ID
/** * 處理當前用戶的任務列表 * 背后操作到的表: * act_hi_actinst * act_hi_identitylink * act_hi_taskinst * act_ru_execution * act_ru_identitylink * act_ru_task //只放當前要執行的任務 */ public class ActivitiCompleteTask { /** * 李四完成自己的任務 * @param args */ public static void main(String[] args) { //1.得到ProcessEngine對象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到TaskService對象 TaskService taskService = processEngine.getTaskService(); //3.處理任務,結合當前用戶任務列表的查詢操作的話,可以知道任務ID=5002(實際操作中應該與查詢寫在一起) taskService.complete("5002"); } }