美文网首页
5.activiti流程变量

5.activiti流程变量

作者: _少年不知愁 | 来源:发表于2018-08-16 14:55 被阅读0次

    1.流程变量在整个工作流中扮演很重要的作用。例如:请假流程中有请假天数、请假原因等一些参数都为流程变量的范围。流程变量的作用域范围是只对应一个流程实例。也就是说各个流程实例的流程变量是不相互影响的。流程实例结束完成以后流程变量还保存在数据库中(存放到流程变量的历史表中)。
    2.设置流程变量

        /**设置流程变量*/
        @Test
        public void setVariables(){
            /**与任务(正在执行)*/
            TaskService taskService = processEngine.getTaskService();
            //任务ID
            String taskId = "2104";
            /**一:设置流程变量,使用基本数据类型*/
    //      taskService.setVariableLocal(taskId, "请假天数", 5);//与任务ID绑定
    //      taskService.setVariable(taskId, "请假日期", new Date());
    //      taskService.setVariable(taskId, "请假原因", "回家探亲,一起吃个饭");
            /**二:设置流程变量,使用javabean类型*/
            /**
             * 当一个javabean(实现序列号)放置到流程变量中,要求javabean的属性不能再发生变化
             *    * 如果发生变化,再获取的时候,抛出异常
             *  
             * 解决方案:在Person对象中添加:
             *      private static final long serialVersionUID = 6757393795687480331L;
             *      同时实现Serializable 
             * */
            Person p = new Person();
            p.setId(20);
            p.setName("翠花");
            taskService.setVariable(taskId, "人员信息(添加固定版本)", p);
            
            System.out.println("设置流程变量成功!");
        }
    
        /**模拟设置和获取流程变量的场景*/
        public void setAndGetVariables(){
            /**与流程实例,执行对象(正在执行)*/
            RuntimeService runtimeService = processEngine.getRuntimeService();
            /**与任务(正在执行)*/
            TaskService taskService = processEngine.getTaskService();
    
            /**设置流程变量*/
    //      runtimeService.setVariable(executionId, variableName, value)//表示使用执行对象ID,和流程变量的名称,设置流程变量的值(一次只能设置一个值)
    //      runtimeService.setVariables(executionId, variables)//表示使用执行对象ID,和Map集合设置流程变量,map集合的key就是流程变量的名称,map集合的value就是流程变量的值(一次设置多个值)
    
    //      taskService.setVariable(taskId, variableName, value)//表示使用任务ID,和流程变量的名称,设置流程变量的值(一次只能设置一个值)
    //      taskService.setVariables(taskId, variables)//表示使用任务ID,和Map集合设置流程变量,map集合的key就是流程变量的名称,map集合的value就是流程变量的值(一次设置多个值)
    
    //      runtimeService.startProcessInstanceByKey(processDefinitionKey, variables);//启动流程实例的同时,可以设置流程变量,用Map集合
    //      taskService.complete(taskId, variables)//完成任务的同时,设置流程变量,用Map集合
    
            /**获取流程变量*/
    //      runtimeService.getVariable(executionId, variableName);//使用执行对象ID和流程变量的名称,获取流程变量的值
    //      runtimeService.getVariables(executionId);//使用执行对象ID,获取所有的流程变量,将流程变量放置到Map集合中,map集合的key就是流程变量的名称,map集合的value就是流程变量的值
    //      runtimeService.getVariables(executionId, variableNames);//使用执行对象ID,获取流程变量的值,通过设置流程变量的名称存放到集合中,获取指定流程变量名称的流程变量的值,值存放到Map集合中
    
    //      taskService.getVariable(taskId, variableName);//使用任务ID和流程变量的名称,获取流程变量的值
    //      taskService.getVariables(taskId);//使用任务ID,获取所有的流程变量,将流程变量放置到Map集合中,map集合的key就是流程变量的名称,map集合的value就是流程变量的值
    //      taskService.getVariables(taskId, variableNames);//使用任务ID,获取流程变量的值,通过设置流程变量的名称存放到集合中,获取指定流程变量名称的流程变量的值,值存放到Map集合中
    
        }
    

    3.获取流程变量
    1) RuntimeService对象可以设置流程变量和获取流程变量
    2) TaskService对象可以设置流程变量和获取流程变量
    3) 流程实例启动的时候可以设置流程变量
    4) 任务办理完成的时候可以设置流程变量
    5) 流程变量可以通过名称/值的形式设置单个流程变量
    6) 流程变量可以通过Map集合,同时设置多个流程变量
    Map集合的key表示流程变量的名称
    Map集合的value表示流程变量的值

    
        /**
         * 获取流程变量
         */
        @Test
        public void getVariables() {
            /**与任务(正在执行)*/
            TaskService taskService = processEngine.getTaskService();
            //任务ID
            String taskId = "2202";
            /**一:获取流程变量,使用基本数据类型*/
            Integer days = (Integer) taskService.getVariable(taskId, "请假天数");
            Date date = (Date) taskService.getVariable(taskId, "请假日期");
            String resean = (String) taskService.getVariable(taskId, "请假原因");
            System.out.println("请假天数:" + days);
            System.out.println("请假日期:" + date);
            System.out.println("请假原因:" + resean);
            /**二:获取流程变量,使用javabean类型*/
            Person p = (Person) taskService.getVariable(taskId, "人员信息(添加固定版本)");
            System.out.println(p.getId() + "        " + p.getName());
           // taskService.setVariable(taskId, "请假天数", 100);
        }
    
        /**
         * 获取流程变量
         */
        @Test
        public void getVariables1() {
            /**与任务(正在执行)*/
            RuntimeService runtimeService = processEngine.getRuntimeService();
            //任务ID
            String executeInstance = "2001";
            Person p = (Person) runtimeService.getVariable(executeInstance, "人员信息(添加固定版本)");
            System.out.println(p.getId() + "        " + p.getName());
    
        }
    

    4.查询流程变量的历史表

    历史的流程变量查询,指定流程变量的名称,查询act_hi_varinst表(也可以针对,流程实例ID,执行对象ID,任务ID查询)
        /**
         * 查询流程变量的历史表
         */
        @Test
        public void findHistoryProcessVariables() {
            List<HistoricVariableInstance> list = processEngine.getHistoryService()//
                    .createHistoricVariableInstanceQuery().processInstanceId("2001")//创建一个历史的流程变量查询对象
                    .variableName("请假天数")
                    .list();
            if (list != null && list.size() > 0) {
                for (HistoricVariableInstance hvi : list) {
                    System.out.println(hvi.getId() + "   " + hvi.getProcessInstanceId() + "   " + hvi.getVariableName() + "   " + hvi.getVariableTypeName() + "    " + hvi.getValue());
                    System.out.println("###############################################");
                }
            }
        }
    

    相关文章

      网友评论

          本文标题:5.activiti流程变量

          本文链接:https://www.haomeiwen.com/subject/slpnbftx.html