• Activiti流程变量


    流程变量在整个工作流中扮演很重要的作用

      例如:请假流程中有请假天数、请假原因等一些参数都为流程变量的范围。流程变量的作用域范围是流程实例。也就是说各个流程实例的流程变量是不相互影响的。

    添加流程变量

      1、在启动流程实例时,可以添加流程变量。  

    public void startProcess() throws Exception {
            String processDefinitionKey ="varTest";
            // 创建流程变量
            Map<String,Object> variables = new HashMap<String,Object>();
            variables.put("请假人", "冯小刚");
            // 在启动时设置流程变量
            ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey , variables );
            System.out.println("pid:" + pi.getId());
        }

    说明:

      1)     在启动流程实例时,通过重载startProcessInstanceByKey的方法可以加载流程变量。

      2)     第二个参数要求是Map<String ,Object>类型,意味着可以添加多个流程变量。

      3)     当这段代码执行完以后,会在数据库表act_ru_variable中添加两行记录。

      2、在办理任务时

        在办理任务时,有时候任务办理完成以后,要传递一些信息到系统中。这个时候可以利用TaskService这个类来添加流程实例。

    public void setVar() throws Exception {
            String processInstanceId = "1901";
            Task task =taskService.createTaskQuery().taskAssignee("manager").processInstanceId(processInstanceId ).singleResult();
    //        String taskId 
            /**
             *  在办理过程中设置流程变量
             */
    //        taskService.setVariable(taskId, variableName, value)   // 设置一个流程变量
            Map<String, Object> variables = new HashMap<>();
    //        variables.put("请假时间", "2013-11-22");
    //        variables.put("请假天数", "3");
            variables.put("请假天数", 3);
            taskService.setVariables(task.getId(), variables );
            /**
             * 在任务完成时设置流程变量
             */
    //        taskService.complete(taskId)
    //        Map<String, Object> variables = new HashMap<>();
    //        variables.put("请假原因", "约会!!");
    //        taskService.complete(task.getId(), variables);
            
        }

    说明:

      1)     利用setVariables方法在任务办理过程中添加一批流程变量。

      2)     利用setVariable方法在任务办理过程中添加一个流程变量。

      3)     TaskService有一个重载 complete方法

      3、执行流程实例时直接在Execution上设置流程变量 

        因为流程变量的作用域就是流程实例,所以只要设置就行了,不用管在哪个阶段

    public void setVarByExecution() throws Exception {
            String processInstanceId = "1901";
            Task task =taskService.createTaskQuery().taskAssignee("manager").processInstanceId(processInstanceId ).singleResult();
    //        String taskId 
            /**
             *  在办理过程中设置流程变量
             */
    //        taskService.setVariable(taskId, variableName, value)   // 设置一个流程变量
            Map<String, Object> variables = new HashMap<>();
            variables.put("批注", "好好约会,注意安全!!");
            runtimeService.setVariables(task.getExecutionId(), variables);
            /**
             * 在任务完成时设置流程变量
             */
    //        taskService.complete(taskId)
    //        Map<String, Object> variables = new HashMap<>();
    //        variables.put("请假原因", "约会!!");
    //        taskService.complete(task.getId(), variables);
            
        }

    另一种设置变量的方法:

    public void setVarByObj() throws Exception {
            String processInstanceId = "1901";
            Task task =taskService.createTaskQuery().taskAssignee("manager").processInstanceId(processInstanceId ).singleResult();
            Form form = new Form();//这个javabean实现了Serializable接口
      
        form.setName("表单名称");
            form.setContent("我是张三,我要请假3天");
            taskService.setVariable(task.getId(), "form", form);
        }

    获取流程变量

      可以通过runTimeService的方法来获取流程变量。

    public void viewVar() throws Exception {
            String processInstanceId = "1901";
            Task task =taskService.createTaskQuery().taskAssignee("user").processInstanceId(processInstanceId ).singleResult();
            System.out.println("taskName:" + task.getName());
    //        String variableName = "请假人";
    //        String val = (String)taskService.getVariable(task.getId(), variableName );
            Map<String,Object> vars = taskService.getVariables(task.getId());
            for (String variableName : vars.keySet()) {
                String val = (String) vars.get(variableName);
                System.out.println(variableName + " = " +val);
            }
        }

      说明:这些流程变量是从act_ru_variable这个表中读出来的。

  • 相关阅读:
    centOS7 安装docker
    go中json的tag使用
    secureCRT操作redis-cli时, 不断追加ip:port
    golang gorm框架的默认时区问题
    java Date 转mysql timestamp 秒数不一致
    golang sqlx查询时, struct字段冲突
    golang入门time与string转换, time加减时间, 两个时间差
    idea设置每次打开手动选择工作空间
    panic: reflect.Value.Interface: cannot return value obtained from unexported field or method
    Render函数(4):开发可进行排序的表格组件
  • 原文地址:https://www.cnblogs.com/cxyj/p/3877996.html
Copyright © 2020-2023  润新知