zoukankan      html  css  js  c++  java
  • (3)activiti流程的挂起和激活

    有时候,我们需要对一个已经执行的流程进行暂停,而不是删除它,这个时候就需要我们调用activiti暂停和激活的api来操作他们

      每启动一个流程实例,都会在该流程实例下产生相应的流程任务,处于1*多的关系,每次流程实例运行到某一个节点下,都会在当前任务表act_ru_task产生一个或者多个任务(一般情况是一个,出现分支会多个),

    结束一个任务我们可以看到当前运行的任务表act_ru_task会删除这个任务task,而在历史任务表act_hi_taskinst中(通过historyService)可以查询到刚才流程实例下的所有的task,

      从上述观察中,得出结论,获取当前的任务,可以从taskService和historyService都可以获取,但是我们查询当前任务都是从taskService中查询,因为里面任务执行完就会删掉,数据少,查询速度快,同样的道理,

    我们查询流程实例,也可以从runtimeService和historyService中查询,但是优先考虑runtimeService,除非查询历史流程实例

    (1)测试暂停流程实例执行步骤如下:

      1,通过流程定义的key或者id启动一个流程实例

      2,根据流程实例的id来挂起这个流程实例

      3,得到下一个节点的对应的任务的id,调用taskService来完成这个任务观察效果

        4,重新激活这个流程实例

      5,继续完成这个流程实例

    执行代码如下:

      1,流程实例的启动,我们已经在前面的代码中演示过,这里不做演示

      2,通过上面发起的流程实例的id挂起这个流程实例

    /**
         * 测试挂起一个流程实例
         */
        @Test
        public void testSuspendProcessInstance(){
            RuntimeService runtimeService = engine.getRuntimeService();
            
            String processInstanceId="1801";
            //根据一个流程实例的id挂起该流程实例
            runtimeService.suspendProcessInstanceById(processInstanceId);
            
        }

      3,任务的下一处理人来完成这个实例

    //完成一个流程
        @Test
        public void completeProcessInstance(){
            
            //任务的id,后期整合后会通过当前登录人身份查询到该用户的任务,然后获取到该id
            String taskId="1804";
            TaskService taskService = engine.getTaskService();
            //根据任务id完成该任务
            taskService.complete(taskId);
            
        }

      执行完报错:

      

      上面的信息说明无法完成一个已经被挂起的任务

      

      4,激活这个流程实例

      

    /**
         * 激活一个流程实例
         */
        @Test
        public void testActivateProcessInstance(){
            RuntimeService runtimeService = engine.getRuntimeService();
            
            String processInstanceId="1801";
            
            runtimeService.activateProcessInstanceById(processInstanceId);
        }

      5,重新完成这个任务,执行ok

    (2)测试暂停流程定义执行步骤如下:

    在程序中,我们需要暂停一个流程定义,停止所有的该流程定义下的流程实例,并且不允许发起这个流程定义的流程实例,那么我们就需要挂起这个流程定义

      1,启动一个流程实例(该流程定义未挂起前)

      2,挂起上面流程实例对应的流程定义

      3,完成上述流程实例的下一个任务节点(观察效果,是否会和流程实例挂起一样)

      

    执行代码如下:

      1,启动一个流程实例

      2,挂起这个流程实例对应的流程定义(这里可以通过流程定义的key和流程定义的id来挂起,我这里只用流程定义的key方便演示)

      

    @Test
        public void testSuspendProcessDefinition(){
            RepositoryService repositoryService = engine.getRepositoryService();
            
            String processDefinitionKey ="purchasingflow";
            //根据流程定义的key暂停一个流程定义
            repositoryService.suspendProcessDefinitionByKey(processDefinitionKey );
            
        }

      3,完成这个流程实例的下一个节点,通过taskService来结束下一个任务节点

      这时候,我们发现这个流程实例居然是可以继续执行的,并且可以执行到结束,带着这个疑问,我们再启动一个流程实例看看

      4,重新启动这个流程定义下的流程实例

      

      

      报错说不可以启动这个被挂起流程定义的流程实例

      怎么回事呢??

      我们又仔细的看了流程定义的挂起api,发现还有这么个api

    void suspendProcessDefinitionById(String processDefinitionId, boolean suspendProcessInstances, Date suspensionDate);
    void suspendProcessDefinitionByKey(String processDefinitionKey, boolean suspendProcessInstances, Date suspensionDate);

    参数分别是  processDefinitionId(processDefinitionKey):流程定义的id(key)

           suspendProcessInstances:是否级联挂起该流程定义下的流程实例

           suspensionDate:设置挂起这个流程定义的时间,如果不填写,则立即挂起

      到这里我们知道为什么挂起这个流程定义,为什么流程定义下的流程实例还可以继续运行了

      下面我们挂起这个流程定义,并且级联挂起该流程定义下的流程实例

      

    @Test
        public void testActivateProcessDefinitionCascade(){
            RepositoryService repositoryService = engine.getRepositoryService();
            
            String processDefinitionKey ="purchasingflow";
            //根据流程定义的key暂停一个流程定义,并且级联挂起该流程定义下的流程实例
            repositoryService.suspendProcessDefinitionByKey(processDefinitionKey, true, null);
            
        }

      这个时候,我们再继续运行已经发起的流程实例,发现已经运行不起来了!!!

      

      

      

      

      

      

      

      

      

      

      

  • 相关阅读:
    阅读《最后期限》有感(1)
    软件工程课程改进建议
    团队开发第二次冲刺第七天
    返回一个二维整数数组中最大联通子数组的和
    大道至简阅读笔记三
    大道至简阅读笔记二
    大道至简阅读笔记一
    团队冲刺阶段二第十次站立会议
    对软工课程的意见建议
    团队冲刺阶段二第九次站立会议
  • 原文地址:https://www.cnblogs.com/nfcm/p/6397275.html
Copyright © 2011-2022 走看看