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 运行时服务组件 的相关文章

  • IDEA插件activiti工具actiBPM

    最新的IDEA中Marketplace搜索不到actiBPM xff08 2020 2 xff09 离线安装 下载https plugins jetbrains com 选择版本 导入jar 重启IDEA 验证 右键新建 表明添加成功 使用
  • activiti修改流程定义二进制数据后需清缓存

    示例如下 package com zz flow utils import org activiti engine impl interceptor Command import org activiti engine impl inter
  • Activiti之一:部署activiti-admin、activiti-app、activiti-rest

    文章目录 各组件版本下载部署将war包放入tomcat 访问 在网上查找activiti相关资料 xff0c 发现对于activiti rest的使用很少 xff0c 而官网对于api的支持还是比较多的 xff0c 如果考虑的是一个纯粹的工
  • activiti源码解析系列8 - 任务完成命令类

    我们在完成任务的时候都执行了哪些操作呢 主要涉及删除表 默认非级联 ACT RU TASK ACT RU IDENTITYLINK ACT RU VARIABLE 主要看一个CompleteTaskCmd protected Void ex
  • SpringBoot整合activiti5-流程部署

    系列文章目录 springboot整合activiti5 在Activiti中 定义了多种资源 其中 bpmn和 bpmn20 xml都是流程定义文件 这两种格式都可以被系统识别并进行解释 但是目前最新版本的Activiti Designe
  • Spring Cloud 2.x之整合工作流Activiti

    工作流在项目中非常常用 这里先来看两张图 第一张 第二张 对以上两张图进行说明 假设这两张图就是华谊兄弟的请假流程图 图的组成部分 人物 范冰冰 冯小刚 王中军 事件 动作 请假 批准 不批准 工作流 Workflow 就是 业务过程的部分
  • activiti 动态分配任务候选人

    任务候选人是有权限对该任务进行操作的用户 可以使用TaskService addCandidateUser 或 addCandidateGroup 实现 可以在bpmn中进行配置 可以使用监听器方式 需要继承TaskListener 可以使
  • 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
  • 工作流Activiti7整合SpringBoot使用

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

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

    介绍 AdminEAP框架中集成了Activiti工作流组件 使用了activiti explorer中的在线流程设计器 其中在选择代理人 审批人 中 原生的操作是输入数据 没有和系统自动关联 同时 原生的在线流程设计器使用AngularJ
  • Activiti7源码分析

    文章目录 Activiti7源码分析 整体架构 命令模式 责任链模式 事务拦截器 命令上下文拦截器 流程定义解析 Activiti之PVM执行树 核心理念 PVM对流程定义期的描述 PVM对流程运行期的描述 PVM综述 ActivitiIm
  • Activiti 学习(二)—— Activiti 流程定义和部署

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

    引用 activiti流程图上获取各节点的信息获取 这篇文章写得很好 揭示了图片点击出现信息的方法 于是我也做了 只不过有些改动 可能是activiti的版本不同的原因 jsp页面 通过流程实例id进行操作
  • 实现框架的类的方法为什么会在众多集成者中被调用

    以activities为例 实现了 author Tom Baeyens public interface Command
  • Activiti6.0学习实践(5)-activiti流程引擎配置二

    本节继续对activiti流程引擎的配置进行学习 1 EventLog配置 1 1 配置EventLog 首先在activiti eventlog cfg xml中配置eventlog属性为true 1 1 1测试代码 编写一个eventl
  • 将 Activiti 任务从旧流程迁移到新流程

    我有一个用于某些业务流程的 Activiti 项目 问题在于移民 现有流程有一些未完成的任务 我想通过添加新步骤来修改现有流程 现在 当我创建一个新任务时 这个新任务将根据更新的流程进行处理 而未完成的任务将按照旧流程进行处理 让我们看下面
  • Alfresco:在另一个任务中显示任务字段(查看它们)

    我正在将新的工作流程部署到 alfresco 4 0 e 我有一个 formkey cwf submitLeaveTask 的任务 这是代码
  • 开源 BPM 工具(如 Activiti、bonita)和 Windows Workflow Foundation 之间有什么区别

    我试图找到一个基于asp net的免费开源BPM工具 但不幸的是我没有找到这样的工具 但最近我读到一篇关于Windows Workflow Foundation的文章 那么它是否提供了类似于开源BPM工具如Activiti bonita J

随机推荐

  • 使用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 当流程实例没有流程分支时 一般情况下只会存在一个执行流 假设出