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

  发现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();

  

最新文章

  1. 秀起来的coding
  2. java反射实现动态代理
  3. std::vector介绍
  4. 那些不好的Socket服务器设计
  5. iOS关于打包出错
  6. jQuery异步分页插件
  7. CURL超时处理
  8. iOS中的代理和Block
  9. webpack+react搭建环境
  10. ActiveMQ的运用
  11. 使用tkinter加载png,jpg
  12. 【JDBC 笔记】
  13. Fedora-Workstation-netinst-x86_64-27-1.6系统之无法使用中文解决办法
  14. Java 基础【19】代理
  15. 如何解决gerrit代码冲突
  16. C++ leetcode Longest Palindromic Substring
  17. Nginx多进程高并发、低时延、高可靠机制缓存代理中的应用
  18. redis哈希缓存数据表
  19. polarssl rsa &amp; aes 加密与解密
  20. GitHub Desktop离线安装包

热门文章

  1. LOJ #6538. 烷基计数 加强版 加强版(生成函数,burnside引理,多项式牛顿迭代)
  2. 执行SQL语句---SELECT
  3. Python 利用微信端口查看列车时刻表
  4. CodeForces 1166D Cute Sequences
  5. mybatis浅显认识
  6. &lt;爬虫实战&gt;豆瓣电影TOP250(三种解析方法)
  7. LeetCode 31. Next Permutation【Medium】
  8. axios 基本运用
  9. iOS开发系列-Lock
  10. Spring注解基础学习总结