activiti流程变量

2023-09-19 22:30:00

activiti流程变量

定义
流程变量在Activiti 中是一个十分重要的角色,流程运转时,需要靠流程变量,业务系统和activiti 结合时少不了流程变量,流程变量就是activiti 在管理工作流时根据管理需要而设置的变量。比如:在出差申请流程流转是如果出差天数大于三天则需要总经理审批,否者只需要认识审批,出差天数就可以设置为流程变量,在流程流转时使用。

类型
如果将实体 存入到流程变量中,则实体必须实现序列化接口serializable,为了防止由于新增字段无法反序列化,需要横撑serialVersionUid

作用域:
流程变量的作用域可以是一个流程实例(processInstence),或者一个任务(Task),或者一个执行实例(execution)

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

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

流程变量的使用方法
- 在属性上使用UEL表达式
可以在assignee 处设置UEL表达式,表达式的值为任务的负责人,比如:${assigness},assigness 就是一个流程变量名称

    - 在连线上使用UEL表达式,决定流程走向
    比如:${price<10000},price 就是一个流程变量名称,uel表达式结果为一个布尔类型

实例
员工创建出差申请单,由部门经理审核,部门经理审核通过后,出差三天以下由财务直接审批,三天以上先由总经理审核,总经理审核通过再由财务审批。
在这里插入图片描述
设置流程实例的三种方式

方式一:启动流程时设置流程变量
在启动流程时设置流程变量,变量的作用域是整个流程实例。
通过Map<key,value>设置流程变量,map中可以设置多个变量,这个key就是流程变量的名字

/**
 * 发起一个流程
 */
@Test
public void test3(){
    ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
    // 发起流程 需要通过 runtimeService来实现
    RuntimeService runtimeService = engine.getRuntimeService();
    // 定义流程变量信息
    Map<String,Object> map = new HashMap<>();
    map.put("assignee1","张三");
    map.put("assignee2","李四");
    map.put("ass1","变量1");
    map.put("ass2",299);
    map.put("ass3","湖南长沙");
    map.put("ass4","波哥666");
    // 通过流程定义ID来启动流程  返回的是流程实例对象
    ProcessInstance processInstance = runtimeService
            .startProcessInstanceById("holiday1:1:42503",map);
    System.out.println("processInstance.getId() = " + processInstance.getId());
    System.out.println("processInstance.getDeploymentId() = " + processInstance.getDeploymentId());
    System.out.println("processInstance.getDescription() = " + processInstance.getDescription());
}

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

方式三:通过当前流程实例设置
通过流程实例id 设置全局变量,该流程实例必须未执行完成。

    @Test
    public void test_completeTask(){
        RepositoryServicerepositoryService =   processEngine().getRepositoryService();
        Map<String,Object>varlues = new HashMap();
        varlues.put("applyTitle","test_请假申请流程");
        varlues.put("applyTime","7天");
        TaskServicetaskService =processEngine().getTaskService();

        taskService.complete("5005",varlues);

}

通过任务实例来设置流程变量


    @Test
    public void testProcessInstanceIdSetVariables() {
        //        1.获取引擎
        ProcessEngineConfiguration configuration =
                ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(
                        "activiti.cfg.xml", "processEngineConfiguration");
        ProcessEngine processEngine = configuration.buildProcessEngine();
        // 获取 RuntimeService
        RuntimeService runtimeService = processEngine.getRuntimeService();
        List<ProcessInstance> processInstances = runtimeService.createProcessInstanceQuery().processDefinitionKey("evection-global").list();
 
        Evection evection = new Evection();
        evection.setNum(2d);
        for (ProcessInstance instance : processInstances) {
            runtimeService.setVariables("17501", Map.of("assigness02", "王经理"
                    , "assigness03", "李总经理"
                    , "evection", evection));
        }
    }

Local 流程变量的设置
local流程变量的作用域只在当前任务节点下可用
添加


@Test
    public void testTaskCompleteSetLocalVariables() {
        //        1.获取引擎
        ProcessEngineConfiguration configuration =
                ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(
                        "activiti.cfg.xml", "processEngineConfiguration");
        ProcessEngine processEngine = configuration.buildProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        List<Task> tasks = taskService.createTaskQuery().taskAssignee("").list();
        for (Task task : tasks) {
//            System.out.println(task.getId());
            taskService.setVariableLocal(task.getId(),"evection","local-variable");
        }
    }

查看

 @Test
    public void testTaskCompleteGetLocalVariables() {
        //        1.获取引擎
        ProcessEngineConfiguration configuration =
                ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(
                        "activiti.cfg.xml", "processEngineConfiguration");
        ProcessEngine processEngine = configuration.buildProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        List<Task> tasks = taskService.createTaskQuery().taskAssignee("王经理").list();
        for (Task task : tasks) {
            System.out.println(taskService.getVariableLocal("22502", "evection"));
        }
    }

如果任务完成后,可以通过查看历史信息进行查看

@Test
    public void testFindHisLocalVariable() {
        //        1.获取引擎
        ProcessEngineConfiguration configuration =
                ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(
                        "activiti.cfg.xml", "processEngineConfiguration");
        ProcessEngine processEngine = configuration.buildProcessEngine();
        HistoryService historyService = processEngine.getHistoryService();
        List<HistoricTaskInstance> instances = historyService.createHistoricTaskInstanceQuery().includeTaskLocalVariables().list();
        for (HistoricTaskInstance instance : instances) {
            System.out.println("==============================");
            System.out.println("任务id:" + instance.getId());
            System.out.println("任务名称:" + instance.getName());
            System.out.println("任务负责人:" + instance.getAssignee());
            System.out.println("任务local变量:" + instance.getTaskLocalVariables());
        }
    }
更多推荐

Linux Systemd 配置开机自启

博文目录文章目录Systemd操作方式配置方式配置示例参考SystemdSystemd是一个用于启动、管理和监控Linux系统的初始化系统。它是许多现代Linux发行版中默认的初始化系统,取代了传统的SysVinit和Upstart。Systemd的引入在Linux社区引起了一些争议,因为它与传统的初始化系统有很大的差

新增动态排序图、桑基图、AntV组合图,DataEase开源数据可视化分析平台v1.18.10发布

2023年9月14日,DataEase开源数据可视化分析平台正式发布v1.18.10版本。这一版本的功能升级包括:数据集方面,对字段管理的后台保存做了相关优化,降低了资源消耗;仪表板方面,对联动、查询结果以及过滤组件等进行了调整优化,避免系统卡顿情况的发生;视图方面,新增ECharts动态排序图、AntV组合图、Ant

Spring的 webFlux 和 webMVC

看到一个测评文章,并发在300的时候webMVC和webFlux的处理能力不相上下,当并发达到3000的时候,webFlux明显优于webMVC,有图有真相,我信了.webMVC是one-request-onethread堵塞模式,flux是非阻塞模式,是spring家族系列产品发展的两个方向.参考文档:https:/

SSM整合01

SSM01搭建SSM项目1.创建maven的web工程1.1pom.xml配置<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation=

【Linux】基础IO

文章目录一.C语言文件IO1.C语言文件接口汇总2.什么是当前路径?2.默认打开的三个流二.系统文件I/O1.open(1)open的第一个参数(2)open的第二个参数(3)open的第三个参数(4)open的返回值2.close3.write4.read三.文件描述符fd四.文件描述符的分配规则五.重定向1.重定向

哪些企业需要数字化转型?

数字化转型是一个广泛且持续的过程,可以使各行业的公司受益。虽然数字化转型的具体需求和目标可能因企业而异,但这通常是保持竞争力和相关性的必要条件。以下是一些可能需要数字化转型的公司和行业的一些示例:1.传统零售商:零售商需要适应电子商务和全渠道客户体验,以与亚马逊等在线巨头竞争。2.金融机构:银行和金融机构需要采用数字技

通用商城项目(下)之——Nginx的安装及使用

(作为通用商城项目的一个部分,单独抽离了出来。查看完整见父页面:)加入Nginx-完成反向代理、负载均衡和动静分离1.配置SSH-使用账号密码,远程登录Linux1.1配置实现1、配置sshd1)sudovi/etc/ssh/sshd_config2)将PasswordAuthentication的no改成yes3)重

WebDAV之π-Disk派盘 + BubbleUPnP

BubbleUPnP是一款功能强大的Android播放器,支持UPnP/DLNA多屏互动。它可以将手机内容投屏到电视大屏上,与家人和朋友一起共享。此外,BubbleUPnP还提供了丰富的音乐和影视资源,您可以在线搜索并播放喜欢的内容。以下是BubbleUPnP的一些主要特点:1.支持Chromecast和转码:Bubb

conda init 导致的 powershell 启动缓慢的问题(Loading personal and system profiles took xxxx ms.)

文章目录一、问题描述二、问题溯源三、解决方案3.1测试3.2方案一:不在powershell中使用conda3.2方案二:需要时再在powershell中使用conda(推荐)四、powershell7特点一、问题描述powershell启动缓慢:每次启动都会加载很久的配置文件:Loadingpersonalandsy

【Python】conda虚拟环境下使用pyinstaller打包程序为exe

文章目录一、为什么要用conda虚拟环境二、pyinstaller用法2.1安装PyInstaller2.2基本用法打包一个Python脚本2.21打包一个Python项目2.22打包选项2.3打包依赖项2.31导出依赖项列表2.32配置依赖项2.4自定义打包选项2.5打包完成后的文件2.6注意事项三、打包示例一、为什

uni-app tree(树状) 组件

先看效果:组件代码:<template><viewclass="next-tree"><viewclass="next-tree-mask":class="{'show':showTree}"@tap="_cancel"></view><viewclass="next-tree-cnt":class="{'show':

热文推荐