zoukankan      html  css  js  c++  java
  • activiti 7 + springboot2(七) Activiti流程实例的运行过程

    流程部署完成后,每启动一次流程就是一个流程实例。

    (一)根据流程定义key启动流程实例

    ProcessInstance processInstance = runtimeServic.startProcessInstanceByKey("myProcess_1");

    每个执行是单独的流程实例,不同的实例之间不会相互干扰。

    在任务节点表ACT_RU_TASK生成任务实例数据。

    (二)启动流程实例的时候指定businesskey(业务标识)

    //第一个参数:是指流程定义key
    //第二个参数:业务标识businessKey
     ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess_1", "sn001");

    businesskey:业务标识,业务标识来源于业务系统。通常为业务表的主键,根据业务标识来关联查询业务系统的数据。

    启动流程实例时,指定的businesskey,就会在ACT_RU_EXECUTION #流程实例的执行表中存储businesskey

    (三)查询流程实例

     可以查看流程实例的状态,当前运行结点等信息。 

        /**
         * 查询指定流程的所有实例
         */
        @Test
        public void processInstanceQuery() {
            String processDefinitionKey = "myProcess_1";
            List<ProcessInstance> list = runtimeService.createProcessInstanceQuery().processDefinitionKey(processDefinitionKey).list();
            for (ProcessInstance instance : list) {
                System.out.println("流程实例id: " + instance.getProcessInstanceId());
                System.out.println("所属流程定义id: " + instance.getProcessDefinitionId());
                System.out.println("是否执行完成: " + instance.isEnded());
                System.out.println("是否暂停: " + instance.isSuspended());
                System.out.println(" 当 前 活 动 标 识 : " + instance.getActivityId());
            }
        }

    (四)删除已经部署成功的流程 

        /**
         * 删除已经部署的流程定义
         * delete from ACT_RE_DEPLOYMENT 流程部署信息表;
         * ACT_RE_PROCDEF 流程定义数据表;
         * ACT_GE_BYTEARRAY 二进制数据表;
         */
        @Test
        public void deleteProcessDefinition(){
            //执行删除流程定义  参数代表流程部署的id
            repositoryService.deleteDeployment("b10a151b-3366-11ea-bc18-30b49ec7161f");
        }

     1.当我们正在执行的这一套流程没有完全审批结束的时候,此时如果要删除流程定义信息就会失败。

    2.如果要求强制删除,可以使用repositoryService.deleteDeployment("myProcess_1:1:f482ce07-35bf-11ea-b325-30b49ec7161f",true);

    参数true代表级联删除,此时就会先删除没有完成的流程结点,最后就可以删除流程定义信息 false的值代表不级联

     (五)删除流程实例

     当前流程实例没有完全结束的时候,删除流程实例就会失败

        /**
         * 删除流程实例
         */
        @Test
        public void deleteProcessInstance(){
            String processInstanceId = "80a5703b-35c0-11ea-aa1a-30b49ec7161f";
    
            //当前流程实例没有完全结束的时候,删除流程实例就会失败
            runtimeService.deleteProcessInstance(processInstanceId,"删除原因");
        }

     执行删除部分SQL如下  :

    1。 ACT_RU_TASK 运行时任务节点表
      delete from ACT_RU_TASK where ID_ = ? and REV_ = ?  

        2。 ACT_RU_IDENTITYLINK 运行时流程人员表,主要存储任务节点与参与者的相关信息   

    delete from ACT_RU_IDENTITYLINK where ID_ = ?  

       3。 ACT_RU_EXECUTION 运行时流程执行实例表 

    delete from ACT_RU_EXECUTION where ID_ = ? and REV_ = ?

    执行更新部分SQL如下:

       1。 ACT_HI_PROCINST 历史流程实例表  

    update ACT_HI_PROCINST set PROC_DEF_ID_ = ?, START_TIME_ = ?,  END_TIME_ = ?, DURATION_ = ?, END_ACT_ID_ = ?, DELETE_REASON_ = ?  where ID_ = ?  

       2。 ACT_HI_ACTINST 历史节点表  

    update ACT_HI_ACTINST set EXECUTION_ID_ = ?, ASSIGNEE_ = ?, END_TIME_   = ?, DURATION_ = ? where ID_ = ?  

       3。 ACT_HI_TASKINST 历史任务实例表   

    update ACT_HI_TASKINST set EXECUTION_ID_ = ?, NAME_ = ?,   PARENT_TASK_ID_ = ?, DESCRIPTION_ = ?, OWNER_ = ?, ASSIGNEE_ = ?,   CLAIM_TIME_ = ?, END_TIME_ = ?, DURATION_ = ?, DELETE_REASON_ = ?,   TASK_DEF_KEY_ = ?, FORM_KEY_ = ?, PRIORITY_ = ?, DUE_DATE_ = ? where   ID_ = ?  

    (六)操作流程挂起、激活

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

        /**
         * 操作流程的挂起、激活
         */
        @Test
        public void activateProcessDefinitionById(){
            //查询流程定义对象
            ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey("myProcess_1").singleResult();
            //当前流程定义的实例是否都为暂停状态
            boolean suspended = processDefinition.isSuspended();
    
            String processDefinitionId = processDefinition.getId();
    
            if(suspended){
                //挂起状态则激活
                repositoryService.activateProcessDefinitionById(processDefinitionId,true,new Date());
                System.out.println("流程定义:"+processDefinitionId+"激活");
            }else{
                //激活状态则挂起
                repositoryService.suspendProcessDefinitionById(processDefinitionId,true,new Date());
                System.out.println("流程定义:"+processDefinitionId+"挂起");
            }
        }

    (七)单个流程实例的挂起,激活 

        /**
         * 单个流程实例的挂起,激活
         */
        @Test
        public void activateProcessInstanceById(){
            //查询流程实例对象
            ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId("80a5703b-35c0-11ea-aa1a-30b49ec7161f").singleResult();
    
            //当前流程定义的实例是否都为暂停状态
            boolean suspended = processInstance.isSuspended();
    
            String processInstanceId = processInstance.getId();
            if(suspended){
                //激活
                runtimeService.activateProcessInstanceById(processInstanceId);
                System.out.println("流程:"+processInstanceId+"激活");
            }else{
                //挂起
                runtimeService.suspendProcessInstanceById(processInstanceId);
                System.out.println("流程:"+processInstanceId+"挂起");
            }
        }

     (八)实例任务的执行

        /**
         * 完成任务
         */
        @Test
        public void completeTask(){
            //任务ID
            String taskId = "967465fe-3367-11ea-a057-30b49ec7161f";
            taskService.complete(taskId);
            System.out.println("完成任务:任务ID:"+taskId);
        }

    当流程实例的所有任务都终止后,流程实例也就结束了;

    (九)设置流程实例的启动者

            //设置当前用户id,启动流程会读取这个信息,对应processInstance.getStartUserId()
            Authentication.setAuthenticatedUserId(String.valueOf(user.getId()));
    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(pd.getKey());
    System.out.println("实例Id:"+processInstance.getId());
    System.out.println("StartUserId:"+processInstance.getStartUserId());

     打开act_hi_procinst表,看到该记录的START_USER_ID_字段记录了设置的用户id

    源码下载  https://download.csdn.net/download/zsg88/12100238

  • 相关阅读:
    【ARM-Linux开发】Linux下查看机器的CPU负载
    【ARM-Linux开发】Linux下查看机器的CPU负载
    【ARM-Linux开发】ARM7 ARM9 ARM Cortex M3 M4 有什么区别
    【ARM-Linux开发】ARM7 ARM9 ARM Cortex M3 M4 有什么区别
    【miscellaneous】使用Google语音识别引擎(Google Speech API)[3月5日修改]
    【miscellaneous】使用Google语音识别引擎(Google Speech API)[3月5日修改]
    【miscellaneous】语音识别工具箱综述和产品介绍
    【miscellaneous】语音识别工具箱综述和产品介绍
    【FFMPEG】【ARM-Linux开发】 ffmpeg 静态库使用,undefined reference错误
    【CDN】海外免费加速CDN:Incapsula,CloudFare
  • 原文地址:https://www.cnblogs.com/zsg88/p/12175805.html
Copyright © 2011-2022 走看看