本文重点分析flowable新增任务撤销,从而可以更好的了解flowable的走向。
本教程主要分以下几点内容:
一、讲解节点撤销的API。
二、使用节点撤销的功能。
三、指点节点撤销的利弊。
-------------------------------------------------------------------------
1.1 节点撤销的API
对于节点撤销的API位于RuntimeService接口的定义中,如下所示:
/**
* Create a {@link ChangeActivityStateBuilder}, that allows to set various options for changing the state of a process instance.
*/
ChangeActivityStateBuilder createChangeActivityStateBuilder();
上面的方法仅仅用于构造ChangeActivityStateBuilder实例对象,ChangeActivityStateBuilder接口的定义信息如下:
public interface ChangeActivityStateBuilder {
/**
*设置流程实例id
**/
ChangeActivityStateBuilder processInstanceId(String processInstanceId);
/**
*设置需要撤销的节点Id
*/
ChangeActivityStateBuilder cancelActivityId(String cancelActivityId);
/**
* 设置撤销节点需要到达的节点(目标节点)
**/
ChangeActivityStateBuilder startActivityId(String startActivityId);
/**
* 开始节点的撤销功能
**/
void changeState();
}
1.2 节点撤销使用
首先定义一个流程文档,该流程对应的图如下所示:
上图中定义了三个任务节点,他们的id依此为taskBefore、subtask、taskAfter。关于上述的流程文档可以进入qq群:129123599进行下载。
部署上述的流程文档并启动流程实例,执行如下代码:
@Test
public void complete() {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("startSimpleSubProcess");
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
taskService.complete(task.getId());
task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
}
这个时候act_ru_task表新增的数据如下所示:
现在需要演示将流程实例为85001的数据(subtask),撤销到taskBefore节点。那么就需要执行如下的代码:
@Test
public void createChangeActivityStateBuilder() {
String processInstanceId="85001";
runtimeService.createChangeActivityStateBuilder()
.processInstanceId(processInstanceId)
.cancelActivityId("subtask")// taskBefore subtask taskAfter
.startActivityId("taskBefore")
.changeState();
}
上述代码执行完毕之后,再次查看act_ru_task表的数据如下所示 :
读者有兴趣可以观察act_hi_taskinst表中DELETE_REASON_值的变化。该列值的格式为Change activity to subtask。
1.3节点撤销的利弊
上述讲解的节点撤销功能在flowable6.0.0.5版本中引入并测试通过,该功能比较新颖。也有一定的Bug,因此使用的时候有一定的风险。比如多实例或者分支不支持范反复的撤销。
关于分支节点、会签节点的跳转可以参考随后的章节。
转载请注明:分享牛 » flowable节点撤销