Activiti工作流框架学习(六)

  • 部署流程定义
  • 查看流程定义(获取所有流程定义的deploymentId)
  • 删除流程定义(删除指定的deploymentId流程定义的信息)
  • 查看流程图附件(查看指定的deploymentId流程定义的图片)
  • 查询最新版本的流程定义
  • 删除所有流程定义(根据key删除所有相同的不同版本的流程定义)
  • 挂起或激活流程定义(根据ProcessDefinitionId)
  • 总结(管理流程定义)

一、部署流程定义
图示:
说明:
1)先获取流程引擎对象:在创建时会自动加载classpath下的activiti.cfg.xml

2) 首先获得默认的流程引擎,通过流程引擎获取了一个RepositoryServive对象(仓库对象)

3)由仓库的服务对象产生一个部署对象配置对象,用来封装部署操作的相关配置

4)这是一个链式编程,在部署配置对象中设置显示名,上传流程定义规则文件

5)向数据库表中存放流程定义的规则信息

6)这一步在数据库中将操作三张表:

a)act_re_deployment(部署对象表)

存放流程定义的显示名和部署时间,每部署一次增加一条记录

b)act_re_procdef(流程定义表)

存放流程定义的属性信息,部署每个新的流程定义都会在这张表中增加一条记录。

注意:当流程定义的key相同的情况下,使用的是版本升级

c)act_ge_bytearray(资源文件表)

存储流程定义相关的部署信息。即流程定义文档的存放地。每部署一次就会增加两条记录,一条是关于bpmn规则文件的,一条是图片的(如果部署时只
指定了bpmn一个文件,activiti会在部署时解析bpmn文件内容自动生成流程图)。两个文件不是很大,都是以二进制形式存储在数据库中。

三种方式:
1. 分别添加.bpmn和.png文件
2. 流的方式添加一个zip包
3. 流的方式分别添加.bpmn文件和.png文件

1.1 一次加载一个文件


1.2 流方式加载zip包
1.3 流的方式一次加载一个文件

二、查看流程

图示:

代码片段:
可以看到流程定义的key值相同情况下,版本是从1开始逐次升级的
流程定义的Id是【key:版本:生成ID】

说明:
1)流程定义和部署对象相关的Service都是RepositoryService
2)创建流程定义查询对象,可以在ProcessDefinitionQuery上设置查询的相关参数

3)调用ProcessDefinitionQuery对象的list方法,执行查询,获得符合条件的流程定义列表
4)由运行结果可以看出:
Key和Name的值为:bpmn文件process节点的id和name的属性值
5)key属性被用来区别不同的流程定义
6)带有特定key的流程定义第一次部署时,version为1.之后每次部署都会在当前最高版本号上加1

7)Id的值的生成规则为:{processDefinitionKey}:{processDefinitionVersion}:{generated-id},这里的generated-id是一个自动生成的唯一的数字

8)重复部署一次,deploymentId的值以一定的形式变化
规则act_ge_property表生成


三、删除流程定义

图示:
代码片段:
说明:
1)因为删除的是流程定义,而流程定义的部署时属于仓库服务的,所有应该先得到RepositoryService

2)如果该流程定义下没有正在运行的流程,则可以用普通删除。如果是有关联的信息,用级联删除。
项目开发中使用级联删除的情况比较多,删除操作一般只开放给超级管理员使用


四、查看流程图附件

图示:

代码片段:

说明:
1)deploymentId为流程部署ID
2)resourceName为act_ge_bytearray表中Name_列的值

3)使用repositoryService的getDeploymentResourceNames方法可以获取指定部署下得所有文件的名称

4)使用repositoryService的getResourceAsStream方法传入部署ID和资源图片名称可以获取部署下指定名称文件的输入流

5)最后的有关IO流的操作,使用FileUtils工具的copyInputStreamToFile方法完成流程到文件的拷贝,将资源文件以流的形式输出到指定文件夹下


五、查询最新版本的流程定义

图示:

代码片段:

六、 删除所有流程定义(根据key删除所有相同的不同版本的流程定义)

图示:

代码片段:

七、挂起或激活流程定义

图示:

流程定义挂起或激活的url:
http://localhost:8080/kft-activiti-demo-no-maven/workflow/processdefinition/update/suspend/leave:1:20

注意:
当流程定义激活或挂起时,对应的流程运行实例的suspended状态或跟着改变;

代码片段:

请注意suspendProcessDefinitionById和activateProcessDefinitionById方法的第二个参数,我们来看一下RepositoryServiceImpl中这个方法的定义:


原理它就是用来控制在挂起流程定义时,是否同时挂起对应的流程实例:


activateProcessDefinitionById调用层次类似,不重复


八、总结(管理流程定义)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值