Acitiviti7基本使用-3、流程实例挂起与激活

简介: Acitiviti7基本使用-3、流程实例挂起与激活

在实际场景中可能由于流程变更需要将当前运行的流程暂停而不是删除,流程暂停后将不能继续执

行。

一、全部流程挂起激活

流程定义为挂起状态,该流程定义将不允许启动新的流程实例,同时该流程定义下的所有的流程实例都将全部挂起暂停执行。

    /**
     * 全部流程挂起实例与激活
     */
    @Test
    public void test02() {
        //    获取ProcessEngine对象
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        //    获取RepositoryServie对象
        RepositoryService repositoryService = engine.getRepositoryService();
        //    查询流程定义的对象
        ProcessDefinition definition = repositoryService.createProcessDefinitionQuery()
                .processDefinitionKey("evection").list().get(0);
        //获取当前流程定义状态是否挂起
        boolean suspended = definition.isSuspended();
        String id = definition.getId();
        //    如果挂起就激活,如果激活就挂起
 
        if (suspended) { 
            // 挂起->激活流程
            repositoryService.activateProcessDefinitionById(id, true, null);
            System.out.println("流程定义:" + id + ",已激活");
        } else { 
            //激活->挂起流程
            repositoryService.suspendProcessDefinitionById(id, true, null);
            System.out.println("流程定义:" + id + ",已挂起");
        }
 
    }


二、单个实例挂起

操作流程实例对象,针对单个流程执行挂起操作,某个流程实例挂起则此流程不再继续执行,当前流程 定义的其他流程实例是不受干扰的。完成该流程实例的当前任务会抛异常。

    /**
     * 单个流程实例挂起与激活
     */
    @Test
    public void test03() {
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
 
        RuntimeService runtimeService = engine.getRuntimeService();
 
        ProcessInstance definition = runtimeService.createProcessInstanceQuery()
                .processInstanceId("22501").list().get(0);
        //获取当前流程定义状态是否挂起
        boolean suspended = definition.isSuspended();
        String id = definition.getId();
        //    如果挂起就激活,如果激活就挂起
        if (suspended) {
            //  挂起->激活流程
            runtimeService.activateProcessInstanceById(id);
            System.out.println("流程定义:" + id + ",已激活");
        } else {
            //激活->挂起流程
            runtimeService.suspendProcessInstanceById(id);
            System.out.println("流程定义:" + id + ",已挂起");
        }
    }

关键SQL

SELECT DISTINCT
  RES.*,
  P.KEY_ AS ProcessDefinitionKey,
  P.ID_ AS ProcessDefinitionId,
  P.NAME_ AS ProcessDefinitionName,
  P.VERSION_ AS ProcessDefinitionVersion,
  P.DEPLOYMENT_ID_ AS DeploymentId 
FROM
  ACT_RU_EXECUTION RES
  INNER JOIN ACT_RE_PROCDEF P ON RES.PROC_DEF_ID_ = P.ID_ 
WHERE
  RES.PARENT_ID_ IS NULL 
  AND RES.ID_ = ? 
  AND RES.PROC_INST_ID_ = ? 
ORDER BY
  RES.ID_ ASC 
  LIMIT ? OFFSET ?
 
 
UPDATE ACT_RU_EXECUTION 
SET REV_ = ?,
BUSINESS_KEY_ = ?,
PROC_DEF_ID_ = ?,
ACT_ID_ = ?,
IS_ACTIVE_ = ?,
IS_CONCURRENT_ = ?,
IS_SCOPE_ = ?,
IS_EVENT_SCOPE_ = ?,
IS_MI_ROOT_ = ?,
PARENT_ID_ = ?,
SUPER_EXEC_ = ?,
ROOT_PROC_INST_ID_ = ?,
SUSPENSION_STATE_ = ?,
NAME_ = ?,
IS_COUNT_ENABLED_ = ?,
EVT_SUBSCR_COUNT_ = ?,
TASK_COUNT_ = ?,
JOB_COUNT_ = ?,
TIMER_JOB_COUNT_ = ?,
SUSP_JOB_COUNT_ = ?,
DEADLETTER_JOB_COUNT_ = ?,
VAR_COUNT_ = ?,
ID_LINK_COUNT_ = ? 
WHERE
  ID_ = ? 
  AND REV_ = ?
 25001(String), 25001(String), 2147483647(Integer), 0(Integer)

目录
打赏
0
0
0
0
139
分享
相关文章
第六章 查看应用发布列表和状态以及卸载服务
第六章 查看应用发布列表和状态以及卸载服务
87 2
Airtest如何自动连接重启后的设备并继续执行自动化脚本呢?
Airtest如何自动连接重启后的设备并继续执行自动化脚本呢?
226 0
【JavaSE专栏76】三态和五态,线程的不同状态:新建、运行、状态、阻塞、等待、计时等待状态
【JavaSE专栏76】三态和五态,线程的不同状态:新建、运行、状态、阻塞、等待、计时等待状态
140 0
|
9月前
|
Flowable流程的挂起与激活详解
Flowable流程的挂起与激活详解
374 1
函数计算产品使用问题之应用每次重新部署,里面的函数之前配好的“运行时”和“层”都会恢复初始状态,该怎么办
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
10月前
|
Win10彻底关闭更新的三步操作
Win10彻底关闭更新的三步操作
63 0
Flowable 流程实例的挂起(暂停)与激活
Flowable 流程实例的挂起(暂停)与激活
Flowable 流程实例的挂起(暂停)与激活
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等