• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Y-wee
博客园    首页    新随笔    联系   管理     

Activiti businessKey 及流程激活与挂起

Activiti businessKey 及流程激活与挂起

在 activiti 实际应用时,查询流程实例列表时可能要显示出业务系统的一些相关信息,比如:查询当前运行的出差流程列表需要将出差单名称、出差天数等信息显示出来,出差天数等信息在业务系统中存在,而并没有在 activiti 数据库中存在,所以是无法通过 activiti 的 api 查询到出差天数等信息

Businesskey:业务标识,通常为业务表的主键,业务标识和流程实例一一对应,业务标识来源于业务系统,存储业务标识就是根据业务标识来关联查询业务系统的数据

在查询流程实例时,通过 businessKey(业务标识 )关联查询业务系统的出差单表,就可以查询出差天数等信息,eg:

   /**
     * 启动流程实例并添加businessKey
     */
    @Test
    public void addBusinessKey(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        RuntimeService runtimeService = processEngine.getRuntimeService();
	   // 启动流程实例同时指定业务标识businessKey
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("evection","1001");

        System.out.println("业务id=="+processInstance.getBusinessKey());
    }

流程激活与挂起

某些情况可能由于流程变更需要将当前运行的流程暂停而不是直接删除,流程暂停后将不会继续执行

/**
  * 全部流程实例挂起与激活
  */
@Test
public void SuspendAllProcessInstance(){
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    RepositoryService repositoryService = processEngine.getRepositoryService();
    ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().
        processDefinitionKey("evection").singleResult();
    // 当前流程定义的实例是否都为暂停状态
    boolean suspended = processDefinition.isSuspended();
    // 流程定义id
    String processDefinitionId = processDefinition.getId();

    if(suspended){
        // 如果是暂停状态,则激活(参数1:流程定义id,参数2:是否激活,参数3:激活时间)
        repositoryService.activateProcessDefinitionById(processDefinitionId, true, null);
        System.out.println("流程定义:"+processDefinitionId+",已激活");
    }else{
        // 如果是激活状态,则暂停(参数1:流程定义id,参数2:是否暂停,参数3:激活时间)
        repositoryService.suspendProcessDefinitionById(processDefinitionId, true, null);
        System.out.println("流程定义:"+processDefinitionId+",已挂起");
    }
}

操作流程实例对象,针对单个流程执行挂起操作,某个流程实例挂起则此流程不再继续执行,完成流程实例的当前任务将报异常

/**
  * 单个流程实例挂起与激活
  */
@Test
public void SuspendSingleProcessInstance(){
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    RuntimeService runtimeService = processEngine.getRuntimeService();
    ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().
        processInstanceId("22501").singleResult();
    // 当前流程实例是否为暂停状态
    boolean suspended = processInstance.isSuspended();
    // 流程定义id
    String processDefinitionId = processInstance.getId();

    if(suspended){
        // 如果是暂停状态,则执行激活操作
        runtimeService.activateProcessInstanceById(processDefinitionId);
        System.out.println("流程定义:"+processDefinitionId+",已激活");
    }else{
        // 如果是激活状态则暂停
        runtimeService.suspendProcessInstanceById( processDefinitionId);
        System.out.println("流程定义:"+processDefinitionId+",已挂起");
    }

}
记得快乐
posted @ 2022-07-21 20:07  Y-wee  阅读(809)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3