问题:如何让业务对象和对应的流程关联?
2017-06-21 11:10
190 查看
发现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
3、根据以下方法就可以用taskId获取业务对象id
根据业务键获取流程实例和任务
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; }
根据业务键获取流程实例和任务
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceBusinessKey("LeaveBill.1").singleResult(); Task task = taskService.createTaskQuery().processInstanceBusinessKey("LeaveBill.1").singleResult();
相关文章推荐
- activiti如何让业务对象和对应的流程关联
- 知道 BAPI 函数,如何查找其对应的业务对象?【转载】
- 知道 BAPI 函数,如何查找其对应的业务对象?
- Activiti学习资料(业务对象和流程关联测试)
- 讨论一个问题:对于复杂的业务流程Sharepoint如何实现?
- 如何解决引用对象时,必须加所有者(owner)的问题
- 如何解决引用对象时,必须加所有者(owner)的问题
- 如何解决引用对象时,必须加所有者(owner)的问题
- 如何解决引用对象时,必须加所有者(owner)的问题
- Jbpm流程如何实现“会签”的问题
- 如何应付表数据过大的查询问题?(如何尽量避免大表关联) (转载)
- 如何获取Agile PLM Business Object 对应Agile对象的属性?
- 如何解决引用对象时,必须加所有者(owner)的问题
- CIO如何优化业务流程 事半功倍
- 如何接管SBO系统的内置业务流程
- 如何应付表数据过大的查询问题?(如何尽量避免大表关联)
- 如何解决引用对象时,必须加所有者(owner)的问题
- 如何解决引用对象时,必须加所有者(owner)的问题
- W3wp.exe内存占用问题以及如何查看一个网站对应的w3wp.exe(转)
- 【问题】如何获得报表中某对象的值与程序进行交互?