/** * 得到活动定义 * * @return 活动定义 */ public ActivityDef getDefine() { if (this.define != null) { return this.define; } // 如果为空重新装在,根据流程定义id得到流程定义 ProcessDef pDef = this.getProcess().getDefine(); if (pDef == null) { throw new RuntimeException("活动实例找不到流程定义"); } return pDef.getActivity(this.defid); }
/** 结束活动 */ public synchronized void finish( Session session, String personExpression, String username, String userid) throws Exception { // 解析传递过来的对象属性 JSONArray array = new JSONArray(personExpression); JSONObject firstObj = array.getJSONObject(0); final String data = firstObj.getString("data"); JSONObject dataObj = new JSONObject(data); // 把前台传过来的,活动对应的人员,转换成json串 state = "结束"; // 设置完成人,完成时间 this.setPerson(username); this.setUserid(userid); this.setFinishTime(new Date()); // 根据每个转移创建任务和活动 ProcessDef procDef = ProcessDefManager.getInstance().getProcessDef(processName); ActivityDef actDef = procDef.getActivity(defid); for (DiversionDef divDef : actDef.getSplits()) { ActivityDef tailDef = divDef.getTail(); // 给流程中的变量赋值 this.process.putVar(dataObj); // 如果不满足表达式条件,继续下一个 String expression = divDef.getExpression(); if (expression != null && !expression.equals("") && !this.process.getExpressionValue(expression)) { continue; } // 根据人员表达式,产生人员对照表 String exp = tailDef.getPersonExpression(); if (dataObj.has(tailDef.getName())) { String pExp = dataObj.getString(tailDef.getName()); exp = pExp; } PersonService.Run(exp, session); ActivityInstance actIns = new ActivityInstance(tailDef, process, exp, username, userid, this); session.save(actIns); } session.update(this); }