当需要暂停使用一个 Activiti 流程时,可以通过调用 Activiti 的 API 来实现流程的挂起与激活。
附 Activiti 6.x Javadocs 网址:Activiti 6.x Javadocs
附 Flowable Javadocs 网址:Flowable Javadocs
本文通过 ID 来挂起与激活流程,流程定义还可以根据 Key 来完成挂起与激活,根据实际需求来选择调用哪种方法。
流程实例的挂起与激活
通过 RuntimeService 和 HistoryService 均可实现对流程实例的挂起与激活操作,因 HistoryService 无用数据较多,相应的查询操作会占用更多的时间,所以本文选用 RuntimeService 来实现。
当流程实例被挂起时,无法通过下一个节点对应的任务id来继续这个流程实例。
通过挂起某一特定的流程实例,可以终止当前的流程实例,而不影响到该流程定义的其他流程实例。
激活之后可以继续该流程实例,不会对后续任务造成影响。
//通过流程实例ID来挂起流程实例
void suspendProcessInstanceById(String processInstanceId);
//通过流程实例ID来激活流程实例
void activateProcessInstanceById(String processInstanceId);
流程定义的挂起与激活
通过 RepositoryService 可以实现对流程定义的挂起与激活操作。
当流程定义被挂起时,已经发起的该流程定义的流程实例不受影响(如果选择级联挂起则流程实例也会被挂起)。
当流程定义被挂起时,无法发起新的该流程定义的流程实例。
//通过流程定义ID来挂起流程定义
void suspendProcessDefinitionById(String processDefinitionId);
//第二个参数为是否级联挂起该流程定义的流程实例
//第三个参数为挂起这个流程定义的时间,null为立即挂起
void suspendProcessDefinitionById(String processDefinitionId,
boolean suspendProcessInstances,
Date suspensionDate);
//激活流程定义
void activateProcessDefinitionById(String processDefinitionId);
void activateProcessDefinitionById(String processDefinitionId,
boolean activateProcessInstances,
Date activationDate);