二、審批流轉之待我審批
?
???????? 待我審批,查看數據庫中的任務記錄,那些分配給“我”(由“我”負責)的任務,便是待我審批的任務。
?
?
?
?
1. 待我審批
?
/** ? ? * 待我審批(我的任務列表) ? ? */ ? public ActionForward taskList(ActionMapping mapping, ActionForm form, ? ??????? HttpServletRequest request, HttpServletResponse response) ? ??????? throws Exception { ? ??? // 獲取當前頁碼 ? ??? int pageNum = RequestUtils. getIntParam (request, "pageNum" , 1); ? ??? // 獲取當前用戶 ? ??? User user = (User) request.getSession().getAttribute( "user" ); ? ??? // 當前用戶 未完成的 任務列表 ? ??? 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; ? ??? // 獲取待我審批的任務數量 ? ??? 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(); ? ??? // 獲取待我審批的任務列表 ? ??? 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(); ? ??? // 頁面中需要顯示表單實例信息,且僅需要任務實例的 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. 審批頁面
?
????????
?
/** ? ? * 審批頁面 ? ? */ ? public ActionForward approveUI(ActionMapping mapping, ActionForm form, ? ??????? HttpServletRequest request, HttpServletResponse response) ? ??????? throws Exception { ? ??? // 獲取表單實例 ID ? ??? Long formInstanceId = Long. parseLong (request ? ??????????? .getParameter( "formInstanceId" )); ? ??? // 獲取表單實例,表單實例包含審批信息 ? ??? 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 { ? ??? // 獲取表單數據 ? ??? ApproveInfoActionForm actionForm = (ApproveInfoActionForm) form; ? ??? FormInstance formInstance = formInstanceService .getById(actionForm ? ??????????? .getFormInstanceId()); ? ??? // 獲取當前用戶 ? ??? User user = (User) request.getSession().getAttribute( "user" ); ? ??? // 創建審批信息 ? ??? 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); ? ? ? ??? // 辦理任務:審批 ? ??? FormInstance formInstance = approveInfo.getFormInstance(); ? ??? TaskInstance ti = getJbpmContext().getTaskInstance(approveInfo.getTaskInstanceId()); ? ??? ProcessInstance pi = ti.getProcessInstance(); ? ??? // 如果未通過 ? ??? if (!approveInfo.isApproval()) { ? ??????? // 停止任務向下流轉 ? ??????? ti.setSignalling( false ); ? ??????? ti.start(); ? ??????? ti.end(); ? ??????? // 結束流程實例 ? ??????? pi.end(); ? ??????? // 設置流程狀態為 “ 未通過審批 ” ? ??????? formInstance.setStatus(FormInstance. STATUS_NOT_APPROVED ); ? ??? } ? ??? // 如果審批通過 ? ??? else { ? ??????? // 正常執行任務,向下流轉 ? ??????? ti.start(); ? ??????? ti.end(); ? ??????? // 如果流程已結束 , 就代表本次為最后一個審批 ? ??????? if (pi.hasEnded()) { ? ??????????? // 設置流程狀態為 “ 已通過審批 ” ? ??????????? formInstance.setStatus(FormInstance. STATUS_APPROVED ); ? ??????? } ? ??? } ? ??? // 需要手動更新流程數據(如果 FormInstance 的 lazy 屬性為 false 呢!) ? ??? getSession().update(formInstance); ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
?
?
OK ,待我審批完成!
?
?
?
三、表單查詢
?
???????? 這部分的內容有“我的申請”、“經我審批”和“所有表單”,其中涉及條件查詢在此就不一一總結了。不過這些模塊中有一個十分有趣的功能——“查看流程圖”。
?
?
?
???????? 在以前的工作中,我經涉及到圖片和畫板的應用開發。我的查看流程圖思路是將圖片畫到畫板上然后根據坐標信息( gpd.xml )畫出對應流程模塊的矩形,然后保存圖板圖,最后將圖片顯示到頁面。但湯老師的實現比較優雅,直接將流程圖顯示到頁面,然后向頁面中添加一個 div ,并設置 div 的坐標、尺寸和邊框顏色。
?
?
?
???????? 由此可見,我還需要一些工作經驗將這些技術熟練掌握!
?
?
?
???????? 通過 OA 項目的學習,使我知道應該如何學習下一個項目——《教育辦公系統》。希望自己能將這個系統做的更好!
?
?
?
???????? 加油!
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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