zoukankan      html  css  js  c++  java
  • activiti如何让业务对象和对应的流程关联

    如何让业务对象和对应的流程 关联?
      发现ProcessInstance 有个方法getBusinessKey()可以得到一个businessKey。
      ProcessInstance 对应数据库中的表act_ru_execution有个字段BUSINESS_KEY_对应类中的businessKey,这个字段在创建表时自动被设置为unique
    解决:
      1、保证流程的ID和业务对象的类名一致。例如:流程id为LeaveBill,我们的业务对象的类名也创建为LeaveBill。
      2、在流程启动的时候获取业务对象执行方法的时候传入businessKey,workflowService.startProcess(key,businessKey,vars);(这里vars为一些变量根据实际情况可有可无)businessKey 产生规则: className+“.”+objId
        
    public void startProcess(Long id) {        
        //1. 获取业务对象        
        LeaveBill bill = this.get(id);       
        if(bill!=null){           
        // 修改业务对象状态           
        bill.setState(1);
        // 请假单状态 0初始录入,1.开始审批,2为审批通过            
        this.update(bill);            
        //2. 添加流程变量(Map)            
        Map<String,Object> vars = new HashMap<>();           
        vars.put("inputUser", bill.getUser().getName());           
        // 添加变量来描述业务对象的信息            
        String classType =bill.getClass().getSimpleName();            
        vars.put("classType", classType);           
        vars.put("objId", bill.getId());            
        //3. 启动流程           
        // 获取流程定义key           
        String key = classType;           
       // 获取业务键 产生规则: className+“.”+objId           
        String businessKey = classType +"." + bill.getId();            
        this.workflowService.startProcess(key,businessKey,vars);       
       }    
        }
       3、根据以下方法就可以用taskId获取业务对象id
        
    public String getBusinessObjId(String taskId) {        
        //1  获取任务对象        
        Task task  =  taskService.createTaskQuery().taskId(taskId).singleResult();                
        //2  通过任务对象获取流程实例        
        ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();        
        //3 通过流程实例获取“业务键”      
               String businessKey = pi.getBusinessKey();        
        //4 拆分业务键,拆分成“业务对象名称”和“业务对象ID”的数组         
        // a=b  LeaveBill.1        
        String objId = null;        
        if(StringUtils.isNotBlank(businessKey)){            
        objId = businessKey.split("//.")[1];       
        }        
        return objId;    
        }
      4、根据业务键获取流程实例和任务
        
     ProcessInstance processInstance =runtimeService.createProcessInstanceQuery().processInstanceBusinessKey("LeaveBill.1").singleResult();
         Task task =taskService.createTaskQuery().processInstanceBusinessKey("LeaveBill.1").singleResult();

     

  • 相关阅读:
    VC连接MySql
    Vc数据库编程基础MySql数据库的表查询功能
    Vc数据库编程基础MySql数据库的表增删改查数据
    【Anroid】9.1 ListView相关类及其适配器
    【Android】8.4 让主题自适应不同的Android版本
    【Android】8.3 自定义主题
    【Android】8.2 动态选择和设置主题
    【Android】8.1 主题基本用法
    【Android】7.8 MyDemos项目的结构和主界面相关代码
    【Android】7.7 以后改为在Win10下开发了
  • 原文地址:https://www.cnblogs.com/zjBoy/p/7651571.html
Copyright © 2011-2022 走看看