上文链接:https://www.cnblogs.com/wangshaoyun/p/17164959.html
通过流程定义模型,进行部署流程定义,部署后会生成流程定义数据(相当于java类),此时生成的流程定义数据主要用于启动流程实例,一个流程定义 Java 类对应的可以创建无数个 java 流程实例对象。
启动流程实例
@Autowired
RuntimeService runtimeService;
/**
* 涉及到的数据表
* ACT_HI_TASKINST 任务实例
* ACT_HI_PROCINST 流程实例
* ACT_HI_ACTINST 流程节点实例表
* ACT_HI_IDENTITYLINK 流程实例相关办理人
* ACT_RU_EXECUTION 运行时流程执行实例表
* ACT_RU_TASK 运行时流程任务表
* ACT_RU_IDENTITYLINK 运行时流程实例办理人
*/
@Test
public void startProcessInstance() {
//流程定义唯一标识key
String processKey = "leave";
//业务侧id
String businessKey = "10000";
//启动当前流程实例的用户
Authentication.setAuthenticatedUserId("波多野结波");
//启动流程实例
ProcessInstance pi = runtimeService.startProcessInstanceByKey(processKey, businessKey);
//将流程定义名称作为流程实例名称
runtimeService.setProcessInstanceName(pi.getProcessInstanceId(), pi.getProcessDefinitionName());
System.out.println("流程实例启动成功:" + pi.getProcessInstanceId());
}
查询正在运行中的流程实例数据
@Autowired
RuntimeService runtimeService;
/** 核心表为act_ru_execution,其中PARENT_ID_为null时,就是正在运行的流程实例 */
@Test
public void getProcInstRunningList() {
List<ProcessInstance> list = runtimeService.createProcessInstanceQuery()
.processInstanceNameLike("%请假%")
.list();
for (ProcessInstance pi : list) {
System.out.println("流程实例key:" + pi.getProcessDefinitionKey());
System.out.println("流程实例id:" + pi.getProcessInstanceId());
System.out.println("流程实例name:" + pi.getName());
System.out.println("流程定义版本:" + pi.getProcessDefinitionVersion());
System.out.println("业务测的key:" + pi.getBusinessKey());
System.out.println("流程发起人:" + pi.getStartUserId());
System.out.println("流程实例状态:" + (pi.isSuspended() ? "挂起" : "激活"));
}
}
挂起或激活流程实例
@Autowired
RuntimeService runtimeService;
/** 主要修改的是 act_ru_execution 表的 SUSPENSION_STATE_ 字段 */
@Test
public void updateProcInstState() {
//查询指定流程实例的数据
String procInstId = "eaab10e3-b741-11ed-a54e-38f3abe10e1d";
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceId(procInstId)
.singleResult();
//判断当前流程实例的状态
if (processInstance.isSuspended()) {
//挂起 -> 激活
runtimeService.activateProcessInstanceById(procInstId);
System.out.println("激活成功!");
} else {
//激活 -> 挂起
runtimeService.suspendProcessInstanceById(procInstId);
System.out.println("挂起成功!");
}
}
删除流程实例
@Autowired
RuntimeService runtimeService;
@Autowired
HistoryService historyService;
/**
* 涉及到的数据库表
* ACT_RU_IDENTITYLINK
* ACT_RU_TASK
* ACT_RU_EXECUTION
*/
@Test
public void deleteProcInst() {
String procInstId = "eaab10e3-b741-11ed-a54e-38f3abe10e1d";
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceId(procInstId)
.singleResult();
if (null != processInstance) {
runtimeService.deleteProcessInstance(procInstId,"删除原因");
//删除流程实例相关的历史数据
//historyService.deleteHistoricProcessInstance(procInstId);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏