1. 概念
流程实例(ProcessInstance)代表流程定义的执行实例。例如:用户或程序按照流程定义内容发起一个流程,这就是一个流程实例。
流程定义和流程实例的图解:

2. 启动流程实例 并添加Businesskey
- Businesskey:业务标识,通常为业务表的主键,业务标识和流程实例一一对应。业务标识来源于业务系统。存储业务标识就是根据业务标识来关联查询业务系统的数据。
- 启动流程实例时,指定的businesskey,就会在act_ru_execution #流程实例的执行表中存储businesskey。
- 比如:出差流程启动一个流程实例,就可以将出差单的id作为业务标识存储到activiti中,将来查询activiti的流程实例信息就可以获取出差单的id从而关联查询业务系统数据库得到出差单信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
@Test public void addBusinessKey(){
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance processInstance = runtimeService. startProcessInstanceByKey("myProcess","0001");
System.out.println("业务id=="+processInstance.getBusinessKey()); }
|
3. 挂起、激活流程实例
某些情况可能由于流程变更需要将当前运行的流程暂停而不是直接删除,流程暂停后将不会继续执行。
3.1 全部流程实例挂起
流程定义为挂起状态时:
- 该流程定义将不允许启动新的流程实例,
- 该流程定义下所有的流程实例将全部挂起暂停执行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| @Test public void SuspendAllProcessInstance(){
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery(). processDefinitionKey("myProcess"). singleResult();
boolean suspended = processDefinition.isSuspended();
String processDefinitionId = processDefinition.getId();
if(suspended){
repositoryService.activateProcessDefinitionById(processDefinitionId, true, null ); System.out.println("流程定义:"+processDefinitionId+",已激活"); }else{
repositoryService.suspendProcessDefinitionById(processDefinitionId, true, null); System.out.println("流程定义:"+processDefinitionId+",已挂起"); } }
|
3.2 单个流程实例挂起
单个流程实例挂起,则此流程不再继续执行,完成该流程实例的当前任务将报异常
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| @Test public void SuspendSingleProcessInstance(){
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance processInstance = runtimeService. createProcessInstanceQuery(). processInstanceId("15001"). singleResult();
boolean suspended = processInstance.isSuspended();
String processDefinitionId = processInstance.getId();
if(suspended){
runtimeService.activateProcessInstanceById(processDefinitionId); System.out.println("流程定义:"+processDefinitionId+",已激活"); }else{
runtimeService.suspendProcessInstanceById( processDefinitionId); System.out.println("流程定义:"+processDefinitionId+",已挂起"); }
}
|