第八篇flowable之流程变量(代码片段)

波波烤鸭 波波烤鸭     2022-11-30     546

关键词:

流程变量

  流程实例按步骤执行时,需要使用一些数据。在Flowable中,这些数据称作变量(variable),并会存储在数据库中。变量可以用在表达式中(例如在排他网关中用于选择正确的出口路径),也可以在Java服务任务(service task)中用于调用外部服务(例如为服务调用提供输入或结果存储),等等。

  流程实例可以持有变量(称作流程变量 process variables);用户任务以及执行(executions)——流程当前活动节点的指针——也可以持有变量。流程实例可以持有任意数量的变量,每个变量存储为ACT_RU_VARIABLE数据库表的一行。

  所有的startProcessInstanceXXX方法都有一个可选参数,用于在流程实例创建及启动时设置变量。例如,在RuntimeService中:

ProcessInstance startProcessInstanceByKey(String processDefinitionKey, Map<String, Object> variables);

  也可以在流程执行中加入变量。例如,(RuntimeService):

void setVariable(String executionId, String variableName, Object value);
void setVariableLocal(String executionId, String variableName, Object value);
void setVariables(String executionId, Map<String, ? extends Object> variables);
void setVariablesLocal(String executionId, Map<String, ? extends Object> variables);

1.全局变量

  流程变量的默认作用域是流程实例。当一个流程变量的作用域为流程实例时,可以称为 global 变量

注意:如: Global变量:userId(变量名)、zhangsan(变量值)

  global 变量中变量名不允许重复,设置相同名称的变量,后设置的值会覆盖前设置的变量值。

2. 局部变量

  任务和执行实例仅仅是针对一个任务和一个执行实例范围,范围没有流程实例大, 称为 local 变量。

  Local 变量由于在不同的任务或不同的执行实例中,作用域互不影响,变量名可以相同没有影响。Local 变量名也可以和 global 变量名相同,没有影响。

3.案例讲解

需求:员工创建出差申请单,由部门经理审核,部门经理申请通过后3天以下由财务直接申批,3天以上先由总经理审批,总经理审批通过后再由财务审批。

连接先设置条件

部署流程

// 代码获取加【v:boge3306】

启动流程实例:并且指定全局流程变量

/**
     * 在启动流程实例的时候设置流程变量
     */
    @Test
    public void runProcess()
        // 获取流程引擎对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 启动流程实例通过 RuntimeService 对象
        RuntimeService runtimeService = processEngine.getRuntimeService();
        // 设置流程变量  // 代码获取加【v:boge3306】
     
    

完成Task任务,同时也可以指定流程变量

/**
     * 完成任务时指定流程变量
     */
    @Test
    public void completeTask()

        // 获取流程引擎对象  // 代码获取加【v:boge3306】
    

当然我们也可以在处理流程之外通过Task编号来修改流程变量

/**
     * 通过当前任务设置
     */
    @Test
    public void currentTask()
        //   当前待办任务id
        //  获取processEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        Task task = taskService.createTaskQuery()
                .processDefinitionId("evection:1:4")
                .taskAssignee("王五")
                .singleResult();
        // 添加流程变量
        Map<String, Object> map = task.getProcessVariables();
        map.put("num",1);
        //  一次设置多个值 设置局部变量
        taskService.setVariables(task.getId(), map);
    

搞定~

perfview专题(第八篇):洞察c#内存泄漏之寻找静态变量名和gc模式(代码片段)

一:背景这篇我们来聊一下PerfView在协助WinDbg分析Dump过程中的两个超实用技巧,可能会帮助我们快速定位最后的问题,主要有如下两块:洞察内存泄漏中的静态大集合变量名。验证当前程序的GC模式。这里就把经... 查看详情

第八篇集合与容器(代码片段)

表格数据的存储packagecom.zzp.demo;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.Set;/****测试表格数据的存储*@authorjava**/publicclassTestStoreDatapublicst 查看详情

第八篇django分页(代码片段)

Django分页1.复杂版data=[]foriinrange(1,302):tmp="id":i,"name":"alex-".format(i)data.append(tmp)print(data)defuser_list(request):#user_list=data[0:10]#user_list=data[10:20]try:current_page=int(request.G 查看详情

springcloud教程|第八篇:消息总线(springcloudbus)(代码片段)

一、安装rabbitmq二、pom父文件<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven. 查看详情

第八篇camunda系列-网关服务(代码片段)

网关篇  网关用来控制流程的流向1.排他网关  排他网关(exclusivegateway)(也叫异或网关XORgateway,或者更专业的,基于数据的排他网关exclusivedata-basedgateway),用于对流程中的决策建模。当执行到达这个网关时,会按照所有... 查看详情

python学习第八篇:requests库学习(代码片段)

​Python学习第八篇:requests库学习活动地址:CSDN21天学习挑战赛——这里主要学习requests这个http模块,该模块主要用于发送请求获取响应urlib模块也可以实现request模块s能实现的功能,但是用的最多的还是requests模... 查看详情

python学习第八篇:requests库学习(代码片段)

​Python学习第八篇:requests库学习活动地址:CSDN21天学习挑战赛——这里主要学习requests这个http模块,该模块主要用于发送请求获取响应urlib模块也可以实现request模块s能实现的功能,但是用的最多的还是requests模... 查看详情

python之流程控制(代码片段)

Python之流程控制if语句条件判断语句ifa==b:pass#满足条件再执行ifa==b:passelse:pass#满足条件执行第一种语句,不满足条件则执行第二种语句ifa==b:#条件1pass#语句1elifa>b:#条件2pass#语句2else:pass#语句3如果满足条件1,则执行语句1,语句2... 查看详情

第八篇camunda系列-网关服务(代码片段)

网关篇  网关用来控制流程的流向1.排他网关  排他网关(exclusivegateway)(也叫异或网关XORgateway,或者更专业的,基于数据的排他网关exclusivedata-basedgateway),用于对流程中的决策建模。当执行到... 查看详情

第八篇:面向对象(代码片段)

1类与对象类即类别、种类,是面向对象设计最重要的概念,对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体那么问题来了,先有的一个个具体存在的对象(比如一个具体存在的人),还是先有的人... 查看详情

java基础之流程语句(代码片段)

JAVA流程语句有几下几种:一、if语句:1.if语句:如果满足条件语句,则执行执行语句;   if(条件语句)    执行语句;     ....;   2.if....else语句:如果满足判断语句,则执行执行语句1,否则执行执行语句2;... 查看详情

mysql之流程函数(代码片段)

...末私信作者,我们一起去大厂。本篇总结的是《MySQL之流程函数》,后续会每日更新~关于《Redis入门到精通》、《并发编程》、《Java全面入门》、《鸿蒙开发》等知识点可以参考我的往期博客相信自己,越活越坚强&#x... 查看详情

第八篇python面向对象编程(代码片段)

11面向对象编程面向对象编程——ObjectOrientedProgramming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。面向过程的程序设计把计算机程序视为一系列的命令集合... 查看详情

第八篇springsecurity核心过滤器-csrffilter(代码片段)

SpringSecurity核心过滤器-CsrfFilter  SpringSecurity除了认证授权外功能外,还提供了安全防护功能。本文我们来介绍下SpringSecurity中是如何阻止CSRF攻击的。一、什么是CSRF攻击  跨站请求伪造(英语:Cross-siterequestforgery&#... 查看详情

docker学习|第八篇:docker+jenkins单机部署springboot项目(代码片段)

Docker学习|第八篇:Docker+Jenkins单机部署SpringBoot项目前言最近学了一段时间的jenkins以及Docker之后,自己进行了一些自动持续集成的相关实践。在这里记录一下。环境本文所需环境如下:CentOs7系统已安装Docker已安装... 查看详情

第八篇商城系统-库存管理(代码片段)

库存管理1.仓库列表维护1.1注册中心配置首先我们需要把库存服务注册到注册中心中。然后在nacos中发现注册的服务1.2网关路由配置客户端首先访问的都是网关服务,所以需要配置对应的路由规则就可以完成对仓库列表的处理... 查看详情

第八篇商城系统-库存管理(代码片段)

库存管理1.仓库列表维护1.1注册中心配置首先我们需要把库存服务注册到注册中心中。然后在nacos中发现注册的服务1.2网关路由配置客户端首先访问的都是网关服务,所以需要配置对应的路由规则就可以完成对仓库列表的处理... 查看详情

neo4j第八篇:投射和过滤(代码片段)

投射子句用于定义如何返回数据集,并可以对返回的表达式设置别名,而过滤子句用于对查询的结果集按照条件进行过滤一,Return子句使用return子句返回节点,关系和关系。1,返回节点MATCH(nname:‘B‘)RETURNn2,返回关系MATCH(nname:... 查看详情