一.流程部署
/**
* 压缩包的方式部署流程
*/
@Test
public void deploymentByZip(){
//获取processEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取一个RepositoryService对象
RepositoryService repositoryService = processEngine.getRepositoryService();
//定义一个输入流,加载Zip文件
InputStream inputStream=this.getClass().getClassLoader().getResourceAsStream("bpmnfile/holiday.zip");
//定义一个ZIPInputStream对象
ZipInputStream zipInputStream=new ZipInputStream(inputStream);
//流程部署
Deployment deploy = repositoryService.createDeployment()
.addZipInputStream(zipInputStream)
.name("请求审批流程")
.key("holidayKey")
.deploy();
System.out.println("流程名称:"+deploy.getName());
}
二.流程定义的查看
/**
* 流程定义信息的查看
*/
@Test
public void getProDef(){
//获取processEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取一个RepositoryService对象
RepositoryService repositoryService = processEngine.getRepositoryService();
//得到流程定义查看对象ProcessDefinitionQuery
ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
//指定查看的流程 processDefinitionKey()指定流程定义的key值 orderByProcessDefinitionVersion根据流程定义版本号排序
List<ProcessDefinition> holiday = processDefinitionQuery.processDefinitionKey("holiday").orderByProcessDefinitionVersion().desc().list();
for (ProcessDefinition proDef:holiday) {
System.out.println("流程定义ID:"+proDef.getId());
System.out.println("流程定义的名称:"+proDef.getName());
System.out.println("流程定义的Key:"+proDef.getKey());
System.out.println("流程定义的版本号:"+proDef.getVersion());
}
}
三.流程删除
/**
* 删除流程:
* 假设在删除时,当前正在有该流程实例执行,那么会导致删除失败
* 如果强制要求,则可以使用repositoryService.deleteDeployment("1",true); true代表级联删除
*/
@Test
public void deleteDeployment(){
//获取processEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取一个RepositoryService对象
RepositoryService repositoryService = processEngine.getRepositoryService();
//删除流程
repositoryService.deleteDeployment("10001",true);
}
四.获取数据库中流程资源信息
/**
* 从数据中读取资源文件到本地
*/
@Test
public void getResource() throws IOException {
//获取processEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取一个RepositoryService对象
RepositoryService repositoryService = processEngine.getRepositoryService();
//获取到流程查询对象
ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
//获取到流程资源
processDefinitionQuery.processDefinitionKey("holiday");
//获取单一结果
ProcessDefinition processDefinition = processDefinitionQuery.singleResult();
//流程部署的ID
String deploymentId = processDefinition.getDeploymentId();
//获取到bpmnResource
InputStream bpmnStream = repositoryService.getResourceAsStream(deploymentId, processDefinition.getResourceName());
//获取到png
InputStream pngStream = repositoryService.getResourceAsStream(deploymentId, processDefinition.getDiagramResourceName());
//构建输出流
OutputStream bpmnOut = new FileOutputStream("C:\\Users\\FLC\\Desktop\\授课内容\\授课资料\\Y2170\\毕设项目\\" + processDefinition.getResourceName());
OutputStream pngOut = new FileOutputStream("C:\\Users\\FLC\\Desktop\\授课内容\\授课资料\\Y2170\\毕设项目\\" + processDefinition.getDiagramResourceName());
//将数据输出到磁盘当中
IOUtils.copy(bpmnStream,bpmnOut);
IOUtils.copy(pngStream,pngOut);
//关流
pngOut.close();
bpmnOut.close();
pngStream.close();
bpmnStream.close();
}
五.业务系统和流程系统进行关联
通过buessinessKey字段标识业务系统的主键数据ID,进而表名当前业务执行到了哪一个流程
/**
* 启动流程实例和业务系统关联
* 正常应该先添加数据到业务表当中,拿到当前添加数据的主键ID,通过启动流程实例,将主键ID交给BuessniessKkey
* 代表和流程系统进行关联
*/
@Test
public void startInstance(){
/**
* 让张三在页面提交,然后拿到ID
*/
/**
* 创建张三请假的实例流程
*/
//获取processEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RuntimeService runtimeService = processEngine.getRuntimeService();
//生成流程
ProcessInstance holiday = runtimeService.startProcessInstanceByKey("holiday","2");
/**
* 张三提交请假审批
*/
//获取一个TaskService对象
TaskService taskService = processEngine.getTaskService();
//获取张三的任务
Task task = taskService.createTaskQuery().taskAssignee("zhangsan").processDefinitionKey("holiday").singleResult();
//任务审批
taskService.complete(task.getId());
}
六.流程激活和挂起
/**
* 所有流程定义的挂起
*/
@Test
public void allSuspend(){
//获取processEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取repositoryService对象
RepositoryService repositoryService = processEngine.getRepositoryService();
//获取流程定义
ProcessDefinition holiday = repositoryService.createProcessDefinitionQuery().processDefinitionKey("holiday").singleResult();
//获取到当前流程定义是否为暂停状态 suspended方法为true代表为暂停 false就是运行的
boolean suspended = holiday.isSuspended();
if(suspended){
repositoryService.activateProcessDefinitionById(holiday.getId(),true,null);
System.out.println("该流程定义激活");
}else{
repositoryService.suspendProcessDefinitionById(holiday.getId(),true,null);
System.out.println("该流程定义暂停");
}
}
/**
* 单个流程实例的挂起
*/
@Test
public void singleSuspend(){
//获取processEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取RuntimeService对象
RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId("45001").singleResult();
//获取到当前流程定义是否为暂停状态 suspended方法为true代表为暂停 false就是运行的
boolean suspended = processInstance.isSuspended();
if(suspended){
runtimeService.activateProcessInstanceById("45001");
System.out.println("xx的请假流程激活");
}else{
runtimeService.suspendProcessInstanceById("45001");
System.out.println("xx的请假流程挂起");
}
}
本文介绍了Activiti的流程部署、查看、删除,以及如何获取数据库中流程资源信息。同时,详细阐述了业务系统与流程系统的关联方法,利用businessKey字段实现业务主键与流程状态的对应,并涵盖了流程的激活和挂起操作。

1263

被折叠的 条评论
为什么被折叠?



