Activiti7 流程变量【十五】

Activiti 7系列文章目录

文章代码下载

Activiti7 工作流设计器【一】
Activiti7 创建表【二】
Activiti7 表结构介绍 【三】
Activiti7 设计器创建流程 【四】
Activiti7 部署流程【五】
Activiti7 查询流程【六】
Activiti7 删除流程【七】
Activiti7 生成SVG图片【八】
Activiti7 发起任务【九】
Activiti7 查询任务执行流程图【十】
Activiti7 完成任务【十一】
Activiti7 历史数据【十二】
Activiti7 任务办理人、委派、转办、持有人、候选人、候选人组、审批意见【十三】
Activiti7 监听器【十四】
Activiti7 流程变量【十五】
Activiti7 网关Gateway【十六】
Activiti7 整合SpringBoot【十七】
Activiti7 多种任务类型【十八】
Activiti7 子流程【十九】
Activiti7 流程回退、流程拒绝【二十】

简介

流程变量就是if(条件)中使用到的变量用于参与条件表达式的计算。
变量都是有作用域的,在程序中方法内部的变量是属于局部变量,方法外的变量属于全局变量,同样流程变量也分全局变量global(作用在整个流程实例范围)和本地变量local(作用在单个任务或者单个执行实例)。

流程变量设置时机

启动实例时设置为全局变量

runtimeService.startProcessInstanceByKey(key, map);

任务办理时设置变量

在完成任务时设置流程变量,该流程变量只有在该任务完成后其它结点才可使用该变量,它的作用域是整个流程实例,如果设置的流程变量的key在流程实例中已存在相同的名字则后设置的变量替换前边设置的变量。

String assingee = "张三";
Task task = taskService.createTaskQuery()
                .processDefinitionKey(key)
                .taskAssignee(assingee)
                .singleResult();
if(task != null){
    //完成任务时为以后的节点设置流程变量的值
    taskService.complete(task.getId(),map);
}

通过流程实例设置变量

通过流程实例id设置全局变量,该流程实例必须未执行完成。executionId必须当前未结束的流程实例执行id,通常此id设置流程实例的id。也可以通runtimeService.getVariable()获取流程变量。

@Test
public void setGlobalVariableByExecutionId(){
    String executionId="2601";
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    RuntimeService runtimeService = processEngine.getRuntimeService();
    Evection evection = new Evection();
    evection.setNum(3d);
//      通过流程实例 id设置流程变量
    runtimeService.setVariable(executionId, "evection", evection);
//      一次设置多个值
//      runtimeService.setVariables(executionId, variables)
}

通过当前任务设置变量

@Test
public void setGlobalVariableByTaskId(){
	String taskId="1404";
	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
	TaskService taskService = processEngine.getTaskService();
	Evection evection = new Evection();
	evection.setNum(3);
	//通过任务设置流程变量
	taskService.setVariable(taskId, "evection", evection);
	//一次设置多个值 
	//taskService.setVariables(taskId, variables)
}


办理任务前设置局部变量

任务办理时设置local流程变量,当前运行的流程实例只能在该任务结束前使用,任务结束该变量无法在当前流程实例使用,可以通过查询历史任务查询。

//localScope—如果为true,提供的变量将存储在任务本地,而不是存储在流程实例范围内(这是complete(String, Map)的默认值)。
void complete(String taskId, Map<String, Object> variables, boolean localScope);
//  设置local变量,作用域为该任务
Map<String, Object> variables = new HashMap<>();
// 设置单个
taskService.setVariableLocal(taskId, "xxx", evection);
// 设置多个
taskService.setVariablesLocal(taskId, variables);
taskService.complete(taskId);

条件分支

流程条件就是在连接线(sequenceFlow)增加一个Boolean类型的添加,当条件满足后就会走对应的任务。

  • 当有多个条件满足时:只要满足条件的都执行。
  • 当所有条件都不成立时:抛异常,流程走不下去报错。

image.png
image.png
image.png
发起流程的时候添加变量

//发起流程
@Test
public void testStartProcess(){
    Map<String,Object> variables = new HashMap<>();
    variables.put("myname","张三");
    variables.put("day","10");

    //返回流程实例
    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("MyOaLeave-01",variables);
    System.out.println("processInstance.getId() = " + processInstance.getId());
    System.out.println("processInstance.getProcessInstanceId() = " + processInstance.getProcessInstanceId());
    System.out.println("processInstance.getName() = " + processInstance.getName());
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员一灯

请给我打钱!!!谢谢,不客气!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值