• Activiti学习笔记6 — 变量与历史记录


    一、 变量的使用

    1、创建流程引擎对象

    private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    2、启动流程

     1 /**
     2      * 2、启动流程
     3      */
     4     @Test
     5     public void testStartProcess() {
     6         // 获取服务对象的实例
     7         RuntimeService runtimeService = processEngine.getRuntimeService();
     8 
     9         // 当使用ByKey方式时会自动执行相对应流程的最高版本
    10         String processDefinitionKey = "leaveflow2";
    11 
    12         // 设置启动时的流程变量
    13         Map<String, Object> variables = new HashMap<String, Object>();
    14         variables.put("test", "测试");
    15 
    16         ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey, variables);
    17 
    18         logger.info("Id:" + processInstance.getId());
    19         logger.info("ActivitiId:" + processInstance.getActivityId());
    20     }
    View Code

    3、设置流程变量

     1 /**
     2      * 3、设置流程变量
     3      *         1、在办理时设置流程变量
     4      *         2、在完成时设置流程变量
     5      */
     6     @Test
     7     public void testProcessTask(){
     8         //获取服务对象的实例
     9         TaskService taskService = processEngine.getTaskService();
    10         
    11         //1、在办理时设置流程变量
    12         //1.1、获取任务,查询正在执行的任务        
    13         String assignee = "employee";
    14         TaskQuery query = taskService.createTaskQuery()
    15                                                        .taskAssignee(assignee)
    16                                                        .orderByTaskCreateTime()
    17                                                        .desc();
    18         Task task = query.list().get(0);
    19         String taskId = task.getId();
    20         //1.2、向任务中设置流程变量
    21         //设置一个流程变量
    22         //taskService.setVariable(taskId, "请假天数", 2);
    23         //taskService.setVariable(taskId, "请假原因", "约会");
    24         //设置多个流程变量
    25         //taskService.setVariables(taskId, variables);
    26         
    27         //2、在完成时设置流程变量
    28         Map<String, Object> variables = new HashMap<String, Object>();
    29         variables.put("请假天数", 4);
    30         variables.put("请假原因", "外出培训");
    31         variables.put("请假借款", 1000.5);
    32         variables.put("请假开始日期", new Date());
    33         variables.put("是否用车", false);
    34         taskService.complete(taskId, variables);
    35         
    36     }
    View Code

    4、查看流程变量

     1 /**
     2      * 4、查看流程变量
     3      * 流程变量不与Task相关
     4      */
     5     @Test
     6     public void testQueryProcessVariable() {
     7         // 1、获取服务对象的实例
     8         TaskService taskService = processEngine.getTaskService();
     9 
    10         // 2、查询正在执行的任务
    11         String assignee = "employee";
    12         TaskQuery query = taskService.createTaskQuery()
    13                                                        .taskAssignee(assignee)
    14                                                        .orderByTaskCreateTime()
    15                                                        .desc();
    16         Task task = query.list().get(0);
    17         
    18         //3、根据任务ID与流程变量的Key获取流程变量信息
    19         String taskId = task.getId();
    20         logger.info("TaskId: " + task.getId() );
    21         //3.1、获取单个流程变量
    22         String variableName = "test";
    23         String varilable =  (String) taskService.getVariable(taskId, variableName);
    24         
    25         logger.info("Varilable:" + varilable);
    26         
    27         //3.2、获取多个流程变量
    28         Map<String, Object> varMap = new HashMap<String, Object>();
    29         varMap = taskService.getVariables(taskId);
    30         
    31         logger.info("Map - Key: test, Value: " + varMap.get("test"));
    32         
    33     }
    View Code

    二、历史记录

    1、查看按照某个规则一共执行了多少次流程  

      HistoricProcessInstance :包含当前和已经结束的流程实例信息。

    2、查看某一次流程执行,一共经历了多少步骤

      HistoricActivityInstance:包含一个活动(流程上的节点)的执行信息。

    3、Activiti的历史信息维护策略

      在流程活动产生时,同时会产生一个对应的历史,记录开始相关的记录,然后在活动结束后,把结束时间维护进去。 

    4、配置文件 activiti.cfg.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     3         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
     4         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">
     5 
     6     <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
     7         <!-- 数据库连接属性 -->
     8         <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti?characterEncoding=utf-8"></property>
     9         <property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
    10         <property name="jdbcUsername" value="root"></property>
    11         <property name="jdbcPassword" value="root"></property>
    12         
    13         <!-- 数据库更新策略 -->
    14         <property name="databaseSchemaUpdate" value="true"></property>
    15         
    16         <!-- 
    17         Activiti默认提供4种历史级别:
    18             1、none: 不保存任何历史记录,可以提高系统的性能;
    19             2、activity:保存所有的流程实例、任务、活动信息;
    20             3、audit:也是Activiti的默认级别,保存所有的流程实例、任务、活动、表单属性;
    21             4、full:最完整的历史记录,除了包含Audit级别的信息之外还能保存详细信息,例如:流程变量。
    22          -->
    23         <property name="history" value="activity"></property>
    24         
    25         <property name="jobExecutorActivate" value="false"></property>
    26         
    27         <!-- 邮件服务地址 -->
    28         <property name="mailServerHost" value="mail.wxintl.com"></property>
    29         <property name="mailServerPort" value="5025"></property>
    30     </bean>
    31 
    32 </beans>
    View Code
  • 相关阅读:
    c#FileStream文件读写(转)
    mvc Razor 视图中找不到 ViewBag的定义
    JS正则表达式验证账号、手机号、电话和邮箱
    jquery each循环,
    $.grep(array, callback, [invert])过滤,常用
    arguments 对象
    有关Select option 元素
    MVC零基础学习整理(一)
    根据年月日算出当前日期是星期几
    C# winfrom 模拟ftp文件管理
  • 原文地址:https://www.cnblogs.com/maocs/p/5010487.html
Copyright © 2020-2023  润新知