当前位置: 首页 > news >正文

Flowable进阶学习(九)数据对象DataObject、租户Tenant、接收任务ReceiveTask

文章目录

  • 一、数据对象DataObject
  • 二、租户 Tenant
  • 三、接收任务 ReceiveTask
    • 案例

一、数据对象DataObject

DataObject可以⽤来定义⼀些流程的全局属性。

  1. 绘制流程图,并配置数据对象(不需要选择任意节点)
    在这里插入图片描述
    在这里插入图片描述2. 编码与测试
/*** 部署流程*/
@Test
void deploy() {Deployment deployment = repositoryService.createDeployment().addClasspathResource("process/请假流程-dataObj.bpmn20.xml").name("DataObj").deploy();System.out.println("deployment.getId() = " + deployment.getId());System.out.println("deployment.getName() = " + deployment.getName());
}/*** 启动流程*/
@Test
void startFlow() {ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(PROC_KEY);System.out.println("processInstance.getId() = " + processInstance.getId());
}/*** 查询数据对象* Test2_DataObj    : key: creater,name: 流程创建人,value: Huathy*/
@Test
void getDataObj() {ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().processDefinitionKey(PROC_KEY).latestVersion().singleResult();List<Execution> list = runtimeService.createExecutionQuery().processDefinitionId(pd.getId()).list();list.forEach(execution -> {DataObject obj = runtimeService.getDataObject(execution.getId(), "流程创建人");String msg = String.format("key: %s,name: %s,value: %s", obj.getDataObjectDefinitionKey(), obj.getName(), obj.getValue());logger.info(msg);});
}

查看ACT_RU_VARIABLE表,数据与ACT_RU_EXECUTION表中与EXECUTION_ID_相关联。
在这里插入图片描述

二、租户 Tenant

租户。多租户:单独的实例可以为多个组织服务。Flowable使用TenantID来区分流程归属于哪个租户。
部署与启动流程示例:部署的时候带上租户ID,后续的启动查询都要带上租户ID。

/*** 部署流程*/
@Test
void deploy() {Deployment deployment = repositoryService.createDeployment().addClasspathResource("process/请假流程-dataObj.bpmn20.xml").name("DataObj").tenantId("A").deploy();System.out.println("deployment.getId() = " + deployment.getId());System.out.println("deployment.getName() = " + deployment.getName());
}/*** 启动流程* processInstance.getId() = 0e33c8a0-a7b4-11ed-9f55-00155d067d63* org.flowable.common.engine.api.FlowableObjectNotFoundException: Process definition with key 'qjlc-dataObj' and tenantId 'B' was not found*/
@Test
void startFlow() {ProcessInstance processInstance = runtimeService.startProcessInstanceByKeyAndTenantId(PROC_KEY,"A");System.out.println("processInstance.getId() = " + processInstance.getId());ProcessInstance processInstance2 = runtimeService.startProcessInstanceByKeyAndTenantId(PROC_KEY,"B");System.out.println("processInstance2.getId() = " + processInstance2.getId());
}

三、接收任务 ReceiveTask

接收任务(ReceiveTask),是bpm2.0规范的一种任务,是一种等待任务,当该任务到达的时候,它不做任何逻辑,而是被动地等待用户Trigger。 当流程流转到接收任务,流程状态会保存到数据库(ACT_RU_EXECUTION表会维护该任务)。
使用场景:不明确的阻塞。例如一个复杂的计算需要等待很多条件,这些条件需要人工判断,则可以手动触发。

案例

  1. 绘制流程图(信封✉图标)
    在这里插入图片描述
  2. 部署流程与启动流程(启动流程后,ACT_RU_TASK表并没有数据,而数据存放在ACT_RU_EXECUTION表)
/** 部署流程 */
@Test
void deploy() {Deployment deployment = repositoryService.createDeployment().addClasspathResource("process/签收任务.bpmn20.xml").name("ReceiveTask").deploy();logger.info("deployment.getId() = " + deployment.getId());logger.info("deployment.getName() = " + deployment.getName());
}
/** 启动流程 */
@Test
void startFlow() {ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(PROC_KEY);logger.info("processInstance.getId() = " + processInstance.getId());
}
  1. 获取执行实例
@Test
void getExecution() {List<Execution> list = runtimeService.createExecutionQuery().processDefinitionKey(PROC_KEY).list();list.forEach(execution -> {String msg = String.format("exeId: %s,exeName: %s, actID: %s", execution.getId(), execution.getName(),execution.getActivityId());logger.info(msg);});
}
  1. 触发流程(由于trigger方法需要传入执行实例ID,所以可以根据ReceiveTask的节点名称,查询当前待触发的流程实例ID。ACT_RU_EXECUTION表的数据在trigger后会删除记录,历史记录保存到ACT_HI_ACTINST表)
@Test
void triggerAndQuery() {List<Execution> list = runtimeService.createExecutionQuery().processDefinitionKey(PROC_KEY).activityId("cksj").list();list.forEach(execution -> {System.out.println("execution.getActivityId() = " + execution.getActivityId());runtimeService.trigger(execution.getId());});
}

相关文章:

Flowable进阶学习(九)数据对象DataObject、租户Tenant、接收任务ReceiveTask

文章目录一、数据对象DataObject二、租户 Tenant三、接收任务 ReceiveTask案例一、数据对象DataObject DataObject可以⽤来定义⼀些流程的全局属性。 绘制流程图&#xff0c;并配置数据对象&#xff08;不需要选择任意节点&#xff09; 2. 编码与测试 /*** 部署流程*/ Test…...

C语言实现五子棋(n子棋)

五子棋的历史背景&#xff1a; 五子棋起源于中国&#xff0c;是全国智力运动会竞技项目之一&#xff0c;是一种两人对弈的纯策略型棋类游戏。双方分别使用黑白两色的棋子&#xff0c;下在棋盘直线与横线的交叉点上&#xff0c;先形成五子连珠者获胜。五子棋容易上手&#xff0c…...

OpenStack云平台搭建(2) | 安装Keystone

目录 1、登录数据库配置 2、数据库导入Keystone表 3、配置http服务 4、创建域、用户 5、创建脚本 Keystone&#xff08;OpenStack Identity Service&#xff09;是 OpenStack 框架中负责管理身份验证、服务访问规则和服务令牌功能的组件。下面我们进行Keystone的安装部署 1…...

基于javaFX的固定资产管理系统

1. 总体设计 本系统分为登录模块、资产管理模块、资产登记模块和信息展示模块共四个模块。 登录模块的主要功能是&#xff1a;管理员通过登录模块登录本系统&#xff1b; 资产管理模块的主要功能有&#xff1a;修改、删除系统中的固定资产&#xff1b; 在资产登记模块中&#…...

板子登录和挂载问题记录

ubuntu登录板子问题 ssh登录ssh 10.1.3.15&#xff0c;显示No route to host 则尝试在板子上ping 本机ip 试一下 挂载 本地机器vim /etc/export编辑此内容并保存 /exports_0209/tda4_build *(rw,no_root_squash,nohide,insecure,no_subtree_check,async)1.挂载nfs方法 mou…...

二、Linux文件 - Open函数讲解实战

目录 1.Open函数讲解 2.open函数实战 2.1 man 1 ls 查询Shell命令 2.2 man 2 open 查看系统调用函数 2.3项目实战 2.3.1O_RDWR和O_CREAT 2.3.2O_APPEND的用法 1.Open函数讲解 高频使用的Linux系统调用&#xff1a;open write read close Linux自带的工具&#xf…...

源码分析Spring解决循环依赖的过程

循环依赖是之前很爱问的一个面试题&#xff0c;最近不咋问了&#xff0c;但是梳理Spring解决循环依赖的源码&#xff0c;会让我们对Spring创建bean的流程有一个清晰的认识&#xff0c;有必要搞一搞。开始搞之前&#xff0c;先参考了这个老哥写的文章&#xff0c;对Spring处理循…...

LabVIEW中加载.NET 2.0,3.0和3.5程序集

LabVIEW中加载.NET 2.0,3.0和3.5程序集已使用.NETFramework 2.0,3.0或3.5创建了.NET程序集&#xff0c;但是当尝试在构造函数节点中加载这些程序集时&#xff0c;却收到LabVIEW消息显示: 所选文件不是.NET程序集&#xff0c;所属类型库或自动化可执行文件。所以想确认是否可以在…...

Fluent Python 笔记 第 2 章 序列构成的数组

2.1 内置类型序列概览 容器序列&#xff08;能存放不同类型的数据&#xff09;&#xff1a;(作者分的类) list、tuple 和 collections.deque扁平序列&#xff08;只能容纳一种类型&#xff09;&#xff1a; str、byes、bytearray、memoryview 和 array.array可变&#xff1a…...

句子扩充法

人&#xff0c;物&#xff0c;时&#xff0c;地&#xff0c;事 什么人和什么物在什么时间什么地点发生了什么事。 思维导图&#xff1a;以人为中心&#xff0c;人具有客观能动性。 例如&#xff1a;秋燕南飞。 扩展为&#xff1a; 盘旋在洞庭湖上方的大雁渐渐消失了。“它们都…...

Java并发编程概述

在学习并发编程之前&#xff0c;我们需要稍微回顾以下线程相关知识&#xff1a;线程基本概念程序&#xff1a;静态的代码&#xff0c;存储在硬盘中进程&#xff1a;运行中的程序&#xff0c;被加载在内存中&#xff0c;是操作系统分配内存的基本单位线程&#xff1a;是cpu执行的…...

Java常见数据结构的排序与遍历(包括数组,List,Map)

数组遍历与排序 数组定义 //定义 int a[] new int[5]int[] a new int[5];//带初始值定义 int b[] {1,2,3,4,5};赋值 //定义时赋值 int b[] {1,2,3,4,5};//引用赋值 a[6] 1 a[9] 9 //未赋值为空取值 //通过下表取值&#xff0c;从0开始 b[1] 1 b[2] 2遍历 Test p…...

数据结构|绪论

&#x1f525;Go for it!&#x1f525; &#x1f4dd;个人主页&#xff1a;按键难防 &#x1f4eb; 如果文章知识点有错误的地方&#xff0c;请指正&#xff01;和大家一起学习&#xff0c;一起进步&#x1f440; &#x1f4d6;系列专栏&#xff1a;数据结构与算法 &#x1f52…...

内网渗透(十二)之内网信息收集-内网端口扫描和发现

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…...

RabbitMq相关面试题

文章目录消息队列有没有接触过&#xff1f; 简单介绍一下&#xff1f;消息中间件模式分类 &#xff1f;使用MQ有什么好处&#xff1f;MQ如何选型 &#xff1f;你们项目中用到过 MQ 吗&#xff1f;谈谈你对 MQ 的理解&#xff1f;MQ消费者消费消息的顺序一致性问题&#xff1f;R…...

树莓派开机自启动Python脚本或者应用程序

树莓派开机自启动Python脚本或者应用程序前言一、对于Python脚本的自启动方法1、打开etc/rc.local文件2、编辑输入需要启动的指令3、重启树莓派验证二、对于需要读写配置文件的应用程序的自启前言 在树莓派上写了一些Python脚本&#xff0c;还有一个java 的jar包想要在树莓派上…...

全国青少年编程等级考试scratch四级真题2022年9月(含题库答题软件账号)

青少年编程等级考试scratch真题答题考试系统请点击电子学会-全国青少年编程等级考试真题Scratch一级&#xff08;2019年3月&#xff09;在线答题_程序猿下山的博客-CSDN博客_小航答题助手1、运行下列程序&#xff0c;说法正确的是&#xff1f;&#xff08; &#xff09;A.列表…...

NodeJS与npm版本不一致时降级npm的方法

首先查看 Node.js 与 npm 版本对应关系&#xff1a;Node.js与npm版本查看。 安装 cnpm&#xff1a; npm install -g cnpm 查看一下 npm 和 cnpm 的镜像&#xff1a; npm config get registry cnpm config get registry 2 如果不是 https://registry.npm.taobao.org/ 的话就修…...

《C++ Primer Plus》第16章:string类和标准模板库(8)

关联容器 关联容器&#xff08;associative container&#xff09;是对容器概念的另一个改进。关联容器将值与键关联在一起&#xff0c;并使用键来查找值。例如&#xff0c;值可以表示雇员信息&#xff08;如姓名、地址、办公室号码、家庭电话和工作电话、健康计划等&#xff…...

Linux安装达梦8数据库

Linux安装达梦8数据库 服务器系统&#xff1a;centos7 数据库版本&#xff1a;达梦8 先获取安装包&#xff1a;https://eco.dameng.com/download/?_blank 选择相应版本下载,下载完解压之后会得到一个iso文件&#xff0c;把他上传到服务器上&#xff0c;建议上传到/opt目录下…...

终极指南:如何用sndcpy将Android音频无损转发到电脑

终极指南&#xff1a;如何用sndcpy将Android音频无损转发到电脑 【免费下载链接】sndcpy Android audio forwarding PoC (scrcpy, but for audio) 项目地址: https://gitcode.com/gh_mirrors/sn/sndcpy 你是否曾经想在电脑上收听手机上的音乐、播客或游戏音频&#xff1…...

SQL Chat:用自然语言对话操作数据库的实战指南

1. 项目概述&#xff1a;当自然语言遇见数据库 作为一名和数据打了十几年交道的开发者&#xff0c;我深知与数据库交互的痛点。无论是写复杂的多表关联查询&#xff0c;还是排查一个数据异常&#xff0c;传统的SQL客户端工具&#xff08;比如Navicat、DBeaver&#xff09;虽然…...

【信息科学与工程学】【安全领域】第二十七篇 几何学在网络安全的应用(1)

网络安全中的几何学应用全景 一、几何学与网络安全的核心联系框架 1.1 几何思维在网络安全的映射 几何概念 网络安全映射 安全价值 应用本质 空间与距离​ 特征空间、异常距离 相似性度量、异常检测 量化“正常”与“异常”的距离 拓扑结构​ 网络连接图、攻击路径 …...

reverse-geocoder未来展望:AI增强地理编码与智能位置预测

reverse-geocoder未来展望&#xff1a;AI增强地理编码与智能位置预测 【免费下载链接】reverse-geocoder A fast, offline reverse geocoder in Python 项目地址: https://gitcode.com/gh_mirrors/re/reverse-geocoder 在当今数据驱动的世界中&#xff0c;地理编码技术已…...

半导体技术评估:如何判断新技术从概念到产品的“露点”

1. 开篇&#xff1a;从“露点”看半导体行业的虚实迷雾 大家好&#xff0c;我是Don Scansen。在半导体行业摸爬滚打了二十多年&#xff0c;从设计、验证到失效分析&#xff0c;几乎把产业链的各个环节都趟了一遍。今天&#xff0c;我想借这个新开的专栏&#xff0c;和大家聊聊一…...

刘教链|百万美刀的比特币:VanEck的预言与微策略的进化困境

BTC在8万刀附近磨了一周。就在市场踟蹰不前的时候&#xff0c;VanEck抛出一个大胆的预测[1]。一、VanEck的百万预言5月9日&#xff0c;VanEck的投资主管Matthew Sigel说了一番话。他认为比特币会在下一届美国总统任期结束前达到100万美刀[1]&#xff0c;算下来大概是2031年前后…...

如何利用League Akari提升英雄联盟游戏体验:完整指南

如何利用League Akari提升英雄联盟游戏体验&#xff1a;完整指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否曾在英雄联盟游戏中因为…...

Flutter for OpenHarmony 学习视频播放器技术文章

Flutter for OpenHarmony 学习视频播放器技术文章 欢迎加入开源鸿蒙跨平台社区&#xff1a;https://openharmonycrossplatform.csdn.net &#x1f3ac; Flutter for OpenHarmony 学习视频播放器开发实战 大家好&#xff01;今天带大家从零开始打造一个专为在线课程、慕课学习…...

基于Ansible Playbook的Kubernetes集群自动化部署实践

1. 项目概述&#xff1a;一个为Kubernetes集群部署而生的自动化剧本如果你和我一样&#xff0c;长期在运维和DevOps一线摸爬滚打&#xff0c;那么对Kubernetes集群的初始化部署一定又爱又恨。爱的是它带来的强大编排能力&#xff0c;恨的是那套繁琐、易错、文档分散的kubeadm i…...

java+uniapp集成unipush2实现消息推送

一、开通uniPush2.0 1.实名认证 登录DCloud开发者中心&#xff0c;通过实名认证 2.进入UniPush控制台 HBuilderX中打开项目的manifest.json文件 导航在“App模块配置” → 项的“Push(消息推送)” → “UniPush”下点击配置 或者申请开通。 3.配置应用信息 在UniPush开通界面…...