源代码:
Github:
https://github.com/Activiti
https://github.com/yuanqixun/activiti-modeler.git
一) 流程的暂停与激活:
注:流程的暂停与激活状态只会保存在流程定义或流程实例表中的
SUSPENSION_STATE_字段中,其他表是没有任何记录此状态信息的。
1) 使用 RuntimeService 暂停或激活流程实例
1.1) void suspendProcessInstanceById(String processInstanceId);
暂停流程时,只会暂停指定的实例,实例对应的
子 流程或主流程均不会被关联暂停
,如果找不到或流程已经处于暂停状态则抛异常.如异常范例如下:
org.activiti.engine.ActivitiException: Cannot set suspension state 'suspended' for ProcessInstance[3504]': already in state 'suspended'.
执行此方法将会更新
ACT_RU_EXECUTION.SUSPENSION_STATE_ 字段的值为2.
1.2) void activateProcessInstanceById(String processInstanceId);
重新激活流程时也不会激活
对应的子流程或主流程,如果找不到或流程已经处于活动状态则抛异常;
1.3) 查询
ProcessInstanceQuery.active();
-- 使用此方法会同时查询
ACT_RE_PROCDEF表的状态,只有流程定义和流程实例均处于活动状态,才将此流程实例当成活动状态处理,因为其查询语句为:
select ... from ACT_RU_EXECUTION E
inner join ACT_RE_PROCDEF P on E.PROC_DEF_ID_ = P.ID_
WHERE ... and ((E.SUSPENSION_STATE_ = 1)
and (P.SUSPENSION_STATE_ = 1))
ProcessInstanceQuery.suspended();
--
使用此方法会同时查询
ACT_RE_PROCDEF表的状态,如果流程定义表已经为暂停状态,就算流程实例处于活动状态,也将此流程实例当成是处于暂停状态处理,因为其查询语句为:
select ... from ACT_RU_EXECUTION E
inner join ACT_RE_PROCDEF P on E.PROC_DEF_ID_ = P.ID_
WHERE ... and ((E.SUSPENSION_STATE_ = 2)
or (P.SUSPENSION_STATE_ = 2))
1.4) 相关数据定义
ACT_RU_EXECUTION.SUSPENSION_STATE_: 1-激活, 2-暂停
Java中类 org.activiti.engine.impl.persistence.entity.SuspensionState 定义了相应状态的值
2) 使用 RepositoryService 暂停或激活流程定义
2.1) void suspendProcessDefinitionById(String processDefinitionId);
2.2) void suspendProcessDefinitionById(String processDefinitionId);
2.3) void activateProcessDefinitionById(String processDefinitionId);
2.4) void activateProcessDefinitionByKey(String processDefinitionKey);
2.5) 查询
ProcessDefinitionQuery.active();
ProcessDefinitionQuery
.suspended();
2.6) 相关数据定义
ACT_RE_PROCDEF.SUSPENSION_STATE_: 1-激活, 2-暂停
Java中类 org.activiti.engine.impl.persistence.entity.SuspensionState 定义了相应状态的值