Activiti工作流框架学习三:流程变量

流程变量在整个工作流扮演着很重要的角色,用于数据的传递

这里写图片描述

设置流程变量的方式

方式一:启动流程实例时设置

/**
 * 启动流程实例时设置流程变量
 */
@Test
public void test2() {
    String processDefinitionKey = "bxlc";// 流程定义key
    Map<String, Object> variables = new HashMap<String, Object>();
    variables.put("key1", "value1");
    variables.put("loginUser", "小王");
    ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey, variables);
    System.out.println(pi.getId());
}

方式二:使用RuntimeService的set方法设置

/**
 * 使用RuntimeService的set方法设置流程变量
 */
@Test
public void test4() {
    String executionId = "201";//流程实例id
    Map<String, Object> variables = new HashMap<>();
    variables.put("审批意见", "以后注意");
    variables.put("user", new User(10,20,"北京"));
    processEngine.getRuntimeService().setVariables(executionId, variables);
    //用于设置单个key-value
    //processEngine.getRuntimeService().setVariable(executionId, variableName, value);
}

方式三:使用TaskService的set方法设置

/**
 * 使用TaskService的set方法设置流程变量
 */
@Test
public void test5() {
    String taskId = "304";
    String key = "审批意见";
    Object value = "不批";
    processEngine.getTaskService().setVariable(taskId , key, value);
}

方式四:办理任务时设置

/**
 * 办理任务时设置流程变量
 */
@Test
public void test3() {
    String taskId = "206";//任务id
    Map<String, Object> variables = new HashMap<>();
    variables.put("qjyy", "不想上班");
    variables.put("qjts", 365);
    processEngine.getTaskService().complete(taskId, variables);
}

注意
1.在同个流程实例下,流程变量里如果使用同一个key设置多次,则后一个value会把前一个value覆盖
2.而不同流程实例下,流程变量的key可以相同,不冲突不覆盖
3.如果设置的value是自定义的类型,则该类型需要实现序列号接口,而且该对象会被序列化存储到act_ge_bytearray表中

获取流程变量的方式

方式一:使用RuntimeService的get方法获取

/**
 * 使用RuntimeService的get方法获取流程变量
 */
@Test
public void test6() {
    String executionId = "201";
    Map<String, Object> variables = processEngine.getRuntimeService().getVariables(executionId);
    Set<String> keySet = variables.keySet();
    for (String key : keySet) {
        Object value = variables.get(key);
        System.out.println(key + " = " + value);
    }
}

方式二:使用TaskService的get方法获取

/**
 * 使用TaskService的get方法获取流程变量
 */
@Test
public void test7() {
    String taskId = "304";
    Object value = processEngine.getTaskService().getVariable(taskId , "user");
    System.out.println(value);
}

方式三:使用框架提供的表单式获取
这里写图片描述
注意:
1.方式三中,当执行到该任务时,框架会根据当前流程实例去流程变量表act_ru_variable里查找该key,如果有则赋值成功,没有则抛出异常
2.当流程变量表中存有自定义类型的对象数据时,如果更改了自定义类型的内容,则在取出数据库数据时,该对象会反序列化失败
3.当流程实例的所有任务执行完成后,相应的流程变量会从数据库里删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值