这里我们先在工作流引擎中加入一张bpmn图例(实际为xml)
然后使用如下代码进行部署
ProcessEngine processEngine = configuration.buildProcessEngine();
var deployment =
processEngine
.getRepositoryService()
.createDeployment()
.addClasspathResource("bpmn/MyProcess.bpmn20.xml")
.name("iPisces42的测试流程")
.deploy();
System.out.println("deployment.getId() = " + deployment.getId());
System.out.println("deployment.getName() = " + deployment.getName());
然后可以在数据库中
flowable.act_re_deployment中可以看到
可以在act_re_procdef中看到
注:bpmn的流程标识(id)会对应procdef中的key,name会对应procdef中的name
在act_ge_bytearray中则加入了
注:这里GENERATED_为1的为引擎自动生成的一张图片,不过数据库存图片总是怪怪的
任务挂起
这里我们测试以下任务的挂起与激活
@Test
void testSuspended() {
var processDefinition =
repositoryService
.createProcessDefinitionQuery()
.processDefinitionId("MyPorcess:1:7504")
.singleResult();
var suspended = processDefinition.isSuspended();
if (suspended) {
repositoryService.activateProcessDefinitionById(processDefinition.getId());
} else {
repositoryService.suspendProcessDefinitionById(processDefinition.getId());
}
}
同时也测试以下挂起的ProcessDefinition是否可以新建ProcessInstance
@Test
void testSuspend(){
runtimeService.startProcessInstanceById("MyPorcess:1:7504", "测试挂起能否启动新的流程实例");
}
这里明显是报错了
org.flowable.common.engine.api.FlowableException: Cannot start process instance. Process definition MyProcess (id = MyPorcess:1:7504) is suspended
我们这里先激活ProcessDefinition然后开启一个ProcessInstance,这里测试以下PeocessInstance是否可以继续执行
依旧使用上面两个测试用例,先将流程定义激活,然后再启动实例,然后再将流程定义挂起,加入新的测试用例
@Test
void testTask(){
taskService.complete("4c80ac89-bd7f-11ec-b304-1c99571ca913");
}
测试能否完成任务
第二张图是 实例实例的挂起状态,这里测试可知,流程定义挂起并不会影响到已启动的流程实例(激活状态)下的任务
这里我们将流程实例也进行挂起,重新测试task是否可以执行
@Test
void testSuspendProcessInstance() {
runtimeService.suspendProcessInstanceById("4c7bf194-bd7f-11ec-b304-1c99571ca913");
}
@Test
void testTask() {
taskService.complete("add709b1-bd7f-11ec-9dd0-1c99571ca913");
}
org.flowable.common.engine.api.FlowableException: Cannot complete a suspended task
这里报错了,说明ProcessInstacne挂起后,并不能执行task
如果我们需要挂起一个PeocessDefinition同时还需要旧的ProcessDefinition下的PeocessInstace 我们可以使用这个方法,将第二个参数设置为false,这样就不会影响到关联的流程实例
Q.E.D.