5.获取流程定义文档的资源(查看流程图附件)
/**
* 功能: 获取流程图.<br/>
* date: 2014年12月16日 下午4:22:30 <br/>
*
* @author xzzhao@wisdombud.com
* @throws IOException
*/
@Test
public void viewPicture() throws IOException {
// 部署Id
String deploymentId = "1001";
// 获取图片资源名称
List<String> list = processEngine.getRepositoryService().getDeploymentResourceNames(deploymentId);
// 定义图片资源名称
String resourceName = "";
if (null != list && list.size() > 0) {
for (String name : list) {
if (name.indexOf(".png") >= 0) {
resourceName = name;
}
}
}
// 获取图片的输入流
InputStream in = processEngine.getRepositoryService().getResourceAsStream(deploymentId, resourceName);
// 将输入流的图片写到D盘
FileUtils.copyInputStreamToFile(in, new File("D:/" + resourceName));
}
说明:
1)deploymentId为流程部署ID
2)resourceName为act_ge_bytearray表中NAME_列的值
3)使用repositoryService的getDeploymentResourceNames方法可以获取指定部署下得所有文件的名称
4)使用repositoryService的getResourceAsStream方法传入部署ID和资源图片名称可以获取部署下指定名称文件的输入流
5)最后的有关IO流的操作,使用FileUtils工具的copyInputStreamToFile方法完成流程流程到文件的拷贝,将资源文件以流的形式输出到指定文件夹下
6.查询最新版本的流程定义
/**
* 功能: 查询最新版本的流程定义.<br/>
* date: 2014年12月16日 下午4:56:04 <br/>
*
* @author xzzhao@wisdombud.com
*/
@Test
public void queryUltimatelyVersionProcessDefinition() {
List<ProcessDefinition> list = processEngine.getRepositoryService().createProcessDefinitionQuery()
.orderByProcessDefinitionVersion().asc()// 使用流程定义版本升序排列
.list();
// 当map集合key相同时,后一次的值将替换原来的值
Map<String, ProcessDefinition> map = new LinkedHashMap<>();
if (null != list && list.size() > 0) {
for (ProcessDefinition pd : list) {
map.put(pd.getKey(), pd);
}
}
List<ProcessDefinition> pdList = new ArrayList<>(map.values());
if (null != pdList && pdList.size() > 0) {
for (ProcessDefinition pd : pdList) {
System.out.println("流程定义ID:" + pd.getId()); // key + 版本 + 随机数
System.out.println("流程定义的名称:" + pd.getName()); // 对应bpmn文件中Name属性
System.out.println("流程定义的key:" + pd.getKey()); // 对应bpmn文件中ID属性
System.out.println("流程定义的版本:" + pd.getVersion()); // 当流程定义的key值相同下,版本升级,默认是1
System.out.println("部署对象的ID:" + pd.getDeploymentId());
System.out.println("资源文件bpmn名称:" + pd.getResourceName());
System.out.println("资源文件png名称:" + pd.getDiagramResourceName());
System.out.println("############################################");
}
}
}
7.删除流程定义(key相同的所有不同版本的流程定义)
/**
* 功能: 删除流程定义(key相同的所有不同版本的流程定义).<br/>
* date: 2014年12月16日 下午5:06:10 <br/>
*
* @author xzzhao@wisdombud.com
*/
@Test
public void deleteProcessDefinitionByKey() {
// 流程定义的key
String processDefinitionKey = "helloworld";
// 先根据key查询处所有版本的流程定义
List<ProcessDefinition> list = processEngine.getRepositoryService().createProcessDefinitionQuery()
.processDefinitionKey(processDefinitionKey) // 使用流程定义的key查询
.list();
if (null != list && list.size() > 0) {
for (ProcessDefinition pd : list) {
// 获取部署Id
String deploymentId = pd.getDeploymentId();
processEngine.getRepositoryService().deleteDeployment(deploymentId, true);
}
}
}
总结:
- Deployment 部署对象
1 .一次部署的多个文件的信息。对于不需要的流程可以删除和修改。
2 .对应的表:
act_re_deployment :部署对象表
act_re_procdef :流程定义表
act_ge_bytearray :资源文件表
act_ge_property :主键生成策略表
- ProcessDefinition流程定义
1 .
解析
.bpmn
后得到的流程定义规则的信息,工作流系统就是按照流程定义的规则执行的。