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)

目录
相关文章
|
8天前
|
Java
Flowable流程的挂起与激活详解
Flowable流程的挂起与激活详解
13 1
你的应用进入了中断状态,但无任何代码显示,因为所有线程之前都在执行外部代码
你的应用进入了中断状态,但无任何代码显示,因为所有线程之前都在执行外部代码
2564 0
你的应用进入了中断状态,但无任何代码显示,因为所有线程之前都在执行外部代码
|
11月前
|
缓存 Java 数据库连接
架构系列——线程实现方式到底是4种还是2种?(附带线程生命周期)
架构系列——线程实现方式到底是4种还是2种?(附带线程生命周期)
Flowable 流程实例的挂起(暂停)与激活
Flowable 流程实例的挂起(暂停)与激活
Flowable 流程实例的挂起(暂停)与激活
|
SQL 存储 Java
Flowable 已经执行完毕的流程去哪找?
Flowable 已经执行完毕的流程去哪找?
Flowable 已经执行完毕的流程去哪找?
|
数据库
挂起和激活流程实例
挂起和激活流程实例
让程序只运行一个实例的简单实用的方法  
让程序只运行一个实例的简单实用的方法  
on方法多次绑定会多次执行的解决方法
on方法多次绑定会多次执行的解决方法
107 0
|
Java 程序员 调度
线程的创建方式,状态周期管理
进程是计算机中的程序,关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
109 0
线程的创建方式,状态周期管理
|
物联网 Linux 开发者
注册线程清理函数|学习笔记
快速学习注册线程清理函数
89 0

热门文章

最新文章