工作流程部署好之后,可以通过核心引擎来进行流程信息的管理工作。具体实现如下:
一、查询流程
1、获取所有流程信息:
public void findAll() throws Exception{
List<ProcessDefinition> list=processEngine.getRepositoryService()//
.createProcessDefinitionQuery()//
//设置过滤条件
// .processDefinitionKey("")//
// .processDefinitionNameLike("")//
//排序
// .orderAsc("")//
//获取记录数
// .count()
//获取单一记录
// .uniqueResult()
//分页
// .page(arg0, arg1)
.list();
for(ProcessDefinition pd:list){
System.out.println(//
"id="+pd.getId()//格式为:(key)-(version),用于唯一标识一个活动
+",name="+pd.getName()//流程定义的名称,jpdl.xml中根元素的name属性值
+",key="+pd.getKey()//流程定义的key,jpdl.xml中根元素的key属性值,默认为name值
+",version="+pd.getVersion()//版本号,自动生成,第一次为1,以后递增
+",deployId="+pd.getDeploymentId());//所属的部署对象
}
}
可以通过流程资源服务接口来调用所需要的查询信息,设置不同的过滤条件及分页等。
2、获取最新的版本信息
public void findLatest() throws Exception{
List<ProcessDefinition> all=processEngine.getRepositoryService()//
.createProcessDefinitionQuery()//
//排序
.orderAsc(ProcessDefinitionQuery.PROPERTY_VERSION)//
.list();
//过滤所有最新的版本
Map<String,ProcessDefinition> map=new HashMap<String,ProcessDefinition>();
for(ProcessDefinition pd:all){
map.put(pd.getKey(), pd);
}
for(ProcessDefinition pd:map.values()){
System.out.println(//
"id="+pd.getId()//格式为:(key)-(version),用于唯一标识一个活动
+",name="+pd.getName()//流程定义的名称,jpdl.xml中根元素的name属性值
+",key="+pd.getKey()//流程定义的key,jpdl.xml中根元素的key属性值,默认为name值
+",version="+pd.getVersion()//版本号,自动生成,第一次为1,以后递增
+",deployId="+pd.getDeploymentId());//所属的部署对象
}
}
该方法与查询所有流程的方法基本一致,不一样的地方就是需要对查到的数据再进行处理,筛选出版本为最新的记录。借助Map集合的特点,将版本号依次放入map集合,最后一次放入的会覆盖之前的信息,故可得到最新的版本信息。
二、删除流程
删除流程的方法主要有两种,一种是deleteDeployment,它存在一个缺点是删除流程后,其相关的执行信息不回删除,这样就造成查询时可能出错。第二种是deleteDeploymentCascade,在删除流程的同时,将其相关的执行信息一并删除。下面主要以第二种方法进行介绍
public void deleteById() throws Exception{
String deploymentId="90001";
//删除指定的部署对象(流程定义),如果有相关的执行信息,会被同时删除
processEngine.getRepositoryService().deleteDeploymentCascade(deploymentId);
}
三、查看流程图
public void getImageResource() throws Exception{
String deploymentId="20001";
String resourceName="helloworld/helloworld.png";
//获取指定部署对象中的指定资源的内容
InputStream in =processEngine.getRepositoryService().getResourceAsStream(deploymentId, resourceName);
//保存到f盘
OutputStream out=new FileOutputStream("F:/OA/process.png");
for(int b=-1;(b=in.read()) !=-1;){
out.write(b);
}
in.close();
out.close();
}
通过对流程的设计、定义部署及部署管理的操作,首先是知道了其中的一些表的作用,以及在流程部署过程中的一些流转。接下来就要开始对每个任务在执行过程的一些操作进行深入的研究。