1.源码地址:https://github.com/heidaodageshiwo/springbootactivity
流程定义的查询,本质的话就是通过Activiti框架提供的API对act_re_procdef进行查询操作;
这里我们通过流程定义的KEY查询返回一个集合。然后我们输入流程定义表的部分关键字段;
/**
* 查询流程定义 返回流程定义集合 ---对应act_re_procdef
*/
@Autowired
RepositoryService repositoryService;
@RequestMapping("/procdef_list")
public String getlist(){
List<ProcessDefinition> pdList = repositoryService // 获取service类
.createProcessDefinitionQuery() // 创建流程定义查询
.processDefinitionKey("myFirstProcess") // 通过key查询
.list(); // 返回一个集合
for (ProcessDefinition pd : pdList) {
System.out.println("ID_:" + pd.getId());
System.out.println("NAME_:" + pd.getName());
System.out.println("KEY_:" + pd.getKey());
System.out.println("VERSION_:" + pd.getVersion());
System.out.println("===================");
}
return "procdef_list";
}
当然我们也可以通过流程定义ID来查询某个流程定义;单个返回结果;
@RequestMapping("/procdef_id")
public String procdef_id(){
List<ProcessDefinition> pdList = repositoryService // 获取service类
.createProcessDefinitionQuery() // 创建流程定义查询
// .processDefinitionKey("myFirstProcess") // 通过key查询
.processDefinitionId("myFirstProcess:2:7504")
.list(); // 返回一个集合
for (ProcessDefinition pd : pdList) {
System.out.println("ID_:" + pd.getId());
System.out.println("NAME_:" + pd.getName());
System.out.println("KEY_:" + pd.getKey());
System.out.println("VERSION_:" + pd.getVersion());
System.out.println("===================");
}
return "procdef_id";
}
删除:
/**
* 删除流程定义
*/
@RequestMapping("/procdef_delete")
public void delete(){
repositoryService
.deleteDeployment("12501"); // 流程部署ID
System.out.println("delete OK!");
}
删除失败!
本质的话,就是数据库里的数据 有主外键关联,不能删除;
我们实际情况的,假如一个流程定义都不需要了。那那些活动的流程实例也直接了当的级联删除;
所以我们这里要搞级联删除;上代码;
@RequestMapping("/procdef_deleteCascade")
public void procdef_deleteCascade(){
repositoryService
.deleteDeployment("12501",true); // 流程部署ID
System.out.println("delete OK!");
}
这时候 任何情况都能直接删除流程定义; 我们开发的时候就用这种;
修改:
首先说下结论,流程定义是不能修改的;
这里举例子,假如一个流程定义的流程实例在活动运行中。假如可以修改,
本来要流转到A这个节点,因为流程定义修改了,流转到B这个节点。就不符合当时这个流程实例的初衷了;
所以一般开发的话,不能修改流程定义,我们是通过增加版本号的方式。来实现“修改”的;
在设计流程图的时候,这里的Id 对应到数据库里的就是那个Key值 只要Id相同。就算是同一个流程定义;
比如我们可以发布多次,Id一样,到数据库表那边 Key作为版本属性 值会增加;
我们一般启动流程实例的时候,我们用Key来启动。这样启动的时候 就是用的最新版本的流程定义来启动流程实例的;