• 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     }
    查询业务历史流程
  • 相关阅读:
    929. 独特的电子邮件地址
    [工具.tcp]测试TCP通讯的网络延迟
    [技巧.Dotnet]轻松实现“强制.net程序以管理员身份运行”。
    [问题记录.VisualStudio]VS2013无法新增和打开项目
    [问题记录.VisualStudio]TFS项目映射问题解决
    [问题记录.dotnet]取网卡信息报错"找不到"-WMI
    模型驱动的数学原理
    剑指OFFER 旋转数组的最小数字
    剑指OFFER 用两个栈实现队列
    剑指OFFER 按之字形顺序打印二叉树
  • 原文地址:https://www.cnblogs.com/wishsaber/p/12615854.html
Copyright © 2020-2023  润新知