「这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战」
流程启动
在流程部署之后使用runtimeService启动流程
runtimeService.startProcessInstanceById(流程定义id)
runtimeService.startProcessInstanceById(流程定义id,流程变量)
//流程变量:可以决定流程的走向
runtimeService.startProcessInstanceById(流程定义id,businessKey);
//businessKey,也就是业务id,这个业务id就是需要处理的业务的那张表的主键(实际操作项目中比如入库单,或者请假单其中对应的id),将业务id和流程实例id绑定起来
runtimeService.startProcessInstanceById(流程定义id,businessKey,流程变量);
//除了上面四种之外,还可以根据Key启动流程
复制代码
流程启动一次就会在act_ru_execution
表中存放数据 使用最多的启动方式一般是
runtimeService.startProcessInstanceByKey(流程定义id,businessKey,流程变量);
runtimeService.startProcessInstanceByKey(流程定义id,businessKey);
复制代码
执行任务(TaskService)
查询任务
查询都是大同小异,都包括一下三点
- 条件
.taskAssignee(assignee);根据任务办理人查询,返回集合 .deploymentId(deloymentId) .deploymentIdIn(Ids);查询效率低 .executionId(executionId) .processDefinitionXXX(XXX),id,key,Name,KeyLike,NameLike .processInstanceBusinessKey(processInstanceBusinessKey);
- 排序
没什么好说的
- 结果集
都一样
办理任务
完成任务的三个方法
- taskService.complete(taskId);
根据任务id完成任务 - taskService.complete(taskId,variables);
并指定流程变量,也就是通过流程变量来判断流程的走向,是放弃还是继续执行,还是驳回
判断流程是否结束
目的是更新业务表中的状态栏中的状态
- 已知流程实例id,可以根据流程实例id进行判断,也就是使用流程实例id查询流程实例,如果流程实例不为空,就说明当前对应id流程没有结束
- 已知任务实例id,使用任务实例id,查询出任务,使用任务查询出流程实例id,再进行上面的步骤
查询历史流程实例(act_hi_)
historyService.createHistoricProcessInstanceQuery().list();
复制代码
查询历史任务实例(act_hi_taskinst)
使用historyService
还是使用那一套,没什么说的了
总结
Execution
执行对象, 一次的流程执行,有多个分支就有多个执行对象
对应act_ru_execution
和act_hi_procinst
、act_hi_actinst
ProcessInstance
流程实例,一次流程执行只会有一个流程实例,也就是主分支
- 如果是单例流程(没有分支),执行对象ID就是流程实例ID
- 流程实例只会有一个,但是执行对象会有多个(多个分支)
Task任务
执行到某个任务环节时生成的任务信息
相关ID
部署ID --> act_re_deployment id 流程定义ID --> act_re_procdef id 流程实例ID --> act_ru_execution id 执行实例ID --> act_ru_task execution id 任务ID --> act_run_task id