技术标签: activiti
一、流程部署
1.部署流程
下面代码是通过ZipInputStream方式进行部署,也是最常用的一种方式。
流程部署后,会生成“部署对象”和“流程定义”。
@Autowired
Repositoryservice repositoryService;
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
Deployment deployment = repositoryService.createDeployment() // 创建部署
.name(fileName) // 设置部署名称
.addZipInputStream(zipInputStream) // 根据zip输入流部署
.deploy(); // 开始部署
流程部署后,会操作如下表
act_re_deployment:插入部署对象,仅记录部署名及部署时间
act_ge_bytearray:插入BPMN的两个文件(.bpmn和.png),包括部署ID
act_re_procdef:插入流程定义信息,包括部署ID,流程的Key和Name,版本,两个资源文件
select * from act_re_procdef; --流程定义
select * from act_re_deployment; -- 流程部署
select * from act_ge_bytearray; -- 存储二进制文件
2.查询流程定义列表
对流程定义查询前提是要创建流程定义查询,即:createProcessDefinitionQuery()
@Autowired
Repositoryservice repositoryService;
String key = "%process%";
List<ProcessDefinition> list = repositoryService
.createProcessDefinitionQuery() // 创建流程定义查询
.latestVersion() // 只查询最新版本
.processDefinitionKeyLike(key) // 根据Key进行模糊查询
.list(); // 返回列表
3.根据部署ID查询部署
对部署进行查询时,要提前创建部署查询,即:createDeploymentQuery()
@Autowired
Repositoryservice repositoryService;
String deploymentId = "5522";
repositoryService.createDeploymentQuery() // 创建部署查询
.deploymentId(deploymentId) // 根据部署ID查询
.singleResult(); // 返回唯一结果
4.删除部署
@Autowired
Repositoryservice repositoryService;
String deploymentId = "5522";
repositoryService.deleteDeployment(deploymentId); // 根据部署ID删除流程部署
删除部署会操作如下表,若级联删除,会将运行中的实例与历史实例一同删除
act_re_deployment:删除部署对象
act_ge_bytearray:删除资源文件
act_re_procdef:删除流程定义信息
二、启动流程
1.根据流程定义的Key启动
流程启动后,会创建“流程实例”和“任务”,而我们需要将我们的业务与流程实例进行绑定,这样才能确定我们的业务是使用的哪个流程实例。
流程定义可以理解为一个流程的模板,只能有一个;而流程实例是根据流程定义生成的一个具体的实例,可以有多个,一个审批业务对应一个流程实例。
@Autowired
RuntimeService runtimeService;
String processDefinitionId = "333";
runtimeService.startProcessInstanceByKey(processDefinitionId);
流程启动后,会操作如下表
act_ru_execution:执行流程实例表,核心,启动后会生成一个流程实例和待执行的任务节点
act_ru_task:用户任务表,待执行的任务
act_ru_identitylink:用户身份关系表,存储待执行任务的用户关系
act_hi_taskinst:历史用户任务表,存储所有已执行或待执行的用户任务历史
act_hi_procinst:历史流程实例表,存储流程实例
act_hi_actinst:历史活动节点表,存储所有已执行的节点(各类节点)
act_hi_identitylink:历史用户身份关系表,历史用户任务的关系表
select * from act_ru_execution; --执行流程实例表
select * from act_ru_task; -- 用户任务表
select * from act_ru_identitylink; -- 用户身份关系表
select * from act_hi_taskinst; -- 历史用户任务表
select * from act_hi_procinst; -- 历史流程实例表
select * from act_hi_actinst; -- 历史活动节点表
select * from act_hi_identitylink; -- 历史用户身份关系表
三、执行任务
1.查看我的任务列表
@Autowired
TaskService taskService;
String assignee = "可以是办理人的ID";
int startPage = 1;
int pageSize = 10;
List<Task> list = taskService.createTaskQuery() // 创建任务查询
.taskAssignee(assignee) // 按照当前输人查询
.orderByTaskCreateTime().desc() // 按任务创建时间排序,倒序排序
.listPage(startPage, pageSize); // 分页查询出任务列表
2.执行任务
执行任务后,会自动根据条件跳转到下一任务
@Autowired
TaskService taskService;
String taskId = "20005";
taskService.complete(taskId); // 根据任务ID执行任务
执行任务后,表数据发生的变化
act_ru_execution:待执行的用户任务节点换成下一个用户任务节点
act_ru_task:当前待执行任务转历史,插入下一个任务
act_ru_identitylink:插入下一任务的用户关系
act_hi_taskinst:修改当前用户任务的完成时间,并插入一用户任务
act_hi_actinst:修改当前活动节点的完成时间,并插入下一个活动节点
act_hi_identitylink:插入下一任务的用户关系
3.任务结束
执行完最后一个节点后,流程会自动结束。
流程结束后,表格数据变化。
act_ru_execution:删除当前流程实例的运行时执行数据
act_ru_task:删除当前流程实例的运行时任务数据
act_ru_identitylink:删除当前流程实例的运行时用户关系数据
可通过如下方式判断流程实例是否结束
@Autowired
RuntimeService runtimeService
String processInstanceId = "2200";
ProcessInstance singleResult = runtimeService.createProcessInstanceQuery() // 创建流程实例查询
.processInstanceId(processInstanceId) // 根据流程实例ID查询
.singleResult(); // 返回唯一结果
if(singleResult == null){
System.out.println("流程结束");
}
获取kinect的颜色图像和深度图像
文章目录影响单bit信号的处理两级DFF同步器影响一颗芯片上会有许多不同的信号工作在不同的时钟频率下。比如SOC芯片中的CPU通常会工作在一个频率上,总线信号(比如DRAM BUS)会工作在另一个时钟频率下,而普通的信号又会工作在另外的时钟频率下。这3个不同时钟(频率)下工作的信号往往需要相互沟通和传递信号。不同时钟域下的信号传递就涉及到跨时钟域信号处理,因为相互之间的频率、相位不一样,如果不做处理或者处理不当,如下图所示的时钟域CLK_A的数据信号A可能无法满足时钟域CLK_B的setup/hol
一、界面及旗本操作1、运行zemax,熟悉zemax的初始用户界面,了解快捷菜单栏每个按钮的用途。2、浏览各个菜单项的内容,熟悉各个常用的功能、操作所在的菜单,了解各常用的作用。3、熟悉使用各个常用的快捷键按钮。4、学会使用从各个主菜单下调出各种常见的编辑菜单。5、学会调用zemax自带的例子,学会使用例子的这些图进行简单的成像质量分析。6、从主菜单中调用优化工具,简单掌握优化工具界面中...
青少年软件编程(Scratch)等级考试试卷(四级)2020.9二、判断题(共10题,每题2分,共20分)16.要向遍历字符串“hello”,我们一般使用下面积木控制循环次数( ) 答案:正确考点分析:考查字符串的操作,遍历字符串需要获取字符串的数量,有现成的积木“XX的字符数”,所以正确17.执行完下面的程序后,小猫会思考“包含”。( ) 答案:错误考点分析:考查积木的综合使用,具体考查列表的相关积木的使用,右边可以看到list列表...
哈哈,看了题目明白了吧,无奈于Ubuntu的庞大,一直在找一个非常轻量级的linux版本,后来改用了使用Xfce桌面的Xubuntu确实轻快的很多,速度已经满意了,但是还是感觉空间不够用,郁闷呀,谁让咱的破笔记本就那么点空间呢,widows下边连个游戏都不敢装,本来挤出来3G的空间来装Linux,节省的用把开发环境弄好了还剩下几百兆的空间。空间的问题本来想再划出点空间来给linux挂载的,但是想想
Android https踩坑(1)Android无法访问自签名证书的服务器 关于https中自签名证书的介绍以及OkHttp中解决自签名证书问题,可以参考鸿洋的这篇博客http://blog.csdn.net/lmj623565791/article/details/48129405 本文主要介绍okhttp,glide,webview中无法访问使用自签名证书服务器的问题。OkHttp
注意:在安装pcl之前一定要将ubuntu的源切换到国内源,不然大概率成功不了!!!!!!!!!#一、安装PCL1.安装依赖包:sudo apt-get update sudo apt-get install git build-essential linux-libc-devsudo apt-get install cmake cmake-guisudo apt-get install libusb-1.0-0-dev libusb-dev libudev-devsudo apt-get
MySQL数据类型的选择MySQL 提供了大量的数据类型,为了优化存储和提高数据库性能,在任何情况下都应该使用最精确的数据类型。前面主要对 MySQL 中的数据类型及其基本特性进行了描述,包括它们能够存放的值的类型和占用空间等。本文主要讨论创建数据库表时如何选择数据类型。可以说字符串类型是通用的数据类型,任何内容都可以保存在字符串中,数字和日期都可以表示成字符串形式。但是也不能把所有的列都定义为字符串类型。对于数值类型,如果把它们设置为字符串类型的,会使用很多的空间。并且在这种情况下使用数值类型列来
水题,不解释。。。。。。。题目:Who's in the MiddleTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 22168 Accepted: 12666DescriptionFJ is surveying his herd to
首先,使用jupyter notebook 建议下载anaconda,里面集成了jupyter和spyder,很方便在使用jupyter的时候发现主题颜色和字体不太顺心,于是找了一些方法来改属性具体的操作步骤1、打开anaconda的命令行2、安装Jupyter主题在命令行中键入pip install jupyterthemes3、更新Jupyter主题键入pip instal...
android support v7包自带的ActionBarActivity的配置完整类名:android.support.v7.app.ActionBarActivity;ActionBarActivity被废了,以前的老项目还在用,记录下配置 1. 左边显示配置 //设置标题 getSupportActionBar().setTitle(&amp;amp;quot;聊天&amp;amp;quot;); //actionbar 添加logo
2020年9月10日,华为消费者业务软件部总裁王成录又一次站在了松山湖华为开发者大会的主舞台上。今年,他带来了万众瞩目的华为鸿蒙HarmonyOS 2.0。此次HarmonyOS的升级,不仅仅带来了分布式能力的全面提升,还为开发者提供了完整的分布式设备与应用开发生态,全面使能全场景智慧生态,共赢移动终端产业的下一个十年。三大核心能力升级,HarmonyOS 2.0为开发者掌灯去年推出的Harmon...