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); } } }