流程定义管理


package com.kite.pd;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.zip.ZipInputStream;

import org.apache.log.output.FileOutputLogTarget;
import org.jbpm.api.Configuration;
import org.jbpm.api.Deployment;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.NewDeployment;
import org.jbpm.api.ProcessDefinition;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.RepositoryService;
import org.jbpm.pvm.internal.repository.RepositoryCache;
import org.junit.Test;

/**
* 流程定义管理
* 流程定义
* 把流程定义文档部署到jdpm中
* 查询
* 删除
* 查看流程图
* @author admin
*
*/
public class PDManager {

/**
* 牵涉到的表
* * JBPM4_DEPLOYMENT
* 部署表 用来说明一次部署
* 字段说明
* DBID_: 主键、部署ID
* STATE: 状态 active
* * JBPM4_LOB
* 仓库表 存放了流程定义的文档(xml.png)
* 字段说明
* DEPLOYMENT_:部署ID 外键
* NAME_: xml或者png的文件路径
* * JBPM4_DEPLOYPROP
* 部署属性表
* 字段
* DBID_:主键
* OBJNAME_:流程定义名称
* KEY_:
* 每部署一次,生成4行记录
* langid 语言版本 jpdl-4.4
* pdid {pdkey-version}
* pdkey 流程定义名称
* 一般情况下,pdkey和objname_的值是一样的
* pdversion 版本号
* 如果pdkey没有发生改变,每部署一次,版本号加1
* 如果pdkey发生改变,则是一个全新的名称,所以版本号应该从1开始计算
*/
/**
* 从classpath加载
*/
@Test
public void testDeployFromClasspath(){
//Process 过程 Engine 发动机 给 什么安装发动机
ProcessEngine processEngine = Configuration.getProcessEngine();
// RepositoryService repositoryService = processEngine.getRepositoryService();
// NewDeployment newDeployment = repositoryService.createDeployment();
// newDeployment.addResourceFromClasspath("");
// newDeployment.addResourceFromClasspath("");
// newDeployment.deploy();
processEngine.getRepositoryService().
createDeployment().
addResourceFromClasspath("qingjia.jpdl.xml").//加载文件
addResourceFromClasspath("qingjia.png").//加载文件
deploy();
}

/**
* 从inputstream 加载
*/
@Test
public void testDeployFromInputStream(){

InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("qingjia.jpdl.xml");
Configuration.getProcessEngine()
.getRepositoryService()
.createDeployment()
.addResourceFromInputStream("qingjia.jpdl.xml", inputStream).deploy();
}

/**
* 从zipinputstram 中加载
*/
@Test
public void testDeployFromZipInputstream(){
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("qingjia.zip");
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
Configuration.getProcessEngine()
.getRepositoryService()
.createDeployment()
.addResourcesFromZipInputStream(zipInputStream)
.deploy();
}

/**
* 查询所有的部署
*/
@Test
public void testQueryAllDeploy(){
List<Deployment> deploymentList = Configuration.getProcessEngine().getRepositoryService()
.createDeploymentQuery()
.list();

for(Deployment deployment : deploymentList){
System.out.print(deployment.getId() + "\t");
System.out.println(deployment.getState());
}
}
/**
* 根据部署id查询的部署
*/
@Test
public void testQueryDeployByID(){
Deployment deployment =
Configuration.getProcessEngine().getRepositoryService()
.createDeploymentQuery().deploymentId("10001").uniqueResult();
System.out.print(deployment.getId() + "\t");
System.out.println(deployment.getState());
}

/**
* 查询所有的流程定义
*/
@Test
public void testQueryAllPD(){
List<ProcessDefinition> pdList = Configuration.getProcessEngine().getRepositoryService()
.createProcessDefinitionQuery()
.list();

for(ProcessDefinition processDefinition : pdList){
System.out.print("部署id:" + processDefinition.getDeploymentId() + "\t");

System.out.print("流程id:" + processDefinition.getId()+ "\t");

System.out.println("图片路径:" + processDefinition.getImageResourceName());
}
}
/**
* 根据部署id查询流程定义
*/
@Test
public void testQueryPDByID(){
ProcessDefinition processDefinition = Configuration.getProcessEngine().getRepositoryService()
.createProcessDefinitionQuery().deploymentId("10001").uniqueResult();

System.out.print("部署id:" + processDefinition.getDeploymentId() + "\t");

System.out.print("流程id:" + processDefinition.getId()+ "\t");

System.out.println("图片路径:" + processDefinition.getImageResourceName());
}
/**
* 根据PDID查询流程定义
*/
@Test
public void testQueryPDByPDID(){
ProcessDefinition processDefinition = Configuration.getProcessEngine().getRepositoryService()
.createProcessDefinitionQuery().processDefinitionId("qingjia-1").uniqueResult();
System.out.print("部署id:" + processDefinition.getDeploymentId() + "\t");

System.out.print("流程id:" + processDefinition.getId()+ "\t");

System.out.println("图片路径:" + processDefinition.getImageResourceName());
}

/**
* 根据pdkey查询流程定义
*/
@Test
public void testQueryPDByPDKEY(){
List<ProcessDefinition> pdList = Configuration.getProcessEngine()
.getRepositoryService()
.createProcessDefinitionQuery()
.processDefinitionKey("qingjia").list();

for(ProcessDefinition processDefinition : pdList){
System.out.print("部署id:" + processDefinition.getDeploymentId() + "\t");

System.out.print("流程id:" + processDefinition.getId()+ "\t");

System.out.println("图片路径:" + processDefinition.getImageResourceName());
}
}

/**
* 删除
* 只能直接删除流程部署
* 而没有提供删除流程定义的api
*/
@Test
public void testDeleteDeployment(){
Configuration.getProcessEngine().getRepositoryService()
.deleteDeployment("40001"); //d
}
/**
* 根据key得到所有的流程定义,然后遍历每一个流程定义,得到流程部署,然后依次删除
*/

/**
* 查询流程图
* @throws FileNotFoundException
*/
@Test
public void testQueryImage() throws Exception{
InputStream inputStream = Configuration.getProcessEngine()
.getRepositoryService()
//第一个为deploymentid 第二个参数为lob表中的name属性
.getResourceAsStream("1", "qingjia.png");
OutputStream outputStream = new FileOutputStream("d:\\a.png");

byte[] buf = new byte[1024];
int len = 0;
while((len = inputStream.read(buf)) != -1){
outputStream.write(buf, 0, len);
}
outputStream.close();
inputStream.close();
}

}

流程定义管理,码迷,mamicode.com

时间: 2024-10-11 19:19:39

流程定义管理的相关文章

BOS项目 第10天(activiti工作流第二天,流程变量、组任务、排他网关、spring整合activiti、项目中实现流程定义管理)

BOS项目笔记 第10天 今天内容安排: 1.流程变量(设置.获取) 2.组任务(候选人.候选组) 3.排他网关使用 4.spring整合activiti 5.将activiti应用到bos项目中 6.在bos项目中实现流程定义管理(部署.查询.查看png.删除) 1. 流程变量 1.1 设置流程变量的方式 l 方式一:启动流程实例时设置 l 方式二:办理任务时设置 l 方式三:使用RuntimeService的set方法设置 l 方式四:使用TaskService的set方法设置 注意:如果设

工作流学习——Activiti流程定义管理三步曲

一.前言 在上一篇文章我们通过一个小demo对Activiti进行了宏观的介绍,让大家对Activiti有了整体的认识,这篇文章我们来学习具体的流程定义管理的CRUD. 二.正文 流程定义是什么 ProcessDefinition(流程定义)就是一个流程的步骤说明,比如我们接下来要说的这个流程,申请人王三发起提交申请,李四作为部门经理进行审批,审批完成后,此申请到达下一级总经理王五,进行审批.就这么整个流程说明其实就是流程定义,不过在Activiti中整个流程定义是以helloworld.bpm

工作流学习——Activiti流程定义管理三步曲 (zhuan)

http://blog.csdn.net/zwk626542417/article/details/46602419 **************************************************************** 一.前言 在上一篇文章我们通过一个小demo对Activiti进行了宏观的介绍,让大家对Activiti有了整体的认识,这篇文章我们来学习具体的流程定义管理的CRUD. 二.正文 流程定义是什么 ProcessDefinition(流程定义)就是一个流

框架 day57 BOS项目练习(流程定义/实例管理,bos用户角色同步activiti用户表组表)

BOS项目笔记第11天 内容: 1.提供新的json文件,修改系统菜单(加入工作流的菜单) 2.流程定义管理(查询.部署流程.查看png流程图片) 3.流程实例管理(查询.查看运行状态) 4.将bos系统中的用户数据和角色数据同步到activiti的用户表和组表 1.    提供新的json文件,修改系统菜单(加入工作流的菜单) 2.    流程定义管理 第一步:创建一个ProcessDefinitionAction,提供list方法,并注入流程引擎对象  查询 @Controller @Sco

JBPM学习(三):管理流程定义

概念: ProcessDefinition,流程定义:一个流程的步骤说明,如一个请假流程.报销流程.是一个规则. ProcessDefinition,流程定义对象,是解析.jpdl.xml文件得到流程步骤的信息.没有更新操作,启动流程实例时是使用指定key的最新的版本. 1.部署流程定义 a)一次添加一个资源,相关文件在Classpath中 // 1,部署流程定义(添加) // jbpm4_deployment // jbpm4_deployprop // jbpm4_lob @Test pub

JBPM工作流(四)——管理流程定义

概念: ProcessDefinition,流程定义:一个流程的步骤说明,如一个请假流程.报销流程.是一个规则. ProcessDefinition,流程定义对象,是解析.jpdl.xml文件得到流程步骤的信息.没有更新操作,启动流程实例时是使用指定key的最新的版本. 1.部署流程定义 a)一次添加一个资源,相关文件在Classpath中 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 // 1,部署流程定义(添加)     // jbpm4_deployment     //

BOS项目 第11天(activiti工作流第三天,流程实例管理、项目中的用户和角色同步到activiti的用户和组表、设计物流配送流程、启动物流配送流程、组任务操作(查询、拾取)、个人任务操作(查询、办理))

BOS项目笔记 第11天 今天内容安排: 1.流程实例管理(查询.查看运行状态) 2.将bos系统中的用户和角色同步到activiti的用户和组表 3.设计物流配送流程 4.启动物流配送流程 5.组任务操作(查询.拾取) 6.个人任务操作(查询.办理) 1. 流程实例管理 1.1 查询流程实例列表 第一步:创建一个流程实例管理Action,提供list方法,查询流程实例列表数据 第二步:配置struts.xml 第三步:提供processinstance.jsp页面,展示列表数据 <s:iter

Activiti流程实例管理

1.启动流程 /** * 1 启动流程 * 当流程到达一个节点时,会在act_ru_execution表中产生1条数据 * 如果当前节点是用户任务节点,这时会在act_ru_task表中产生1条数据(任务的办理人,任务的创建时间) */ @Test public void startProcess() throws Exception { /** * v1 myProcess:2:604 * v2 myProcess:3:704 */ // runtimeService.startProcess

jbpm流程发布以及流程实例管理

> 一.流程部署 1.流程引擎获取 ProcessEngine processEngine = new Configuration() .setResource("my-own-configuration-file.xml") .buildProcessEngine(); 实际开发中我们一般通过spring配置文件通过相关方法获取. 2.根据流程引擎获取相应地webservice服务. RepositoryService repositoryService = processEn