【Activiti】为每一个流程绑定相应的业务对象的2种方法
方式1:
在保存每一个流程实例时,设置多个流程变量,通过多个流程变量的组合来过滤筛选符合该组合条件的流程实例,以后在需要查询对应业务对象所对应的流程实例时,只需查询包含该流程变量的值的流程实例即可.
设置过程:
public void startProcess(Long id) {
Customer cus = get(id);
if (cus != null) {
// 修改客户的状态
cus.setStatus(1);
updateStatus(cus);
// 将客户的追踪销售员的nickName放入流程变量,该seller变量可用于查询包括该seller的流程实例
Map<String, Object> map = new HashMap<String, Object>();
if (cus.getSeller() != null) {
map.put("seller", cus.getSeller().getNickname());
}
// 将客户的类型和id放入流程变量,此2个流程变量可用于查询该客户对象所对应的流程实例
String classType = cus.getClass().getSimpleName();
map.put("classType", classType);
map.put("objId", id);
// 获取processDefinitionKey,默认为类型简单名称加上Flow
String processDefinitionKey = classType + "Flow";
// 开启流程实例
workFlowService.startProcessInstanceByKeyAndVariables(processDefinitionKey, map);
} }
查询过程:
/**
* 测试根据变量值的限定获取相应的流程实例
*
* @throws Exception
*/
@Test
public void testGetFromVariable() throws Exception {
Employee sller = new Employee();
sller.setNickname("员工2");
sller.setId(4L);
List<ProcessInstance> processInstances = runtimeService.createProcessInstanceQuery()
.variableValueEquals("classType", sller.getClass().getSimpleName())
.list();
System.out.println(processInstances);
for (ProcessInstance processInstance : processInstances) {
System.out.println(processInstance); }
//=====================================================================================================
Customer cus = new Customer();
cus.setId(4L);
List<ProcessInstance> processInstances1 = runtimeService.createProcessInstanceQuery()
.variableValueEquals("classType", cus.getClass().getSimpleName())
.variableValueEquals("objId", cus.getId()).list();
System.out.println(processInstances);
for (ProcessInstance processInstance : processInstances1) {
System.out.println(processInstance); }
}
方式2:
使用 businessKey,在开启流程实例时设置businessKey作为业务对象关联流程实例的关联键
设置过程:
/**
* 使用businessKey作为流程实例关联业务对象的关联键
*
* @throws Exception
*/
@Test
public void testBusKey() throws Exception {
//设置businessKey
Customer customer = new Customer();
customer.setId(2L);
//businessKey采用简单类名+主键的格式
String busniessKey = customer.getClass().getSimpleName() + customer.getId();
String definitionKey = customer.getClass().getSimpleName() + "Flow";
Map<String, Object> map = new HashMap<String, Object>();
map.put("seller", "admin");
//开启流程
runtimeService.startProcessInstanceByKey(definitionKey, busniessKey, map);
}
查询过程:
/**
* 使用businessKey查询相应业务对象的流程实例
*
* @throws Exception
*/
@Test
public void testgetByBusKey() throws Exception {
List<ProcessInstance> processInstances = runtimeService.createProcessInstanceQuery()
.processInstanceBusinessKey("Customer2", "CustomerFlow").list();
System.out.println(processInstances); }
【Activiti】为每一个流程绑定相应的业务对象的2种方法的更多相关文章
- android 让一个控件按钮居于底部的几种方法
android 让一个控件按钮居于底部的几种方法1.采用linearlayout布局:android:layout_height="0dp" <!-- 这里不能设置fill_ ...
- [转]android 让一个控件按钮居于底部的几种方法
本文转自:http://www.cnblogs.com/zdz8207/archive/2012/12/13/2816906.html android 让一个控件按钮居于底部的几种方法 1.采用lin ...
- C# DropDownList绑定添加新数据的几种方法
第一种:在前台手动绑定(适用于固定不变的数据项) <asp:DropDownList ID="DropDownList1" runat="server"& ...
- C# DropDownList绑定添加新数据的三种方法
一.在前台手动绑定 <asp:DropDownList ID="DropDownList1" runat="server"> <asp: ...
- 创建一个 Spring Boot 项目,你会几种方法?
我最早是 2016 年底开始写 Spring Boot 相关的博客,当时使用的版本还是 1.4.x ,文章发表在 CSDN 上,阅读量最大的一篇有 42W+,如下图: 2017 年由于种种原因,就没有 ...
- 牛客网:将两个单调递增的链表合并为一个单调递增的链表-Python实现-两种方法讲解
方法一和方法二的执行效率,可以大致的计算时间复杂度加以对比,方法一优于方法二 1. 方法一: 思路: 1. 新创建一个链表节点头,假设这里就叫 head3: 2. 因为另外两个链表都为单调递增,所 ...
- linux下进程绑定cpu情况查看的几种方法
1.pidstat命令 查看进程使用cpu情况,如果绑定了多个cpu会都显示出来 pidstat -p `pidof 进程名` -t 1 2.top命令 (1)top (2)按f键可以选择下面配置选项 ...
- JS004. 获取数组最后一个元素且不改变数组的四种方法
TAG: Array.length Array.prototype.reverse() Array.prototype.slice() Array.prototype.pop() Array对象 - ...
- 在3G移动通信网络信令流程里获取用户电话号的一种方法(中国电信cdma2000)
首先这些关于电话号的的寻找都是在分组域进行的 然后是首先在rp接口的A11接口寻找,没有看到,于是到pi接口,研究radius协议 发现在协议里也不含有与用户电话号码mdn相关的元素 然后偶遇一篇文档 ...
随机推荐
- 石川es6课程---18、ES6 复习
石川es6课程---18.ES6 复习 一.总结 一句话总结: 无论在讲课和学习中,复习总结都是很重要 二.ES6 复习 变量 let const 声明方式 能否重复声明 作用域 类型 是否支持变量提 ...
- [转]spring的filter中targetFilterLifecycle作用
在web.xml中进行配置,对所有的URL请求进行过滤,就像"击鼓传花"一样,链式处理. 配置分为两种A和B. A:普通配置 在web.xml中增加如下内容:<filter& ...
- python接口自动化框架搭建
一.在搭建接口自动化测试框架前,我觉得先需要想明白以下几点: ① 目前情况下,绝大部分接口协议是http,所以需要对http协议有个基本的了解,如:http协议请求.响应由哪些部分组成,常用的meth ...
- OpenStack 对接 Ceph 环境可以创建卷但不能挂载卷的问题
问题 环境:Nova.Cinder.Glance 都对接了 Ceph RBD 后端存储. 以往的操作包括上传镜像.创建卷.挂载卷都是一切正常的,但突然出现了无法挂载卷的问题,而且还是因为 Ceph 客 ...
- Docker在CentOS下的安装
工欲善其事,必先利其器. 在我们以后的Docker学习中,都推荐使用CentOS6.5作为学习平台,毕竟Docker的内核也是基于Linux的.本文主要分享笔者在CentOS下的安装Docker的过程 ...
- EPOLL内核原理极简图文解读(转)
预备知识:内核poll钩子原理内核函数poll_wait把当前进程加入到驱动里自定义的等待队列上 当驱动事件就绪后,就可以在驱动里自定义的等待队列上唤醒调用poll的进程 故poll_wait作用:可 ...
- 解决 JDK1.7 不支持 VCenter 6.7 的问题(涉及到Https TLS1.2协议)
解决 JDK1.7 不支持 VCenter 6.7 的问题 问题描述 原项目工程是使用JDK 1.7,可以连接 5.X版本和 6.0版本的 VCenter资源池. 但是,现在VCenter已经升到 6 ...
- asp.NET 下真正实现大文件上传
一般10M以下的文件上传通过设置Web.Config,再用VS自带的FileUpload控件就可以了,但是如果要上传100M甚至1G的文件就不能这样上传了.我这里分享一下我自己开发的一套大文件上传控件 ...
- 【D3D12学习手记】The Swap Chain and Page Flipping
为了避免动画中的闪烁,最好将整个动画帧绘制到称为后台缓冲区的屏幕外纹理(off-screen texture)中.一旦整个场景被绘制到给定动画帧的后缓冲区,它就作为一个完整的帧呈现给屏幕;以这种方式, ...
- Mysql:常用操作(导入数据,用户授权,远程连接授权,设置通信缓冲区的最大长度)
1.导入数据命令: mysql --host=localhost --port=3306 --user=root --password=hnsjt_lwsj@2018 szyszx_20180515- ...