工作流笔记第二天_流程定义的CRUD
Posted 爱笑的我_smile
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工作流笔记第二天_流程定义的CRUD相关的知识,希望对你有一定的参考价值。
0、流程定义的表
-- Deployment 部署对象和流程定义相关的表
-- 1、一次部署的多个文件的信息,对于不需要的流程可以删除或修改
select * FROM act_re_deployment; -- 部署对象表
select * FROM act_re_procdef; -- 流程定义表
select * FROM act_ge_bytearray; -- 资源文件表
select * FROM act_ge_property; -- 主键生成策略表,下一个流程的编号
1、部署流程定义的三种方法
public class ProcessDefinition {
// 获得工作流引擎对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
/* 部署流程定义(从classPath中部署流程定义) */
@Test
public void deloymentProcessDefinitionFromClassPath() {
Deployment deploy = processEngine.getRepositoryService()// 与流程定义相关的service
.createDeployment()// 创建部署对象
.name("helloWord入门程序")// 添加部署名称
.addClasspathResource("diagrams/helloWord.bpmn")// 从classPath的资源中加载,一次只能加载一个文件
.addClasspathResource("diagrams/helloWord.png")// 从classPath的资源中加载,一次只能加载一个文件
.deploy();// 完成部署
System.out.println("部署id:" + deploy.getId());
System.out.println("部署名称:" + deploy.getName());
}
/* 部署流程定义(从zip中部署流程定义) */
@Test
public void deloymentProcessDefinitionFromZip() {
// 根据反射获取zip文件转换成对应的流
InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/helloWord.zip");
// 创建流对象
ZipInputStream zipInputStream = new ZipInputStream(in);
// 部署对象
Deployment deploy = processEngine.getRepositoryService()// 与流程定义相关的service
.createDeployment()// 创建部署对象
.name("helloWord入门程序")// 添加部署名称
.addZipInputStream(zipInputStream)// 指定zip格式的文件完成部署
.deploy();// 完成部署;
System.out.println("部署id:" + deploy.getId());
System.out.println("部署名称:" + deploy.getName());
}
/* 部署流程定义(从inputStream中部署流程定义) */
@Test
public void deloymentProcessDefinitionFromZip() {
// 根据反射获取zip文件转换成对应的流
InputStream inputStreambpmn = this.getClass().getResourceAsStream("/diagrams/processVariables.bpmn");
InputStream inputStreampng = this.getClass().getResourceAsStream("/diagrams/processVariables.png");
// 部署对象
Deployment deploy = processEngine.getRepositoryService()// 与流程定义相关的service
.createDeployment()// 创建部署对象
.name("流程变量")// 添加部署名称
.addInputStream("processVariables.bpmn", inputStreambpmn)// 使用资源文件名称(要求:与资源文件名称要一致)和输入流完成部署
.addInputStream("processVariables.png", inputStreampng).deploy();// 完成部署;
System.out.println("部署id:" + deploy.getId());
System.out.println("部署名称:" + deploy.getName());
}
}
2、查询流程定义
// 获得工作流引擎对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
/* 查询流程定义 */
@Test
public void queryProcessDefinitionp() {
List<org.activiti.engine.repository.ProcessDefinition> list = processEngine.getRepositoryService()// 与流程定义相关的service
.createProcessDefinitionQuery()// 创建一个流程定义的查询对象
/* 指定查询条件也就相当于where */
// .deploymentId(deploymentId);//根据部署对象id查询
// .processDefinitionId(processDefinitionId)//根据流程定义id查询
// .processDefinitionKey(processDefinitionKey)//根据流程定义key查询
// .processDefinitionName(processDefinitionName)//根据流程定义名称name查询
// .processDefinitionNameLike(processDefinitionNameLike)//根据流程定义名称name模糊查询
/* 指定排序方式 */
.orderByProcessDefinitionId().asc()// 按照流程定义id的升序排序
// .orderByProcessDefinitionKey()// 按照流程定义key排序
// .orderByProcessDefinitionName()// 按照流程定义name排序
// .orderByProcessDefinitionVersion()// 按照流程定义的版本排序
/* 返回的结果集 */
.list();// 返回一个集合列表,封装流程定义
// .singleResult()//返回唯一结果
// .count()//返回个数
// .listPage(firstResult, maxResults)//分页查询
if (list != null && list.size() > 0) {
for (org.activiti.engine.repository.ProcessDefinition processDefinition : list) {
System.out.println("流程定义id:" + processDefinition.getId());// 流程定义的key+版本+随机生成数
System.out.println("流程定义的名称:" + processDefinition.getName());// 流程定义的bpmn文件中的name属性值
System.out.println("流程定义的key:" + processDefinition.getKey());// 流程定义的bpmn文件中的id属性值
System.out.println("流程定义版本:" + processDefinition.getVersion());// 当流程定义的key值相同的情况下版本升级,默认是1
System.out.println("资源名称bpm文件:" + processDefinition.getResourceName());
System.out.println("资源名称png文件:" + processDefinition.getDiagramResourceName());
System.out.println("部署对象id:" + processDefinition.getDeploymentId());
System.out.println("-------------------------------------------------------------");
}
}
3、删除流程定义
/* 删除流程定义 */
@Test
public void deleteProcessDefinitionp() {
String deploymentId = "1";
/*
* 不带级联的删除 只能删除没有启动的流程,如果流程启动就会抛出异常
*/
/*
* processEngine.getRepositoryService()// 与流程定义相关的service
* .deleteDeployment(deploymentId); System.out.println("删除成功!");
*/
/*
* 级联删除 不管流程是否启动,都能删除
*/
processEngine.getRepositoryService()// 与流程定义相关的service
.deleteDeployment(deploymentId, true);
System.out.println("删除成功!");
}
4、查看流程图
/* 查看流程图 */
@Test
public void viewPic() throws IOException {
// 将生成的图片放到指定的文件下
String deploymentId = "401";
String resourceName = "";
// 获取图片资源名称
List<String> list = processEngine.getRepositoryService()// 与流程定义相关的service
.getDeploymentResourceNames(deploymentId);
if (list != null && list.size() > 0) {
for (String name : list) {
if (name.indexOf(".png") > 0) {// 说明存在png文件
resourceName = name;
}
}
}
// 获取图片的输入流
InputStream resourceAsStream = processEngine.getRepositoryService()// 与流程定义相关的service
.getResourceAsStream(deploymentId, resourceName);
File file = new File("D:\\就业班\\工作流\\测试\\" + resourceAsStream);
FileUtils.copyInputStreamToFile(resourceAsStream, file);
System.out.println("生成成功!" + file);
}
5、查询最新版本的流程定义
/* 附加功能:查询最新版本的流程定义 */
@Test
public void queryLastVersionProcessDefinition() {
List<org.activiti.engine.repository.ProcessDefinition> list = processEngine.getRepositoryService()// 与流程定义相关的service
.createProcessDefinitionQuery()// 创建流程定义查询对象
.orderByProcessDefinitionVersion().asc()// 按照流程定义版本升序排序
.list();
// key相同,后面的值就会覆盖前面的值,最后的就是最新版本的 . 会有多个不同的key值每个key对应会有多个版本
Map<String, org.activiti.engine.repository.ProcessDefinition> map = new LinkedHashMap<>();
if (list != null && list.size() > 0) {
for (org.activiti.engine.repository.ProcessDefinition pd : list) {
map.put(pd.getKey(), pd);
}
}
List<org.activiti.engine.repository.ProcessDefinition> pdList = new ArrayList<>(map.values());
if (pdList != null && pdList.size() > 0) {
for (org.activiti.engine.repository.ProcessDefinition processDefinition : pdList) {
System.out.println("流程定义id:" + processDefinition.getId());// 流程定义的key+版本+随机生成数
System.out.println("流程定义的名称:" + processDefinition.getName());// 流程定义的bpmn文件中的name属性值
System.out.println("流程定义的key:" + processDefinition.getKey());// 流程定义的bpmn文件中的id属性值
System.out.println("流程定义版本:" + processDefinition.getVersion());// 当流程定义的key值相同的情况下版本升级,默认是1
System.out.println("资源名称bpm文件:" + processDefinition.getResourceName());
System.out.println("资源名称png文件:" + processDefinition.getDiagramResourceName());
System.out.println("部署对象id:" + processDefinition.getDeploymentId());
System.out.println("-------------------------------------------------------------");
}
}
}
6、删除流程定义(删除key相同的所有不同版本的流程定义)
/* 附加功能:删除流程定义(删除key相同的所有不同版本的流程定义) */
@Test
public void deleteProcessDefinition() {
// 流程定义的key
String processDefinitionKey = "helloWord";
List<org.activiti.engine.repository.ProcessDefinition> list = processEngine.getRepositoryService()// 与流程定义相关的service
.createProcessDefinitionQuery()// 创建流程定义查询对象
.processDefinitionKey(processDefinitionKey)// 根据流程定义的key值查询
.list();
// 遍历,获取每个流程定义的部署id
if (list != null && list.size() > 0) {
for (org.activiti.engine.repository.ProcessDefinition pd : list) {
// 根据流程部署id删除流程
processEngine.getRepositoryService()// 与流程定义相关的service
.deleteDeployment(pd.getDeploymentId(), true);
}
}
}
以上是关于工作流笔记第二天_流程定义的CRUD的主要内容,如果未能解决你的问题,请参考以下文章