博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Activiti业务键(businessKey)
阅读量:6449 次
发布时间:2019-06-23

本文共 2180 字,大约阅读时间需要 7 分钟。

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

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

 

 

 

 

  

转载于:https://www.cnblogs.com/cxyj/p/3893631.html

你可能感兴趣的文章
angular-bootstrap ui-date组件问题总结
查看>>
理解Javascript参数中的arguments对象
查看>>
p2:千行代码入门python
查看>>
bzoj1106[POI2007]立方体大作战tet*
查看>>
解决:Java调用.net的webService产生“服务器未能识别 HTTP 标头 SOAPAction 的值”错误...
查看>>
spring boot configuration annotation processor not found in classpath问题解决
查看>>
【转】正则基础之——神奇的转义
查看>>
团队项目测试报告与用户反馈
查看>>
MyBatis(1)——快速入门
查看>>
对软件工程课程的期望
查看>>
CPU高问题排查
查看>>
Mysql中文字符串提取datetime
查看>>
CentOS访问Windows共享文件夹的方法
查看>>
IOS 与ANDROID框架及应用开发模式对比一
查看>>
由中序遍历和后序遍历求前序遍历
查看>>
JQUERY Uploadify 3.1 C#使用案例
查看>>
coursera 北京大学 程序设计与算法 专项课程 完美覆盖
查看>>
firewall 端口转发
查看>>
wndows make images
查看>>
FS系统开发设计(思维导图)
查看>>