5.activiti流程变量

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 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流程变量)