acitivi(二) 流程部署
名称解释
- 流程: 对过程步骤的描述(请假流程)
- 流程实例: 具体的一次流程执行(某人根据流程具体请假一次)
CRUD
流程文件部署(增)
通过classpath路径下的资源文件部署流程
// 系统属性表-存有next.dbid act_ge_property
// 资源表,相当于附近表 act_ge_bytearray
@Test
public void deploymentClassPath() {
String bpmnNameAndKey = "first";
Deployment deployment = repositoryService.createDeployment()
.name("请假流程")
.key(bpmnNameAndKey)
.addClasspathResource("processes/" + bpmnNameAndKey + ".bpmn")
// .addClasspathResource("processes/" + bpmnNameAndKey + ".png")
.category("HR")
.deploy();
System.out.println("部署ID\t"+deployment.getId());
System.out.println("部署分类\t"+deployment.getCategory());
System.out.println("部署名称\t"+deployment.getName());
}
通过zip压缩包部署流程
@Test
public void deploymentZip() {
String bpmnNameAndKey = "first";
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("processes/first.zip");
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
Deployment deployment = repositoryService.createDeployment().name("请假流程")
.addZipInputStream(zipInputStream)
.category("HR")
.deploy();
System.out.println("部署ID\t"+deployment.getId());
System.out.println("部署分类\t"+deployment.getCategory());
System.out.println("部署名称\t"+deployment.getName());
}
通过输入流部署流程
@Test
public void deploymentInputstream() {
InputStream inputStreamBpmn = this.getClass().getClassLoader().getResourceAsStream("processes/first.bpmn");
InputStream inputStreamPng = this.getClass().getClassLoader().getResourceAsStream("processes/first.png");
Deployment deployment = repositoryService.createDeployment().name("请假流程")
.addInputStream("first.bpmn",inputStreamBpmn)
.addInputStream("first.png",inputStreamPng)
.category("HR")
.deploy();
System.out.println("部署ID\t"+deployment.getId());
System.out.println("部署分类\t"+deployment.getCategory());
System.out.println("部署名称\t"+deployment.getName());
}
通过BpmnModel部署流程
@Test
public void deploymentModel() {
Deployment deployment = repositoryService.createDeployment().name("请假流程")
.addBpmnModel("first", createBpmnModel())
.category("HR")
.deploy();
System.out.println("部署ID\t"+deployment.getId());
System.out.println("部署分类\t"+deployment.getCategory());
System.out.println("部署名称\t"+deployment.getName());
}
public BpmnModel createBpmnModel(){
BpmnModel bpmnModel = new BpmnModel();
//流程定义
Process process = new Process();
process.setId("first");
process.setName("firstProcess");
bpmnModel.addProcess(process);
//开始
StartEvent startEvent = new StartEvent();
startEvent.setId("startEvent");
startEvent.setName("开始");
process.addFlowElement(startEvent);
//用户任务
UserTask userTask = new UserTask();
userTask.setId("usertask1");
userTask.setName("审批【部门经理】");
process.addFlowElement(userTask);
//用户任务结束
EndEvent endEvent = new EndEvent();
startEvent.setId("endEvent");
process.addFlowElement(startEvent);
//连线
process.addFlowElement(new SequenceFlow("startEvent", "usertask1"));
process.addFlowElement(new SequenceFlow("usertask1", "endEvent"));
return bpmnModel;
}
启动流程
// 按照流程定义的key启动,则是启动最新版本
runtimeService.startProcessInstanceByKey("first");
runtimeService.startProcessInstanceByKey(processDefinitionKey,businessKey,variables);
部署对象查询
// 部署对象表 act_re_deployment
@Test
public void findDeployment() {
Deployment deployment = repositoryService.createDeploymentQuery()
// .processDefinitionKey("first")
.deploymentKey("first")
.latest()
.singleResult();
System.out.println("部署ID\t"+deployment.getId());
System.out.println("部署名称\t"+deployment.getName());
System.out.println("部署分类\t"+deployment.getCategory());
System.out.println("部署KEY\t"+deployment.getKey());
System.out.println("部署租户tenantID\t"+deployment.getTenantId());
System.out.println("部署时间\t"+deployment.getDeploymentTime());
}
流程定义查询
// 流程定义表 act_re_procdef
// 获取流程的最新版本
@Test
public void findDefinition() {
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionKey("first")
.latestVersion()
.singleResult();
System.out.println("流程定义ID\t"+processDefinition.getId());
System.out.println("部署ID\t"+processDefinition.getDeploymentId());
System.out.println("资源名称\t"+processDefinition.getResourceName());
System.out.println("资源图片名称\t"+processDefinition.getDiagramResourceName());
}
删除流程
// 流程定义表 act_re_procdef
// 删除部署KEY为first的所有流程.
@Test
public void delete() {
List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().processDefinitionKey("first").list();
for (ProcessDefinition processDefinition : list) {
repositoryService.deleteDeployment(processDefinition.getDeploymentId(), true);
}
}
获取流程图
@Test
public void getPic() throws Exception {
String deploymentId = "2501";
String resourceName = "processes/first.png";
InputStream inputStream = repositoryService.getResourceAsStream(deploymentId, resourceName);
FileCopyUtils.copy(inputStream, new FileOutputStream(new File("D:/first.png")));
}
获取每个流程最新的版本
@Test
public void findLatestVersion() {
List<ProcessDefinition> definitions = repositoryService.createProcessDefinitionQuery()
.orderByProcessDefinitionVersion().asc().list();
LinkedHashMap<String, ProcessDefinition> map = new LinkedHashMap<>();
if (!CollectionUtils.isEmpty(definitions)) {
for (ProcessDefinition definition : definitions) {
map.put(definition.getKey(), definition);
}
}
ArrayList<ProcessDefinition> list = new ArrayList<>(map.values());
for (ProcessDefinition processDefinition : list) {
System.out.println("流程定义ID\t"+processDefinition.getId());
System.out.println("部署ID\t"+processDefinition.getDeploymentId());
System.out.println("资源名称\t"+processDefinition.getResourceName());
System.out.println("资源图片名称\t"+processDefinition.getDiagramResourceName());
}
}
流程挂起
@Test
public void suspend() {
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionKey("first")
.latestVersion()
.singleResult();
boolean suspended = processDefinition.isSuspended();
System.out.println(suspended ? "流程被暂停状态" : "流程激活状态");
String processDefinitionId = processDefinition.getId();
if(suspended){
System.out.println("流程定义:"+processDefinitionId+"当前暂停");
}else{
repositoryService.suspendProcessDefinitionById(processDefinitionId,true,null);
System.out.println("流程定义:"+processDefinitionId+"挂起");
}
}
流程激活
@Test
public void activate() {
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionKey(bpmnNameAndKey)
.latestVersion()
.singleResult();
boolean suspended = processDefinition.isSuspended();
System.out.println(suspended ? "流程被暂停状态" : "流程激活状态");
String processDefinitionId = processDefinition.getId();
if(!suspended){
//说明是暂停,就可以激活操作
System.out.println("流程定义:"+processDefinitionId+"已经激活");
}else{
repositoryService.activateProcessDefinitionById(processDefinitionId,true
,null);
System.out.println("流程定义:"+processDefinitionId+"激活成功");
}
}