activiti的流程定义API
Explain:activiti对流程的增删该查
(学习源自传智播客itcast)
获取引擎
ProcessEngine processEngine = ProcessEngine.getDefaultProcessEngine();
Service
流程定义和部署对象相关的Service:RepositoryService
RepositoryService repositoryService=processEngine.getRepositoryService();
1.流程定义 从zip和xml
2.查询流程定义
创建流程定义查询对象,在ProcessDefinitionQuery上设置查询的相关参数,调用ProcessDefinitionQuery对象的list方法,执行查询符合条件的流程定义列表。
@Test
public void findProcessDifinitionList() {
List<ProcessDefinition> list = processEngine.getRepositoryService()
.createProcessDefinitionQuery()
// 查询条件
.processDefinitionKey("FirstProcess")// 按照流程定义的key
// .processDefinitionId("FirstProcess001")//按照流程定义的ID
.orderByProcessDefinitionVersion().desc()// 排序
// 返回结果
// .singleResult()//返回惟一结果集
// .count()//返回结果集数量
// .listPage(firstResult, maxResults)
.list();// 多个结果集
if(list!=null && list.size()>0){
for(ProcessDefinition pd:list){
System.out.println("流程定义的ID:"+pd.getId());
System.out.println("流程定义的名称:"+pd.getName());
System.out.println("流程定义的Key:"+pd.getKey());
System.out.println("流程定义的部署ID:"+pd.getDeploymentId());
System.out.println("流程定义的资源名称:"+pd.getResourceName());
System.out.println("流程定义的版本:"+pd.getVersion());
}
}
}
3.删除流程定义
如果该流程定义下 没有正在运行的流程,则可以用普通删除。如果是有关联的信息,用级联删除。项目开发中使用级联删除的情况比较多,删除操作一般只开放给超级管理员使用。
@Test
public void deleteDeployment(){
//删除发布信息
String deploymentId="1";
//获取仓库服务对象
RepositoryService repositoryService=processEngine.getRepositoryService();
//普通删除,如果当前规则下有正在执行的流程,则抛异常
//repositoryService.deleteDeployment(deploymentId);
//级联删除,会删除和当前规则相关的所有信息,正在执行的信息,也包括历史信息
repositoryService.deleteDeployment(deploymentId, true);
}
4.查看流程定义的资源文件
使用repositoryService的getDeploymentResourceNames
方法可以获取指定部署下得所有文件的名称;使用repositoryService的getResourceAsStream
方法传入部署ID和资源图片名称可以获取部署下指定名称文件的输入流;
最后的有关IO流的操作,使用FileUtils工具的copyInputStreamToFile方法完成流程流程到文件的拷贝,将资源文件以流的形式输出到指定文件夹下。
@Test
public void viewPng() throws IOException{
//部署ID
String deploymentId = "1";
//根据部署id获取的资源名称
List<String> list = processEngine.getRepositoryService()
.getDeploymentResourceNames(deploymentId);
//获得资源名称后缀.png
String resourceName = "";
if(list != null && list.size()>0){
for(String name:list){
if(name.indexOf(".png")>=0){//返回包含该字符串的第一个字母的索引位置
resourceName = name;
}
}
}
//获取输入流,输入流中存放.PNG的文件
InputStream in = processEngine.getRepositoryService()
.getResourceAsStream(deploymentId, resourceName);
//将获取到的文件保存到本地
FileUtils.copyInputStreamToFile(in, new File("D:/" + resourceName));
System.out.println("文件保存成功!");
}
5.流程定义修改
The procee definition can’t be modified ,because of it can break logic.
但是可以版本升级id和key值不变 ,version更新