现在大量公司及机关单位都使用办公自动化系统,系统都集成了工作流引擎。但单单工作流引擎是不够满足业务需求的,就拿最基本的请假流程来说,需要保存请假人的姓名、请假时间和请假理由,工作流引擎并不好保存这些业务数据,需要建立业务表保存数据,于是一个显著的问题就是要将工作流与业务绑定。
通常的做法是将业务表中的id放在工作流实例中的businesskey中,于是一个工作流实例就与业务表中的一个元组建立一对一关系,即用businesskey可以查出当前流程执行到哪个task,通过实例中的businesskey可以查出业务表的数据。
在这个思想的指导下,流程的参与者就可以看到与自己相关的流程,并通过businesskey取出业务数据,方便下一步流程操作,可以看下面代码:
String username=user.getUserName(); List<Task> tasklist=taskService.createTaskQuery().taskCandidateOrAssigned(username).processDefinitionKey("WorkSupervision").list(); if(tasklist!=null && tasklist.size()>0){ for(Task task:tasklist){ String businesskey=activitiService.getBusinessKeyByTask(task); CriteriaQuery cq = new CriteriaQuery(TBWorkSupervision.class); cq.eq("id", businesskey); cq.eq("resultCheck", false); cq.add(); List<TBWorkSupervision> list=systemService.getListByCriteriaQuery(cq, false); if(list!=null&&list.size()>0){ TBWorkSupervision meet=list.get(0); meetinglist.add(meet); } } }
有时候公司还要求流程发起人可以看到流程,全程监控流程,协调流程的进行,于是查出的数据还要加上与发起人的相关的数据:
CriteriaQuery cq = new CriteriaQuery(TBWorkSupervision.class); cq.eq("creator", user); cq.eq("resultCheck", false); cq.add(); List<TBWorkSupervision> wsList=systemService.getListByCriteriaQuery(cq, false); if(wsList!=null&&wsList.size()>0){ // meetinglist.addAll(wsList); for(TBWorkSupervision ws:wsList){ if(!meetinglist.contains(ws)) meetinglist.add(ws); } }