zoukankan      html  css  js  c++  java
  • Activiti学习笔记4 — 流程实例化

    1、创建流程引擎对象

    private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    2、启动流程

        流程启动后会更新以下二张表:act_ru_execution和act_ru_task各产生一条记录 

    1 // 获取服务对象的实例
    2         RuntimeService runtimeService = processEngine.getRuntimeService();
    3 
    4         String processDefinitionKey = "leaveflow";
    5         // 自动执行与Key相对应的流程的最高版本
    6         ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);
    7 
    8         logger.info("Id:" + processInstance.getId());
    9         logger.info("ActivitiId:" + processInstance.getActivityId());
    View Code

     3、查看任务

    3.1、查看私有任务 

     1 // 1、获取服务对象的实例
     2         TaskService taskService = processEngine.getTaskService();
     3 
     4         // 2、查询
     5         // 2.1、创建查询对象
     6         TaskQuery query = taskService.createTaskQuery();
     7         // 2.2、配置查询对象
     8         // String assignee = "employee";
     9         String assignee = "manager";
    10         query
    11                 // 过滤条件
    12                 .taskAssignee(assignee)
    13                 // 排序条件
    14                 .orderByTaskCreateTime().desc();
    15                 // 分页条件
    16                 // .listPage(firstResult, maxResults)
    17 
    18         // 2.3、执行查询
    19         List<Task> tasks = query.list();
    20 
    21         for (Task task : tasks) {
    22             logger.info("Id:" + task.getId());
    23             logger.info("Name:" + task.getName());
    24             logger.info("Category:" + task.getCategory());
    25             logger.info("Description:" + task.getDescription());
    26             logger.info("Assignee:" + task.getAssignee());
    27             logger.info("CreateTime:" + task.getCreateTime());
    28         }
    View Code

    3.2、查看共有任务

    在流程定义中使用candidateUser属性,发布任务后会在act_ru_identitylink表产生对应的记录 

     1 // 1、获取服务对象的实例
     2         TaskService taskService = processEngine.getTaskService();
     3 
     4         // 2、查询
     5         // 2.1、创建查询对象
     6         TaskQuery query = taskService.createTaskQuery();
     7         // 2.2、配置查询对象
     8         //String candidateUser = "张三";
     9         //String candidateUser = "李四";
    10         
    11         //String candidateUser = "李经理";
    12         String candidateUser = "赵经理";
    13         query
    14                 // 过滤条件
    15                 .taskCandidateUser(candidateUser)
    16                 // 排序条件
    17                 .orderByTaskCreateTime().desc();
    18                 // 分页条件
    19                 // .listPage(firstResult, maxResults)
    20 
    21         // 2.3、执行查询
    22         List<Task> tasks = query.list();
    23 
    24         for (Task task : tasks) {
    25             logger.info("Id:" + task.getId());
    26             logger.info("Name:" + task.getName());
    27             logger.info("Category:" + task.getCategory());
    28             logger.info("Description:" + task.getDescription());
    29             logger.info("Assignee:" + task.getAssignee());
    30             logger.info("CreateTime:" + task.getCreateTime());
    31         }
    View Code

    4、认领任务 

    1 // 1、获取服务对象的实例
    2         TaskService taskService = processEngine.getTaskService();
    3         String taskId = "37502";
    4         String userId = "赵经理";
    5         taskService.claim(taskId, userId);
    View Code

    5、完成任务 

    1 // 1、获取服务对象的实例
    2         TaskService taskService = processEngine.getTaskService();
    3         // 2、完成任务
    4         String taskId = "37502";
    5         taskService.complete(taskId);
    View Code

    6、查看流程状态 

     1 // 1、获取服务对象的实例
     2         RuntimeService runtimeService = processEngine.getRuntimeService();
     3         //查询
     4         // 2.1、创建查询对象
     5         ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery();
     6         String processInstanceId = "35001";
     7         ProcessInstance processInstance = query.processInstanceId(processInstanceId).singleResult();
     8         
     9         if (processInstance != null) {
    10             logger.info(processInstance.getId());
    11             logger.info(processInstance.getActivityId());
    12         } else { 
    13             logger.info("流程已结束!");
    14             //HistoryService historyService = processEngine.getHistoryService();
    15             
    16         }
    View Code

    7、ProcessInstance的4个特点:

    1、一个流程只有一个流程实例。

    2、一个流程中,流程实例的ID不会变。

    3、流程实例永远指向当前活动的节点

    4、流程实例是一个特殊的执行对象(Execution)

    4.1、如果是单线流程,流程实例和执行对象是同一个;

    4.2、如是是并发流程,流程会在分支处产生一个Root级别的执行对象作为ProcessInstance,而分支下的每一个活动节点,都会分别产生一个Execution对象挂在Root下。 

    8、流程整改的方式:

    1、如果老流程没有太大的问题,那么老流程按照老规则流程,新流程按照新规则流转。

    2、如果老流程有严重问题,废除老流程,所有的都按照新规则重新执行。

     

     

    注:流程没有修改操作

     

     

     

     

     

     

  • 相关阅读:
    Vue 学习笔记之 —— 组件(踩了个坑)
    Vue 学习笔记之 —— 表单输入绑定
    js cookie
    python中线程、进程和协程的区别
    设计模式
    Mysql从入门到精通整理
    如何处理缓存失效、缓存穿透、缓存并发等问题
    mysql 查询当天、本周,本月,上一个月的数据
    Mysql分表和分区的区别、分库分表介绍与区别(转)
    mysql数据库死锁的产生原因及解决办法
  • 原文地址:https://www.cnblogs.com/maocs/p/5009780.html
Copyright © 2011-2022 走看看