activiti 流程实例关联业务
/**更新请假状态,启动流程实例,让启动的流程实例关联业务*/ @Override public void saveStartProcess(WorkflowBean workflowBean) { //1:获取请假单ID,使用请假单ID,查询请假单的对象LeaveBill Long id = workflowBean.getId(); LeaveBill leaveBill = leaveBillDao.findLeaveBillById(id); //2:更新请假单的请假状态从0变成1(初始录入-->审核中) leaveBill.setState(1); //3:使用当前对象获取到流程定义的key(对象的名称就是流程定义的key) String key = leaveBill.getClass().getSimpleName(); /** * 4:从Session中获取当前任务的办理人,使用流程变量设置下一个任务的办理人 * inputUser是流程变量的名称, * 获取的办理人是流程变量的值 */ Map<String, Object> variables = new HashMap<String,Object>(); variables.put("inputUser", SessionContext.get().getName());//表示惟一用户 /** * 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); }
/** * 员工经理任务分配 * */ @SuppressWarnings("serial") public class ManagerTaskHandler implements TaskListener { @Override public void notify(DelegateTask delegateTask) { /**懒加载异常*/ // Employee employee = SessionContext.get(); // //设置个人任务的办理人 // delegateTask.setAssignee(employee.getManager().getName()); /**从新查询当前用户,再获取当前用户对应的领导*/ Employee employee = SessionContext.get(); //当前用户 String name = employee.getName(); //使用当前用户名查询用户的详细信息 //从web中获取spring容器 WebApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(ServletActionContext.getServletContext()); IEmployeeService employeeService = (IEmployeeService) ac.getBean("employeeService"); Employee emp = employeeService.findEmployeeByName(name); //设置个人任务的办理人 delegateTask.setAssignee(emp.getManager().getName()); } }
/** * 打开任务表单 */ public String viewTaskForm(){ //任务ID String taskId = workflowBean.getTaskId(); //获取任务表单中任务节点的url连接 String url = workflowService.findTaskFormKeyByTaskId(taskId); url += "?taskId="+taskId; ValueContext.putValueContext("url", url); return "viewTaskForm"; } /**使用任务ID,获取当前任务节点中对应的Form key中的连接的值*/ @Override public String findTaskFormKeyByTaskId(String taskId) { TaskFormData formData = formService.getTaskFormData(taskId); //获取Form key的值 String url = formData.getFormKey(); return url; }
// 准备表单数据 public String audit(){ //获取任务ID String taskId = workflowBean.getTaskId(); /**一:使用任务ID,查找请假单ID,从而获取请假单信息*/ LeaveBill leaveBill = workflowService.findLeaveBillByTaskId(taskId); ValueContext.putValueStack(leaveBill); /**二:已知任务ID,查询ProcessDefinitionEntiy对象,从而获取当前任务完成之后的连线名称,并放置到List<String>集合中*/ List<String> outcomeList = workflowService.findOutComeListByTaskId(taskId); ValueContext.putValueContext("outcomeList", outcomeList); /**三:查询所有历史审核人的审核信息,帮助当前人完成审核,返回List<Comment>*/ List<Comment> commentList = workflowService.findCommentByTaskId(taskId); ValueContext.putValueContext("commentList", commentList); return "taskForm"; } /**一:使用任务ID,查找请假单ID,从而获取请假单信息*/ @Override public LeaveBill findLeaveBillByTaskId(String taskId) { //1:使用任务ID,查询任务对象Task Task task = taskService.createTaskQuery()// .taskId(taskId)//使用任务ID查询 .singleResult(); //2:使用任务对象Task获取流程实例ID String processInstanceId = task.getProcessInstanceId(); //3:使用流程实例ID,查询正在执行的执行对象表,返回流程实例对象 ProcessInstance pi = runtimeService.createProcessInstanceQuery()// .processInstanceId(processInstanceId)//使用流程实例ID查询 .singleResult(); //4:使用流程实例对象获取BUSINESS_KEY String buniness_key = pi.getBusinessKey(); //5:获取BUSINESS_KEY对应的主键ID,使用主键ID,查询请假单对象(LeaveBill.1) String id = ""; if(StringUtils.isNotBlank(buniness_key)){ //截取字符串,取buniness_key小数点的第2个值 id = buniness_key.split("\\.")[1]; } //查询请假单对象 //使用hql语句:from LeaveBill o where o.id=1 LeaveBill leaveBill = leaveBillDao.findLeaveBillById(Long.parseLong(id)); return leaveBill; } /**二:已知任务ID,查询ProcessDefinitionEntiy对象,从而获取当前任务完成之后的连线名称,并放置到List<String>集合中*/ @Override public List<String> findOutComeListByTaskId(String taskId) { //返回存放连线的名称集合 List<String> list = new ArrayList<String>(); //1:使用任务ID,查询任务对象 Task task = taskService.createTaskQuery()// .taskId(taskId)//使用任务ID查询 .singleResult(); //2:获取流程定义ID String processDefinitionId = task.getProcessDefinitionId(); //3:查询ProcessDefinitionEntiy对象 ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(processDefinitionId); //使用任务对象Task获取流程实例ID String processInstanceId = task.getProcessInstanceId(); //使用流程实例ID,查询正在执行的执行对象表,返回流程实例对象 ProcessInstance pi = runtimeService.createProcessInstanceQuery()// .processInstanceId(processInstanceId)//使用流程实例ID查询 .singleResult(); //获取当前活动的id String activityId = pi.getActivityId(); //4:获取当前的活动 ActivityImpl activityImpl = processDefinitionEntity.findActivity(activityId); //5:获取当前活动完成之后连线的名称 List<PvmTransition> pvmList = activityImpl.getOutgoingTransitions(); if(pvmList!=null && pvmList.size()>0){ for(PvmTransition pvm:pvmList){ String name = (String) pvm.getProperty("name"); if(StringUtils.isNotBlank(name)){ list.add(name); } else{ list.add("默认提交"); } } } return list; } /**获取批注信息,传递的是当前任务ID,获取历史任务ID对应的批注*/ @Override public List<Comment> findCommentByTaskId(String taskId) { List<Comment> list = new ArrayList<Comment>(); //使用当前的任务ID,查询当前流程对应的历史任务ID //使用当前任务ID,获取当前任务对象 Task task = taskService.createTaskQuery()// .taskId(taskId)//使用任务ID查询 .singleResult(); //获取流程实例ID String processInstanceId = task.getProcessInstanceId(); // //使用流程实例ID,查询历史任务,获取历史任务对应的每个任务ID // List<HistoricTaskInstance> htiList = historyService.createHistoricTaskInstanceQuery()//历史任务表查询 // .processInstanceId(processInstanceId)//使用流程实例ID查询 // .list(); // //遍历集合,获取每个任务ID // if(htiList!=null && htiList.size()>0){ // for(HistoricTaskInstance hti:htiList){ // //任务ID // String htaskId = hti.getId(); // //获取批注信息 // List<Comment> taskList = taskService.getTaskComments(htaskId);//对用历史完成后的任务ID // list.addAll(taskList); // } // } list = taskService.getProcessInstanceComments(processInstanceId); return list; }
//获取当前活动的id 例如: <userTask id="usertask3" > 中的id

浙公网安备 33010602011771号