工作流程部署好之后,可以通过核心引擎来进行流程信息的管理工作。具体实现如下:
一、查询流程
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(); }
通过对流程的设计、定义部署及部署管理的操作,首先是知道了其中的一些表的作用,以及在流程部署过程中的一些流转。接下来就要开始对每个任务在执行过程的一些操作进行深入的研究。