【Activiti 基础篇三】流程定义—CRUD操作
来源:互联网 发布:mysql手工注入 编辑:程序博客网 时间:2024/05/16 19:20
看到这个标题,我们首先得明确两个概念:
1、何为流程定义?
在我们创建Activiti的过程中,创建.pbmn文件是必不可少的,当创建完之后,点击保存,会生成一个.png文件。这两个合起来就是所谓的流程定义。
2、何为CRUD?
CRUD其实就是我们最常用的增删改查操作,全拼:Create,Read,Update,Delete。所以本篇则是和大家一起分享一下关于流程定义的增删改查操作。
// 获取流程引擎(核心对象),默认加载ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();为什么必不可少呢!通过转定义的方式一一点入,就会发现其实最终他也是要读取配置文件的,点击getDefaultProcessEngine转定义进入如图:
在点击init()进入,如图:
因为最终还是会读取到配置文件的,而且在Init()执行方法时会进行判断是否是初始化,如果是初始化,才会继续进行,否则直接读取则可。在一切准备就绪之后,我们来一一进行操作
一:Create(部署流程定义)
关于部署流程定义:本篇讲述两种方式,一种直接读取法,一种ZIP读取法
直接读取法:
// 完成部署流程定义@Testpublic void deploymentProcessDefinition() {// 将其赋值给部署对象Deployment deployment = processEngine.getRepositoryService() // 获取流程定义和部署对象相关的service.createDeployment() // 创建部署对象.name("helloworld演示") // 声明流程的名称.addClasspathResource("diagrams/helloworld.bpmn") // 加载资源文件,一次只能加载一个文件.addClasspathResource("diagrams/helloworld.png").deploy(); // 完成部署// 输出显示System.out.println("部署ID:" + deployment.getId()); // 输出部署的idSystem.out.println("部署时间:" + deployment.getDeploymentTime()); // 输出部署的时间}
zip读取法:
将.bpmn文件和.png文件放入文件,压缩然后再放入项目中
// 完成部署流程定义(zip)@Testpublic void deploymentProcessDefinition_zip() {// 获取压缩文件InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/helloworld.zip");// 定义ZipInputStream zipInputStream = new ZipInputStream(in);// 将其赋值给部署对象Deployment deployment = processEngine.getRepositoryService() // 获取流程定义和部署对象相关的service.createDeployment() // 创建部署对象.name("helloworld演示") // 声明流程的名称.addZipInputStream(zipInputStream) // 使用zip方式部署.deploy();System.out.println("部署ID:" + deployment.getId()); // 输出部署的idSystem.out.println("部署时间:" + deployment.getDeploymentTime()); // 输出部署的时间}
二:Read(查看流程定义)
// 查询流程定义@Testpublic void findProcessDifinitionList() {// 流程定义List<ProcessDefinition> list = processEngine.getRepositoryService() // 获取流程定义和部署对象相关的service.createProcessDefinitionQuery() // 创建查询.processDefinitionKey("helloworld") // 按照流程定义的key值查询// 排序.orderByProcessDefinitionVersion().desc() // 按照流程版本排序// 返回结果.list();// 对list集合进行判断if (list != null && list.size() > 0) {for (ProcessDefinition pd : list) {System.out.println("流程定义的ID:" + pd.getId()); // 由流程定义的key+":"+版本+":"+生成的id,可以表示流程定义的唯一值System.out.println("流程定义的名称:" + pd.getName()); // 对应helloworld.bpmn文件中name属性值System.out.println("流程定义的key:" + pd.getKey()); // 对应helloworld.bpmn文件中id属性值,用来对应每个流程System.out.println("流程定义的部署ID:" + pd.getDeploymentId());System.out.println("流程定义的资源名称:" + pd.getResourceName());System.out.println("流程定义的版本:" + pd.getVersion()); // 当流程定义的key相同的情况下,版本是升级的System.out.println("##########################################");}}}其实查询这可以根据流程定义ID,KEY模糊查询等,也可以根据多条件排序,各种类型输出等。
三:Update(编辑流程定义)
对于工作流来说,流程定义的操作是没有编辑可言的,举例来说:
我们之前计划流程为三步,提交申请,经理审批,总经理审批三个节点,如图:
假设我现在的三个节点的流程基本信息为:
流程定义的ID:helloworld:1:101
流程定义的key:helloworld
流程定义的版本:1
但是后来又发觉有点太过于麻烦,所以总经理最后决定,以后这种请假的事情直接由经理来审批就行,所以我们最后的流程修改成了两步:
两个节点的流程基本信息为:
流程定义的ID:helloworld:2:101流程定义的key:helloworld
流程定义的版本:2
通过数据库也能区分开了,每次不管是否流程更换,增添或者减少节点,都是一个流程定义的key重新部署的过程,每次启动流程实例,他都会按照最新版本启动,所以在流程定义这,并没有修改的过程,只有版本的定义。
四:Delete(删除流程定义)
// 删除流程定义@Testpublic void deleteProcessDifinition() {String deploymentId = "301";/** * deleteDeployment(deploymentId) //使用部署ID删除流程定义 * 注意:删除流程部署到数据库,没有启动时,可以删除的。 *//* * processEngine.getRepositoryService() // 获取流程定义和部署对象相关的service * .deleteDeployment(deploymentId); // 使用部署ID删除流程定义 *//** * deleteDeployment(deploymentId) //使用部署ID删除流程定义 * 注意:不管流程是否启动,都可以进行级联删除 */processEngine.getRepositoryService() // 获取流程定义和部署对象相关的service.deleteDeployment(deploymentId, true); // 使用部署ID删除流程定义,true表示级联删除System.out.println("删除成功!");}删除流程定义,需要注意是否是级联查询,转定义deleteDeployment进去,就会发现,有一个布尔值的属性默认为false,如图:
默认是非级联查询的,所以如果想彻底的删除,不管流程启动与否,我们只需要在参数后加一个"true"则可。最后输出结果"删除成功",查询数据库,相关信息已经删除干净。
以上就是对于流程定义的CRUD操作进行简单的了解,所以的操作其实都是来源于基本操作,比如查询把最新版本信息,删除key相同的流程定义等,所以基础还是至关重要的。
- 【Activiti 基础篇三】流程定义—CRUD操作
- Activiti进阶(三)——流程定义的CRUD
- Activiti进阶(三)——流程定义的CRUD
- Activiti(三)——流程定义的CRUD
- Activiti进阶(三)——流程定义的CRUD
- Activiti流程的CRUD(三)
- Activiti(三)流程定义
- Activiti(三)流程定义
- Activiti工作流(5):流程定义的CRUD
- 【Activiti工作流】7.流程定义的CRUD(上)
- 【Activiti工作流】7.流程定义的CRUD(下)
- 【Activiti工作流】7.流程定义的CRUD(上)
- 【Activiti工作流】7.流程定义的CRUD(下)
- Activiti学习笔记三:管理流程定义
- 2、Activiti 流程定义操作 ProcessDefinition
- 【入门篇】Activiti流程定义查询
- 【入门篇】Activiti流程定义删除
- Activiti 流程定义实例
- c# - Xml序列化, 类名冲突问题
- Selenium+Python 自动化测试模型
- nginx代理tomcat入门
- nuget使用问题收集
- 设置控件的随机显示位置 setlayoutparams
- 【Activiti 基础篇三】流程定义—CRUD操作
- bind2nd的使用方法
- [Android]对MVC和MVP的总结
- 2013工作总结
- 常用图标及启动页尺寸大小
- 谈WPF中的附加属性
- pip安装python包出现Cannot fetch index base URL http://pypi.python.org/simple/
- jffs2镜像在Linux系统下挂载
- 神经网络 调节参数