Activiti7案例

一.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     }
查询业务历史流程
原文地址:https://www.cnblogs.com/wishsaber/p/12615854.html