Activiti业务关联流程
来源:互联网 发布:淘宝评价雷锋侠 编辑:程序博客网 时间:2024/05/17 05:06
/** * 工作流开发的重点是:让流程关联业务,也就是说让流程实例关联业务数据 */@Overridepublic void saveStartProcess(WorkflowBean workflowBean) {//1:获取请假单ID,使用请假单ID,查询请假单的对象LeaveBillLong id = workflowBean.getId();LeaveBill leaveBill = leaveBillDao.findLeaveBillById(id);//2:更新请假单的请假状态从0变成1(初始录入-->审核中)leaveBill.setState(1);//3:使用当前对象获取到流程定义的key(对象的名称就是流程定义的key)System.out.println(leaveBill.getClass().getName());System.out.println(leaveBill.getClass().getSimpleName());System.out.println(leaveBill.getClass().getCanonicalName());String key = leaveBill.getClass().getSimpleName();/** * 4:从Session中获取当前任务的办理人, * 使用流程变量设置下一个任务的办理人 * inputUser是流程变量的名称, * 获取的办理人是流程变量的值 *//*runtimeService.startProcessInstanceByKey(key);流程图中的Assignee:${inputUser}是使用流程变量的方式动态设置任务办理人从Session中获取当前任务的办理人 使用流程变量设置下一个任务的办理人inputUser是流程变量的名称获取的办理人事流程变量的值使用流程定义key启动流程实例,同时设置流程变量runtimeService.startProcessInstanceByKey(key,variables);*/Map<String, Object> variables = new HashMap<String,Object>();variables.put("inputUser", SessionContext.get().getName());//表示惟一用户/** * 5:(1)使用流程变量设置字符串(格式:LeaveBill.id的形式), * 通过设置,让启动的流程(流程实例)关联业务 (2)使用正在执行对象表中的一个字段BUSINESS_KEY(Activiti提供的一个字段), 让启动的流程(流程实例)关联业务 格式:LeaveBill.id的形式(使用流程变量) *//* * 让流程关联业务 * 1.使用流程变量 * 方式一:使用一个LeaveBill类(javaBean)存放流程变量(与流程实例绑定) * javaBean 一定要实现 序列化接口 固定序列化版本ID * 方式二:使用一个字符串 * 字符串的格式 LeaveBill.ID * 在查询流程变量的时候,如果获取流程变量的值LeaveBill.1,使用1查询 * LeaveBill对象,获取当前申请的请假单的数据 * 2.使用正在执行对象表中的一个字段(Activiti提供的一个字段JBPM没有提供) * act_ru_execution表中的 BUSINESS_KEY 字段 * 将字符串存到该字段上 也可以实现让流程关联业务 *//** * 5: (1)使用流程变量设置字符串(格式:LeaveBill.id的形式),通过设置,让启动的流程(流程实例)关联业务 * (2)使用正在执行对象表中的一个字段BUSINESS_KEY(Activiti提供的一个字段),让启动的流程(流程实例)关联业务 */ //格式:LeaveBill.id的形式(使用流程变量)String objId = key+"."+id;variables.put("objId", objId);//6:使用流程定义的key,启动流程实例,同时设置流程变量,//同时向正在执行的执行对象表中的字段BUSINESS_KEY添加业务数据,同时让流程关联业务runtimeService.startProcessInstanceByKey(key,objId,variables);}
获取业务实体
/** * 使用任务id获取LeaveBill */@Overridepublic LeaveBill findLeaveBillByTaskId(String taskId) {Task task = taskService.createTaskQuery() .taskId(taskId) .singleResult();String processInstanceId = task.getProcessInstanceId();String objId = (String) taskService.getVariable(taskId, "objId"); ProcessInstance pi = runtimeService.createProcessInstanceQuery() .processInstanceId(processInstanceId) .singleResult();String buindess_key = pi.getBusinessKey();if(StringUtils.isNotEmpty(buindess_key)){//截取字符串 点 截取字符串的时候 需要转义 \\.String leaveBillId = buindess_key.split("\\.")[1];LeaveBill leaveBill = leaveBillDao.findLeaveBillById(Long.parseLong(leaveBillId));return leaveBill;}return null;}
runtimeService.createProcessInstanceQuery().processInstanceBusinessKey(processInstanceBusinessKey, processDefinitionKey)
建议数据库冗余设计:在业务表设计的时候添加一列:PROCESS_INSTANCE_ID varchar2(64),在流程启动之后把流程ID更新到业务表中,这样不管从业务还是流程都可以查询到对方!
0 0
- Activiti业务关联流程
- activiti 流程实例与业务关联
- Activiti学习资料(业务对象和流程关联测试)
- 项目整合Activiti关联业务(二)
- Activiti(工作流)如何关联业务表
- 【整合篇】Activiti业务与流程的整合
- 【整合篇】Activiti业务与流程的整合
- activiti怎么把业务对象和流程规则联系起来
- activiti流程和业务的关系(二)
- 【整合篇】Activiti业务与流程的整合
- activiti之节点监听器结合业务的使用(让业务和流程完全分离)
- 集成activiti-modeler 到 自己的业务系统(集成流程跟踪-完美支持IE)
- 【整合篇】Activiti业务与流程整合之查询(二)
- 【整合篇】Activiti业务与流程整合之查询(三)
- 【整合篇】Activiti业务与流程整合之查询(二)
- 【整合篇】Activiti业务与流程整合之查询(三)
- Activiti-5.18.0与springMvc项目集成和activiti-explorer单独部署Web项目并与业务数据库关联方法(AutoEE_V2实现方式)
- 18.activiti工作流-业务层面
- 类的静态方法去作为自己的工具类(系统工具交互的功能需求)
- FFMPEG详解
- oracle同时执行saveOrUpdate的操作
- 属性指示符的类型及作用
- SQL配置文件中常用的几种SQL语句
- Activiti业务关联流程
- 关于使用struts2实现基本的文件上传功能
- HTML/CSS margin
- 是时候弄清楚getExternalStorageDirectory()和getExternalFilesDir()的区别了
- -Dfile.encoding与Charset.defaultCharset
- python中的xml.dom的使用
- Struts2的Preparable接口
- WechatShortVideo
- LinkedHashMap