一.Activiti7体系架构
通过加载activiti.cfg.xml文件得到ProcessEngineConfiguration对象,通过ProcessEngineConfiguration对象可以得到ProcessEngine对象
得到该对象后,可以通过流程引擎对象ProcessEngine来得到各种Service,每一种Service接口有每个用途
- RepositoryService activiti 的资源管理类
- RuntimeService activiti 的流程运行管理类
- TaskService activiti 的任务管理类
- HistoryService activiti 的历史管理类
- ManagerService activiti 的引擎管理类
二.Activiti使用步骤
1.流程定义
使用Activiti Designer工具创建流程图
新建一个BPMNFile流程图,可更改该流程图的ID和每个任务环节的执行人,流程图就是一个xml文件,每一个流程需要生成一张流程图保存,
首先将.bpmn文件改为.xml文件
然后右键该xml文件Diagrams--->show BPMN 2.0 Designer就能生成一张流程图
将流程图导出保存到项目对应目录即可
然后将xml改回bpmn即可
2.流程部署
需要将流程部署到Activiti当中,代表当前有该流程
1 /** 2 * 流程部署 3 * `act_ge_bytearray` 流程定义的资源信息,包含bpmn和png流程文件信息 4 * `act_re_deployment` 流程部署信息,包含流程名称,ID,Key等 5 * `act_re_procdef` 流程定义信息 6 */ 7 @Test 8 public void deployment(){ 9 //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration 10 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); 11 //获取RepositoryService对象进行流程部署 12 RepositoryService repositoryService = processEngine.getRepositoryService(); 13 //进行部署,将对应的流程定义文件生成到数据库当中,作为记录进行保存 14 Deployment deployment = repositoryService.createDeployment() 15 .addClasspathResource("flowchart/activiti.bpmn") //加载流程文件 16 .addClasspathResource("flowchart/activiti.png") 17 .name("请假流程") //设置流程名称 18 .key("activitiKey") 19 .deploy(); //部署 20 21 //输出部署信息 22 System.out.println("流程名称:"+deployment.getName()); 23 System.out.println("流程ID:"+deployment.getId()); 24 System.out.println("流程Key:"+deployment.getKey()); 25 }
3.创建流程实例
流程定义相当于类
流程实例相当于类的实例(对象)
1 /** 2 * 启动流程实例 3 * `act_hi_actinst` 已开始和执行完毕的活动信息 4 * `act_hi_identitylink` 历史参与者信息 5 * `act_hi_procinst` 流程实例信息 6 * `act_hi_taskinst` 历史任务实例 7 * act_ru_execution 任务执行信息 8 * act_ru_identitylink 当前任务参与者 9 * `act_ru_task` 任务信息 10 * 11 */ 12 @Test 13 public void startInstance(){ 14 //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration 15 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); 16 //获取到RuntimeService对象 17 RuntimeService runtimeService = processEngine.getRuntimeService(); 18 //创建流程实例 19 ProcessInstance holiday = runtimeService.startProcessInstanceByKey("activiti_takeleave"); 20 //输出实例信息 21 System.out.println("流程部署ID:"+holiday.getDeploymentId()); 22 System.out.println("流程实例ID:"+holiday.getId()); 23 System.out.println("活动ID:"+holiday.getActivityId()); 24 }
4.用户查询代办任务
1 /** 2 * 查看代办任务 3 */ 4 @Test 5 public void getTask(){ 6 //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration 7 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); 8 //获取一个TaskService对象 9 TaskService taskService = processEngine.getTaskService(); 10 //查询代办业务 createTaskQuery查询任务 taskCandidateOrAssigned查询任务执行者 processDefinitionKey:查询流程 11 /** 12 * taskCandidateOrAssigned匹配规则:1.Assigned 2.配置bpmn文件中定义的值 13 * taskAssignee匹配规则:1.Assigned 14 */ 15 List<Task> list = taskService.createTaskQuery().taskAssignee("_02").processDefinitionKey("activiti_takeleave").list(); 16 for (Task task:list) { 17 System.out.println("任务名称:"+task.getName()); 18 System.out.println("任务执行人:"+task.getAssignee()); 19 System.out.println("任务ID:"+task.getId()); 20 System.out.println("流程实例ID:"+task.getProcessInstanceId()); 21 } 22 }
5.用户进行任务处理
1 /** 2 * 任务处理:当所有任务处理完毕,对应当前流程实例信息删除,但是可以在历史中查看到该信息 3 */ 4 @Test 5 public void completeTask(){ 6 //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration 7 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); 8 //获取一个TaskService对象 9 TaskService taskService = processEngine.getTaskService(); 10 //任务处理 11 taskService.complete("10305"); 12 }
6.流程结束
7.当业务流程结束后通过历史可以查看到已经走完的流程
1 /** 2 * 查看历史任务 3 */ 4 @Test 5 public void getHistory() { 6 //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration 7 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); 8 //获取HistoryService接口 9 HistoryService historyService = processEngine.getHistoryService(); 10 //获取历史任务 11 HistoricActivityInstanceQuery historicActivityInstanceQuery = historyService.createHistoricActivityInstanceQuery(); 12 //获取指定流程实例的任务 13 historicActivityInstanceQuery.processInstanceId("2501"); 14 //获取任务列表 15 List<HistoricActivityInstance> list = historicActivityInstanceQuery.list(); 16 for (HistoricActivityInstance ai : list) { 17 System.out.println("任务节点ID:"+ai.getActivityId()); 18 System.out.println("任务节点名称:"+ai.getActivityName()); 19 System.out.println("流程实例ID信息:"+ai.getProcessDefinitionId()); 20 System.out.println("流程实例ID信息:"+ai.getProcessInstanceId()); 21 System.out.println("=============================="); 22 } 23 }