runtimeService 运行时服务组件

2023-11-17

在Activiti中,启动一个流程后,会创建一个流程实例(ProcessInstance继承Execution(两个都是接口)),每个流程实例至少会有一个执行流(Execution),当流程实例没有流程分支时,一般情况下只会存在一个执行流,假设出现两个分支,则此时Activiti将会有三个执行流,第一个为原来的执行流,而其余两个为第一个执行流的子执行流。
act_ru_execution:流程实例和执行流的数据表(一般情况下两个为同一条数据,多个执行流时,自连接)
-->对应的映射实体为:ExecutionEntity
act_ru_event_subscr:事件描述的数据(CONFIGURATION_:流程定义ID)
1.启动
//Deployment_Id启动
// 部署流程描述文件
Deployment dep = repositoryService.createDeployment()
.addClasspathResource("bpmn/startById.bpmn20.xml").deploy();
// 查找流程定义
ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()
.deploymentId(dep.getId()).singleResult();
//设置流程参数
Map<String, Object> vars = new HashMap<String, Object>();
vars.put("days", 5);
//启动流程
runtimeService.startProcessInstanceById(pd.getId());
runtimeService.startProcessInstanceById(pd.getId(), vars);
runtimeService.startProcessInstanceById(pd.getId(), "vacationRequest1");
runtimeService.startProcessInstanceById(pd.getId(), "vacationRequest2", vars);
(第二个参数为String时,表示业务主键(对应BUSINESS_KEY_字段)),在同一个流程定义下,业务主键必须唯一
// 查询流程实例,结果为4
long count = runtimeService.createProcessInstanceQuery().count();
System.out.println("流程实例数量:" + count);、
//根据流程描述文件中定义的process节点的id属性来启动
// 部署流程描述文件
repositoryService.createDeployment()
.addClasspathResource("bpmn/startByKey.bpmn20.xml").deploy();
//初始化流程参数
Map<String, Object> vars = new HashMap<String, Object>();
vars.put("days", 4);
//启动流程
runtimeService.startProcessInstanceByKey("vacationRequest");
runtimeService.startProcessInstanceByKey("vacationRequest", vars);
runtimeService.startProcessInstanceByKey("vacationRequest", "testKey");
runtimeService.startProcessInstanceByKey("vacationRequest", "testKey2", vars);
(第二个参数:业务主键)
// 查询流程实例,结果为4
long count = runtimeService.createProcessInstanceQuery().count();
System.out.println("流程实例数量:" + count);
//根据消息事件的name属性启动 消息事件描述:act_ru_event_subscr
(查询流程定义ID,在启动流程)
// 部署流程描述文件
repositoryService.createDeployment()
.addClasspathResource("bpmn/startByMessage.bpmn20.xml").deploy();
//初始化流程参数
Map<String, Object> vars = new HashMap<String, Object>();
vars.put("days", 4);
//启动流程
runtimeService.startProcessInstanceByMessage("startMsg");
runtimeService.startProcessInstanceByMessage("startMsg", vars);
runtimeService.startProcessInstanceByMessage("startMsg", "testKey");
runtimeService.startProcessInstanceByMessage("startMsg", "testKey2", vars);
// 查询流程实例,结果为4
long count = runtimeService.createProcessInstanceQuery().count();
System.out.println("流程实例数量:" + count);
2.参数(和任务参数类似)
setVariable:整个流程中都可以使用
setVariableLocal:只作用于设置的执行流
//简单demo
// 部署流程描述文件
repositoryService.createDeployment()
.addClasspathResource("bpmn/variables.bpmn20.xml").deploy();
//启动流程
ProcessInstance pi = runtimeService.startProcessInstanceByKey("vacationRequest");
//查询流程实例的执行流(此处,流程实例和流程实例的主执行流实际上是同一条记录(ID))
Execution exe = runtimeService.createExecutionQuery().processInstanceId(pi.getId()).singleResult();
//设置流程参数
runtimeService.setVariable(exe.getId(), "days", 5);
//查找参数
System.out.println("获取流程参数:" + runtimeService.getVariable(exe.getId(), "days"));
//作用域demo
// 部署流程描述文件
repositoryService.createDeployment()
.addClasspathResource("bpmn/localVariable.bpmn20.xml").deploy();
//启动流程
ProcessInstance pi = runtimeService.startProcessInstanceByKey("vacationRequest");
//查询全部的任务,得到相应的执行流,设置不同的参数
List<Task> tasks = taskService.createTaskQuery().processInstanceId(pi.getId()).list();
for (Task task : tasks) {
Execution exe = runtimeService.createExecutionQuery()
.executionId(task.getExecutionId()).singleResult();
if ("Manager Audit".equals(task.getName())) {
//经理审核节点,设置Local参数
runtimeService.setVariableLocal(exe.getId(), "managerVar", "manager var");
} else {
//HR审核节点,设置全局参数
runtimeService.setVariable(exe.getId(), "hrVar", "hr var");
}
}
//两个执行流时输出参数
for (Task task : tasks) {
Execution exe = runtimeService.createExecutionQuery()
.executionId(task.getExecutionId()).singleResult();
if ("Manager Audit".equals(task.getName())) {
System.out.println("使用getVariableLocal方法获取经理参数:" +
runtimeService.getVariableLocal(exe.getId(), "managerVar"));
System.out.println("使用getVariable方法获取经理参数:" +
runtimeService.getVariableLocal(exe.getId(), "managerVar"));
} else {
System.out.println("使用getVariableLocal方法获取HR参数:" +
runtimeService.getVariableLocal(exe.getId(), "hrVar"));
System.out.println("使用getVariable方法获取HR参数:" +
runtimeService.getVariable(exe.getId(), "hrVar"));
}
}
//完成任务
for (Task task : tasks) {
taskService.complete(task.getId());
}
System.out.println("======== 完成流程分支后 ========");
//重新查找流程任务
tasks = taskService.createTaskQuery().processInstanceId(pi.getId()).list();
for (Task task : tasks) {
System.out.println("当前流程节点:" + task.getName());
Execution exe = runtimeService.createExecutionQuery()
.executionId(task.getExecutionId()).singleResult();
System.out.println("经理参数:" + runtimeService.getVariable(exe.getId(), "managerVar"));
System.out.println("HR参数:" + runtimeService.getVariable(exe.getId(), "hrVar"));
}
3.发送信号
// 部署流程描述文件
repositoryService.createDeployment()
.addClasspathResource("bpmn/MessageEvent.bpmn").deploy();
// 开始流流程
runtimeService.startProcessInstanceByKey("testProcess");
// 查询流执行流
List<Execution> exes = runtimeService.createExecutionQuery()
.processDefinitionKey("testProcess").list();
System.out.println("遇到消息事件节点,执行流数量:" + exes.size());
// 根据事件名称查询当前事件所在的执行流
Execution exe = runtimeService.createExecutionQuery()
.activityId("messageintermediatecatchevent1").singleResult();
// 触发消息事件
runtimeService.messageEventReceived("testMsg", exe.getId(), null);
// 查询执行流
exes = .createExecutionQuery().processDefinitionKey("testProcess").list();
System.out.println("触发消息事件节点后,执行流数量:" + exes.size());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

runtimeService 运行时服务组件 的相关文章

  • ACTIVITI 5.22.0 流程退回上一节点,实现多实例串行与并行退回

    import java util ArrayList import java util Date import java util HashSet import java util List import java util Map imp
  • 2023最新版本Activiti7系列-网关服务

    网关篇 网关可控制流程的执行流向 常用于拆分或合并复杂的流程场景 在Activiti7中 有以下几种类型的网关 排他网关 Exclusive Gateway 用于在流程中进行条件判断 根据不同的条件选择不同的分支路径 只有满足条件的分支会被
  • activiti报错:org.activiti.engine.ActivitiTaskAlreadyClaimedException: Task ‘12502‘ is already claimed

    在运行activiti时 报错信息如下 Exception in thread main org activiti engine ActivitiTaskAlreadyClaimedException Task 12502 is alrea
  • Activiti 5 提示:Default sequenceflow has a condition, which is not allowed

    今天重拾Activiti 5 Spring Boot 流程引擎管理 启动一个简单的请假流程实例 在控制台输出如下错误信息 org activiti engine ActivitiException Errors while parsing
  • 计算机专业毕业设计一

    概述 从一个医学生转行成为一名程序员 对于我来说 是一个超前的跨越 好奇的朋友会问了 医学这么吃香的行业 怎么转行做码农呢 这个道理很简单 就是想象和显示差距太大了 距离梦想的专业差了点距离 请允许我去小黑屋哭上半个小时 想当年 我意气风发
  • Activiti6.0学习实践(2)-源码工程构建

    上节对工作流和activiti有了一个基本认识 本节主要目的是构建源码工程 了解如何从git上创建本地的工程 同时对源码有个基本的了解 目录 1 克隆到本地 2 建立远程git库分支 3 导入到工程 4 源码基本结构 5 基于源码启动act
  • Activiti 工作流引擎 详解

    Activiti 工作流引擎 详解 1 Activiti工作流概述 1 1 工作流概述 1 2 工作流系统 1 3 Activiti概述 1 4 BPM 2 Activiti工作流环境搭建 3 Activiti 类 配置文件之间的关系 3
  • 【activiti】网关

    activiti网关 网关是用来控制流程的走向的 1 排他网关 ExclusiveGateway 1 1 什么是排他网关 排他网关 用来在流程中实现决策 当执行到这个网关时 会根据判断条件去选择执行某一条分支 注意 排他网关只会选择一个为t
  • 工作流Activiti7整合SpringBoot使用

    前言 一个软件系统中具有工作流的功能 我们把它称为工作流系统 一个系统中工作流的功能是什么 就是对系统的业务流程进行自动化管理 所以工作流是建立在业务流程的基础上 所以一个软件的系统核心根本上还是系统的业务流程 工作流只是协助进行业务流程管
  • activiti学习--06流程变量:流程变量+变量的类型+流程变量api+设置流程变量1或2+查询流程变量的历史表

    流程变量 1流程变量的作用域范围是只对应一个流程实例 所以只要设置就行了 不用管在哪个阶段设置 2各个流程实例的流程变量是不相互影响的 3流程实例结束完成以后流程变量还保存在数据库中 存放到流程变量的历史表中 4基本类型设置流程变量 在ta
  • Activiti使用教程

    1 概念 首先需要分清三个概念 流程 流程实例 任务实例 Activiti提供4个bean来操作流程 RepositoryService RuntimeService TaskService HistoryService 2 流程 针对于某
  • Activiti 学习(二)—— Activiti 流程定义和部署

    概述 在这一节 我们将创建一个 Activit 工作流 并启动这个流程 主要包含以下几个步骤 定义流程 按照 BPMN 的规范 使用流程定义工具 用流程符号把整个流程描述出来 部署流程 把画好的流程定义文件 加载到数据库中 生成表的数据 流
  • activiti5.17.0流程图及节点显示

    引用 activiti流程图上获取各节点的信息获取 这篇文章写得很好 揭示了图片点击出现信息的方法 于是我也做了 只不过有些改动 可能是activiti的版本不同的原因 jsp页面 通过流程实例id进行操作
  • activiti学习之服务任务

    写在前面 对于工作流 我们使用最多的是用户任务节点 用户任务节点就是给用户来生成任务的 需要人来手动的处理 而与之对应的还有服务任务节点 这种类型的节点需要人手动的参与而是程序来执行 即执行某个类的某个方法 这个类一般是org activi
  • [Activiti 资料]Activiti 画图工具(activiti-designer,actiBPM,activiti-app)

    1 eclipse eclipse的画流程工具 activiti designer 1 1 直接下载Eclipse 或者下载已经安装了activiti designer的eclipse 既然你下载到了 怎么也礼节性的感谢一下哈 链接 htt
  • SpringBoot 整合Activiti(二)——流程审批完整示例

    前两天做了一个SpringBoot整合Activiti的完整示例 功能包括 退回 通过 节点条件 指定办理人 生成流程图 高亮显示已办节点 查询任务列表 办理人 等 下面先简单记录 含完整代码 十六上班后再详细补充 1 画流程图 高亮生成的
  • runtimeService 运行时服务组件

    在Activiti中 启动一个流程后 会创建一个流程实例 ProcessInstance继承Execution 两个都是接口 每个流程实例至少会有一个执行流 Execution 当流程实例没有流程分支时 一般情况下只会存在一个执行流 假设出
  • 逐步寻找 Activiti Alfresco Workflow 教程 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我在哪里可以找到 Activiti Alfresco 工作流程 尤其是自定义工作流程 的简单教程 我是 Alfresco Activiti Worf
  • Spring新事务与Retryable相结合

    如果我有一个方法 对于某个异常有 Spring 可重试 并且还有一个 Transactional Requires new 那么每次重试完成时 它会创建一个新事务还是使用现有事务 ie Retryable maxAttempts 5 bac
  • 动态设置用户任务受让人

    我必须在 activiti 中创建需要以下用例的流程 1 表单有一个人员搜索字段 2 当有人填写表单并使用填充姓名的人员搜索字段完成任务时 我需要将分配的下一个任务的名称设置为可以对下一个任务执行操作的用户 如何使用 activiti 引擎

随机推荐

  • 使用slickedit调试开源代码

    slickedit linux下的神器啊 阅读代码堪比 source insight 调试代码堪比 visual studio nginx优秀的web服务器 因为其具有多进程 后台进程的特点 因此本文选择以此为例讲解slickedit如何对
  • Java中的排序算法

    冒泡排序 核心思想 冒泡排序 核心思想 冒泡排序 Bubble Sort 又被称为气泡排序或泡沫排序 它是一种较简单的排序算法 它会遍历若干次要排序的数列 每次遍历时 它都会从前往后依次的比较相邻两个数的大小 如果前者比后者大 则交换它们的
  • LeetCode题解——394. 字符串解码

    题目相关 题目链接 LeetCode中国 https leetcode cn com problems decode string 注意需要登录 题目描述 给定一个经过编码的字符串 返回它解码后的字符串 编码规则为 k encoded st
  • 昨晚做梦面试官问我三色标记算法

    本文已收录至GitHub 推荐阅读 Java随想录 微信公众号 Java随想录 原创不易 注重版权 转载请注明原作者和原文链接 文章目录 三色标记算法 增量更新 原始快照 某天 爪哇星球上 一个普通的房间 正在举行一场秘密的面试 面试官 我
  • Sql server 存储过程加密

    本方法可用于加密SQL存储过程 函数或者触发器 使用 WITH ENCRYPTION 选项 WITH ENCRYPTION 子句对用户隐藏存储过程的文本 例子 IF OBJECT ID N Pro Encrypt Test IS NOT N
  • PySide6-控件教程-005-QLabel标签控件-内边距、缩放、伙伴关系

    QLabel 标签控件 本文摘录自我的开源教程 PySide6 代码式教程 QLabel CSDN 平台仅做镜像 答疑 纠错请至 GitHub 提交 issue 内边距 QLabel还可以调整内边距 启用内容缩放 以更细致地调节显示效果 s
  • 与游戏世界交互作业

    一 编写一个简单的鼠标打飞碟 Hit UFO 游戏 游戏内容要求 游戏有 n 个 round 每个 round 都包括10 次 trial 每个 trial 的飞碟的色彩 大小 发射位置 速度 角度 同时出现的个数都可能不同 它们由该 ro
  • 如何将Python项目部署到新电脑上运行?

    如何将Python项目部署到新电脑上运行 在工作中 可能需要在新服务器上部署项目代码 例如新增服务器 把测试环境的代码部署到生产环境等 在生活中 也会遇到换新电脑 需要将自己在旧电脑上写的 项目 代码拷贝到新电脑上运行 本文将这个过程中的关
  • SSH版本信息可被获取漏洞解决方法CVE-1999-0634

    直接执行 cd etc touch ssh banner change echo Version is empty gt gt etc ssh banner change cd etc ssh cp sshd config sshd con
  • log4j漏洞复现

    第一步 下载marshalsec 源码进行编译 https github com mbechler marshalsec 下载后进行编译打包 mvn clean package DskipTests 得到jar文件 在这里插入图片描述 第二
  • Stable Diffusion 系列教程

    目录 1 提示词 基本的规则 2 提示词分类 2 1内容性提示词 2 2 画风艺术派提示词 2 3 画幅视角 2 4画质提示词 3 反向提示词 3 1 内容性反向提示词 3 2 画质性反向提示词 4 实例分析 5 权重 5 1 方法一 5
  • 无线传感网必知必会

    一 填空题 传感器网络三大基本要素 传感器 感知对象 用户 观测者 传感器节点的基本功能模块包括 数据采集模块 数据处理和控制模块 通信模块 供电模块 四个 其中 通信模块 能量消耗最大 传感器节点通信模块的工作模式有 发送 接收 空闲 睡
  • java七大排序——7_归并排序

    归并排序 将数组分为2块 再到每一小块再分为两块 直到最后一个元素为一块 然后进行有序数组合并 最终合并为一个有序数组 代码实现 public static void mergeSorts int array mergeSortsInter
  • 软件设计师--结构化开发

    结构化开发 耦合 真题 内聚 真题 设计原则 真题 系统文档 真题 数据流图 数据流图基本数据元素 外部实体 数据存储 加工 数据流 父图子图平衡 加工既要有输入数据流也要有输出数据流 数据守恒 真题 数据字典 真题 杂题精选 耦合 真题
  • [1051]python yagmail发邮件

    文章目录 安装 开通SMTP服务 常用邮箱host以及port yagmail 可以更简单的来实现自动发邮件功能 github项目地址 https github com kootenpv yagmail 安装 pip install yag
  • 备战金九银十: GitHub 上标星 46k+的《10 万字Java面试总结》,助你搞定面试官

    不论是校招还是社招都避免不了各种面试 笔试 如何去准备这些东西就显得格外重要 不论是笔试还是面试都是有章可循的 我这个有章可循 说的意思只是说应对技术面试是可以提前准备 运筹帷幄之后 决胜千里之外 不打毫无准备的仗 我觉得大家可以先从下面几
  • python tkinter 点击按钮选择文件,返回文件路径

    关于python tkinter 点击按钮选择文件 返回文件路径 这个方法我找了好几天 终于曲线救国实现了 首先分为两步 1 设计对话框选择文件 下面的代码搞了好几天 才发现全局变量的获取 必须放在root mainloop的最后 反正网上
  • MAC软件推荐(Java方向)

    MAC软件推荐 Tabby 终端控制工具 keka 解压工具 typora Markdown工具 QuickRedis Redis视图工具 UTM 虚拟机 Navicat Premium 数据库工具 Adobe Photoshop CC 2
  • Android-App的设计架构经验谈,终获offer

    前言 想要成为一名优秀的Android开发 你需要一份完备的知识体系 在这里 让我们一起成长为自己所想的那样 学算法真的很痛苦 虽然大数据现在很火 但找到适合自己定位的职业也未尝不是一种合理选择 投百度的经历非常坎坷 想写出来和大家分享一下
  • runtimeService 运行时服务组件

    在Activiti中 启动一个流程后 会创建一个流程实例 ProcessInstance继承Execution 两个都是接口 每个流程实例至少会有一个执行流 Execution 当流程实例没有流程分支时 一般情况下只会存在一个执行流 假设出