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)

相关文章
|
数据库
挂起和激活流程实例
挂起和激活流程实例
Flowable 流程实例的挂起(暂停)与激活
Flowable 流程实例的挂起(暂停)与激活
Flowable 流程实例的挂起(暂停)与激活
|
8月前
|
Java
Flowable流程的挂起与激活详解
Flowable流程的挂起与激活详解
358 1
|
安全 Java
【JavaSE专栏76】三态和五态,线程的不同状态:新建、运行、状态、阻塞、等待、计时等待状态
【JavaSE专栏76】三态和五态,线程的不同状态:新建、运行、状态、阻塞、等待、计时等待状态
134 0
|
Android开发 安全 消息中间件
创建后台任务的两种代码模式
创建后台任务的两种代码模式 后台任务是每个App都需要的一些行为,毕竟主线程是大爷,拖不起,伤不起,脏活累活都只能在不见天日的后台去做。
1127 0
|
机器学习/深度学习
DNN4.3.3的版本开发的模块.没登陆DNN的情况下,按钮的事件有时候执行,有时候怎么点都不执行
Q:想问一下,我用DNN4.3.3的版本开发的模块. 为什么我在没登陆DNN的情况下,按钮的事件有时候执行,有时候怎么点都不执行啊. A:清空一下Cache就会正常
556 0
|
iOS开发
将ios代码在后台(子线程)执行的两种简单方式
a.使用gcd    //切换到线程中执行             dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{             ...
1571 0
|
缓存 数据库
项目启动时执行指定任务如何实现?
项目启动时执行指定任务如何实现?
项目启动时执行指定任务如何实现?

热门文章

最新文章