工作流与业务的绑定及工作流进行中的参与人的进程显示

时间:2021-02-03 04:12:43

    现在大量公司及机关单位都使用办公自动化系统,系统都集成了工作流引擎。但单单工作流引擎是不够满足业务需求的,就拿最基本的请假流程来说,需要保存请假人的姓名、请假时间和请假理由,工作流引擎并不好保存这些业务数据,需要建立业务表保存数据,于是一个显著的问题就是要将工作流与业务绑定。

    通常的做法是将业务表中的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);
			}
		}