二、審批流轉(zhuǎn)之待我審批
?
???????? 待我審批,查看數(shù)據(jù)庫(kù)中的任務(wù)記錄,那些分配給“我”(由“我”負(fù)責(zé))的任務(wù),便是待我審批的任務(wù)。
?
?
?
?
1. 待我審批
?
/** ? ? * 待我審批(我的任務(wù)列表) ? ? */ ? public ActionForward taskList(ActionMapping mapping, ActionForm form, ? ??????? HttpServletRequest request, HttpServletResponse response) ? ??????? throws Exception { ? ??? // 獲取當(dāng)前頁(yè)碼 ? ??? int pageNum = RequestUtils. getIntParam (request, "pageNum" , 1); ? ??? // 獲取當(dāng)前用戶 ? ??? User user = (User) request.getSession().getAttribute( "user" ); ? ??? // 當(dāng)前用戶 未完成的 任務(wù)列表 ? ??? PageView pageView = formInstanceService .getTaskPageView(user ? ??????????? .getEmployee(), pageNum); ? ??? request.setAttribute( "pageView" , pageView); ? ??? return mapping.findForward( "taskList" ); ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
????????
?
其中的“ formInstanceService .getTaskPageView ”如下:
?
// 查詢 TaskInfo 的列表 ? @SuppressWarnings ( "unchecked" ) ? public PageView getTaskPageView(Employee employee, int pageNum) { ? ??? int pageSize = 10; ? ??? // 獲取待我審批的任務(wù)數(shù)量 ? ??? int count = ((Number) getSession().createQuery( // ? ??????????? "SELECT COUNT(ti) FROM org.jbpm.taskmgmt.exe.TaskInstance ti WHERE actorId=? AND ti.end IS NULL" ) // ? ??????????? .setParameter(0, employee.getId().toString()) // ? ??????????? .uniqueResult()) // ? ??????????? .intValue(); ? ??? // 獲取待我審批的任務(wù)列表 ? ??? int firstResult = PageView. calcFirstResult (pageNum, pageSize); ? ??? List<TaskInstance> taskInstanceList = getSession().createQuery( // ? ??????????? "FROM org.jbpm.taskmgmt.exe.TaskInstance ti WHERE actorId=? AND ti.end IS NULL" ) // ? ??????????? .setParameter(0, employee.getId().toString()) // ? ??????????? .setFirstResult(firstResult) // ? ??????????? .setMaxResults(pageSize) // ? ??????????? .list(); ? ??? // 頁(yè)面中需要顯示表單實(shí)例信息,且僅需要任務(wù)實(shí)例的 ID ? ??? List<FormInstance> formInstanceList = new ArrayList<FormInstance>(); ? ??? for (TaskInstance ti : taskInstanceList) { ? ??????? FormInstance formInstance = (FormInstance) ti.getContextInstance().getVariable( "formInstance" ); ? ??????? formInstance.setCurrentTaskInstanceId(ti.getId()); ? ??????? formInstanceList.add(formInstance); ? ??? } ? ??? // 顯示 ? ??? return new PageView(pageNum, pageSize, count, formInstanceList); ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
?
?
2. 審批頁(yè)面
?
????????
?
/** ? ? * 審批頁(yè)面 ? ? */ ? public ActionForward approveUI(ActionMapping mapping, ActionForm form, ? ??????? HttpServletRequest request, HttpServletResponse response) ? ??????? throws Exception { ? ??? // 獲取表單實(shí)例 ID ? ??? Long formInstanceId = Long. parseLong (request ? ??????????? .getParameter( "formInstanceId" )); ? ??? // 獲取表單實(shí)例,表單實(shí)例包含審批信息 ? ??? FormInstance formInstance = formInstanceService .getById(formInstanceId); ? ??? request.setAttribute( "formInstance" , formInstance); ? ??? return mapping.findForward( "approveUI" ); ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
?
?
3. 審批
?
/** ? ? * 審批 ? ? */ ? public ActionForward approve(ActionMapping mapping, ActionForm form, ? ??????? HttpServletRequest request, HttpServletResponse response) ? ??????? throws Exception { ? ??? // 獲取表單數(shù)據(jù) ? ??? ApproveInfoActionForm actionForm = (ApproveInfoActionForm) form; ? ??? FormInstance formInstance = formInstanceService .getById(actionForm ? ??????????? .getFormInstanceId()); ? ??? // 獲取當(dāng)前用戶 ? ??? User user = (User) request.getSession().getAttribute( "user" ); ? ??? // 創(chuàng)建審批信息 ? ??? ApproveInfo approveInfo = new ApproveInfo(); ? ??? approveInfo.setApprover(user.getEmployee()); ? ??? approveInfo.setApproveTime( new Date()); ? ??? approveInfo.setApproval(actionForm.isApproval()); ? ??? approveInfo.setComment(actionForm.getComment()); ? ??? approveInfo.setTaskInstanceId(actionForm.getTaskInstanceId()); ? ??? approveInfo.setFormInstance(formInstance); ? ??? // 審批 ? ??? formInstanceService .approve(approveInfo); ? ??? return mapping.findForward( "toTaskList" ); ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
?
?
???????? 其中的“ formInstanceService .approve ”如下:
?
/** ? ? * 審批 ? ? */ ? public void approve(ApproveInfo approveInfo) { ? ??? // 保存審批信息 ? ??? getSession().save(approveInfo); ? ? ? ??? // 辦理任務(wù):審批 ? ??? FormInstance formInstance = approveInfo.getFormInstance(); ? ??? TaskInstance ti = getJbpmContext().getTaskInstance(approveInfo.getTaskInstanceId()); ? ??? ProcessInstance pi = ti.getProcessInstance(); ? ??? // 如果未通過(guò) ? ??? if (!approveInfo.isApproval()) { ? ??????? // 停止任務(wù)向下流轉(zhuǎn) ? ??????? ti.setSignalling( false ); ? ??????? ti.start(); ? ??????? ti.end(); ? ??????? // 結(jié)束流程實(shí)例 ? ??????? pi.end(); ? ??????? // 設(shè)置流程狀態(tài)為 “ 未通過(guò)審批 ” ? ??????? formInstance.setStatus(FormInstance. STATUS_NOT_APPROVED ); ? ??? } ? ??? // 如果審批通過(guò) ? ??? else { ? ??????? // 正常執(zhí)行任務(wù),向下流轉(zhuǎn) ? ??????? ti.start(); ? ??????? ti.end(); ? ??????? // 如果流程已結(jié)束 , 就代表本次為最后一個(gè)審批 ? ??????? if (pi.hasEnded()) { ? ??????????? // 設(shè)置流程狀態(tài)為 “ 已通過(guò)審批 ” ? ??????????? formInstance.setStatus(FormInstance. STATUS_APPROVED ); ? ??????? } ? ??? } ? ??? // 需要手動(dòng)更新流程數(shù)據(jù)(如果 FormInstance 的 lazy 屬性為 false 呢!) ? ??? getSession().update(formInstance); ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
?
?
OK ,待我審批完成!
?
?
?
三、表單查詢
?
???????? 這部分的內(nèi)容有“我的申請(qǐng)”、“經(jīng)我審批”和“所有表單”,其中涉及條件查詢?cè)诖司筒灰灰豢偨Y(jié)了。不過(guò)這些模塊中有一個(gè)十分有趣的功能——“查看流程圖”。
?
?
?
???????? 在以前的工作中,我經(jīng)涉及到圖片和畫(huà)板的應(yīng)用開(kāi)發(fā)。我的查看流程圖思路是將圖片畫(huà)到畫(huà)板上然后根據(jù)坐標(biāo)信息( gpd.xml )畫(huà)出對(duì)應(yīng)流程模塊的矩形,然后保存圖板圖,最后將圖片顯示到頁(yè)面。但湯老師的實(shí)現(xiàn)比較優(yōu)雅,直接將流程圖顯示到頁(yè)面,然后向頁(yè)面中添加一個(gè) div ,并設(shè)置 div 的坐標(biāo)、尺寸和邊框顏色。
?
?
?
???????? 由此可見(jiàn),我還需要一些工作經(jīng)驗(yàn)將這些技術(shù)熟練掌握!
?
?
?
???????? 通過(guò) OA 項(xiàng)目的學(xué)習(xí),使我知道應(yīng)該如何學(xué)習(xí)下一個(gè)項(xiàng)目——《教育辦公系統(tǒng)》。希望自己能將這個(gè)系統(tǒng)做的更好!
?
?
?
???????? 加油!
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
