zoukankan      html  css  js  c++  java
  • (八)Activiti之流程变量和局部流程变量

    一、流程变量

      1.1  概念

    • 如果,当流程走到"学生请假"这个任务节点的时候,此时可以用TaskService设置流程变量,变量值包含请假人、请假时间、请假理由等信息,这些信息存在表act_ru_variable中,当"学生请假"这个任务节点完成之后,“班长审批”这个任务节点可以看到"学生请假"任务节点设置的所有流程变量值(请假人等信息),“班主任审批”这个任务节点也可以看到"学生请假"任务节点设置的所有流程变量值。 但是当整个流程走完的时候,运行时的表(以act_ru开头的表)数据清空,自然也就读取不到。

      1.2  设置流程变量

    • 本章案例是执行完学生请假流程中的 1.2  启动流程实例之后在执行,此时流程走到下图红圈这个任务节点,设置请假人信息。

        
        /**
         * 设置流程变量数据
         */
        @Test
        public void setVariableValues(){
            TaskService taskService=processEngine.getTaskService(); // 任务Service
            String taskId="15004";
            taskService.setVariable(taskId, "days", 2);
             taskService.setVariable(taskId, "date", new Date());
            taskService.setVariable(taskId, "reason", "发烧");
            Student student=new Student();
            student.setId(1);
            student.setName("张三");
            taskService.setVariable(taskId, "student", student); // 存序列化对象
        }
    • taskId="15004"; 是由“学生请假”这个任务节点的id
    • 注意:Student 必须序列化。
    • 结果如下图,说明流程变量的值已经存入表中:

       1.3  获取流程变量

    •  上述步骤在“学生请假”任务节点设置流程变量之后,接着运行学生请假流程中的 1.4  张三完成学生请假任务,即流程走到下图,获取流程变量值。

     

        /**
         * 获取流程变量数据
         */
        @Test
        public void getVariableValues(){
            TaskService taskService=processEngine.getTaskService(); // 任务Service
            String taskId="20002";
            Integer days=(Integer) taskService.getVariable(taskId, "days");
             Date date=(Date) taskService.getVariable(taskId, "date");
            String reason=(String) taskService.getVariable(taskId, "reason");
            Student student=(Student) taskService.getVariable(taskId, "student"); 
            System.out.println("请假天数:"+days);
            System.out.println("请假日期:"+date);
            System.out.println("请假原因:"+reason);
            System.out.println("请假对象:"+student.getId()+","+student.getName());
        }
    • taskId="20002";  20002是“班长审批”任务的id
    • 结果如下图,成功获取到流程变量。

       1.4  另一种方法(将数据存在map中)设置流程变量

        /**
         * 设置流程变量数据
         */
        @Test
        public void setVariableValues2(){
            TaskService taskService=processEngine.getTaskService(); // 任务Service
            String taskId="15004";
            Student student=new Student();
            student.setId(1);
            student.setName("张三");
    
            Map<String, Object> variables=new HashMap<String,Object>();
            variables.put("days", 2);
            variables.put("date", new Date());
            variables.put("reason", "发烧");
            variables.put("student", student);
            taskService.setVariables(taskId, variables);
        }
    /**
         * 获取流程变量数据
         */
        @Test
        public void getVariableValues2(){
            TaskService taskService=processEngine.getTaskService(); // 任务Service
            String taskId="20002";
            Map<String,Object> variables=taskService.getVariables(taskId);
            Integer days=(Integer) variables.get("days");
            Date date=(Date) variables.get("date");
            String reason=(String) variables.get("reason");
            Student student=(Student)variables.get("student"); 
            System.out.println("请假天数:"+days);
            System.out.println("请假日期:"+date);
            System.out.println("请假原因:"+reason);
            System.out.println("请假对象:"+student.getId()+","+student.getName());
        }

     二、流程局部变量

    • 局部流程变量只能在该任务节点中设置和获取。如下图,“学生请假”任务节点设置的流程局部变量只能在该“学生请假”节点获取,“班长审批”节点或者"班主任审批"节点获取就为空。

    • 设置局部流程变量
        TaskService taskService=processEngine.getTaskService(); // 任务Service
            String taskId="72504";
            taskService.setVariableLocal(taskId,"date", new Date());
    • 获取局部流程变量
        TaskService taskService=processEngine.getTaskService(); // 任务Service
            String taskId="80002";  
            Date date=(Date) taskService.getVariableLocal(taskId, "date");
  • 相关阅读:
    OpenSSH免密码登录SSH2
    mysql_init调用卡住原因分析
    磁盘文件读性能测试
    madvise、fadvise、posix_madvise和posix_fadvise函数的使用
    进程间传递文件描述符fd
    Orace开源的异步IO编程库,特点是接口非常简单
    爱奇艺视频窗口显示不出来解决办法
    brk/sbrk和mmap行为分析程序
    编译boost,去掉不使用的组件
    第24课 经典问题解析二
  • 原文地址:https://www.cnblogs.com/shyroke/p/7995231.html
Copyright © 2011-2022 走看看