zoukankan      html  css  js  c++  java
  • Activiti业务键(businessKey)

    问题:如何让业务对象和对应的流程 关联?

      发现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();
    List<Task> task = taskService.createTaskQuery().processInstanceBusinessKey("LeaveBill.1").list();

      

  • 相关阅读:
    IDEA git 切换分支
    java: Compilation failed: internal java compiler error
    平衡二叉树的定义
    flask的session问题以及闪现
    flask的自定义转换器,模板渲染以及请求与响应
    flask的简介:如何启动一个flask项目,flask(返回字符串,返回html,跳转路由,返回json),flask的配置文件,路由本质以及参数
    小程序的支付流程
    小程序后端如何解析wx.getUserInfo中的用户信息
    python3.6下载Crypto问题(转载)
    小程序的登入问题,普通权限认证和特殊权限的问题
  • 原文地址:https://www.cnblogs.com/cxyj/p/3893631.html
Copyright © 2011-2022 走看看