OpenJWeb3.1中的簡易審批流設置介紹



OpenJWeb簡易審批流設置

 

 

    本文介紹在OpenJWeb平臺中如何進行簡易審批流的配置。用戶可自定義流程狀態位、審批流設置,在列表頁中生成審批按鈕,並執行審批操作。

一、前提條件

        用戶已經在openjweb平臺中生成了數據庫表、增刪改查頁面,見下圖:

 

此功能對應的數據庫表yk_user,對應的子系統yktxcms,列表頁和編輯頁分別對應:

D:\project\openjweb\webapps\WEB-INF\jsp\yktxcms\listYkUser.jspeditYkUser.jsp

 

二、增加流程狀態位定義

 

        流程狀態包括初始(00)、審批通過(01)、審批拒絕(02)、凍結3(03)

        找到下面的功能菜單:

        

       說明:00狀態系統已默認生成。可錄入其他狀態位,見下圖:

 

注意類屬性名使用系統默認的flowStatus,其他未填寫的字段可忽略。

填寫完成以後,演客空間有以下狀態字段:

 

下面定義審批流,打開左側菜單的業務流程設置:

 

需要定義以下幾種審批流:

00-01 審批通過  前置狀態:初始,後置狀態:審批通過

00-02 審批拒絕  前置狀態:初始,後置狀態:審批拒絕

01-03 凍結3天  前置狀態:審批通過,後置狀態:凍結3

03-01 取消凍結  前置狀態:凍結3天,後置狀態:審批通過

點業務流程設置界面的“增加”按鈕,見下圖:

 

 

 

字段說明:

狀態位字段名:統一爲flowStatus

前置狀態:審批操作前的flowStatus狀態位的值

結果狀態:審批操作後的flowStatus狀態位的值

動作碼:主要用於列表頁JS中傳遞動作參數。

動作名稱及頁面按鈕文字中文:按鈕顯示的名稱。

按鈕順序:在列表頁中的按鈕順序。

權限碼:設置權限碼。如果設置了權限碼,只有把此權限碼授權給指定的人或角色才能顯示相應的審批按鈕。

下面是設置好了流程狀態的審批流列表:

 

三、代碼修改

 

3.1 修改jsp文件

 

目前簡易審批流暫時沒有自動生成代碼,可參考以下過程修改。

打開D:\project\openjweb\webapps\WEB-INF\jsp\yktxcms\listYkUser.jsp,找到

${listButtonExpr} ,在這段字段串上一行插入${chkHtmlStr}

注意最好是用editplus打開文件,openjweb中生成的jsp文件絕大部分都是utf-8字符集。

 

3.2 修改action文件

打開D:\project\openjweb\src\java\com\yktx\action\YkUserAction.java

找到protected void initAction() 方法,在此方法末尾

this.setPageLoader(loader);

下面增加一行:

this.createSimpleFlowButton();//生成簡易審批流按鈕

然後將下面兩個方法的代碼加到YkUserAction.java代碼最後的}的上面:

 

private void createSimpleFlowButton()

{

logger.info("開始調用createSimpleFlowButton.............");

IDBSupportService service = (IDBSupportService)ServiceLocator.getBean(this.getDbService());

try

{

List flowList = service.findByHqlQuery("from org.openjweb.core.entity.WfStatusFlow where entityName='com.yktx.entity.YkUser' order by sortNo");

this.chkHtmlStr="";

if(flowList!=null&&flowList.size()>0)

{

CommUser tmpUser = null;

 

try

{

tmpUser = (CommUser) (SecurityContextHolder.getContext()

.getAuthentication().getPrincipal());//用於數據權限

}

catch(Exception ex)

{

//用戶超時

logger.info("用戶超時,無法獲得列表權限!");

}

for(int i=0;i<flowList.size();i++)

{

WfStatusFlow flowEnt = (WfStatusFlow)flowList.get(i);

String sTmp =  "";

String sAuthCode = flowEnt.getAuthCode();

//如果沒設置按鈕權限,則允許顯示按鈕

if(sAuthCode==null||sAuthCode.trim().length()==0||(sAuthCode!=null&&sAuthCode.trim().length()>0&&tmpUser!=null&&tmpUser.hasAuth(sAuthCode)))

{

//logger.info("sAuthCode:");

//logger.info(sAuthCode);

//sTmp = " <input  style=\" color:#000000; font-size:12px; width:61px; height:20px; padding:3px; border:0px;background-image:url("+request.getContextPath()+"/images/bt.gif)\"  name=\"\" type=\"button\" value=\""+flowEnt.getBtnTextCn()

//+"\" οnclick=\"doBatchWorkFlow('"+flowEnt.getActionCode()+"','"+flowEnt.getResultStatus()+"','"+flowEnt.getActionName()+"')\"/>\r\n";

sTmp = " <input  class=\"button\"  name=\"\" type=\"button\" value=\""+flowEnt.getBtnTextCn()

+"\" οnclick=\"doBatchWorkFlow('"+flowEnt.getActionCode()+"','"+flowEnt.getResultStatus()+"','"+flowEnt.getActionName()+"')\"/>\r\n";

}

else

{

//logger.info("other...........");

}

this.chkHtmlStr+=sTmp;

}

}

}

catch(Exception ex)

{

logger.error(ex.toString());

this.addActionError(ex.toString());

 

}

}

 

 

 

public String doBatchWorkFlow() throws DataAccessException, Exception  

{

this.initAction();

IDBSupportService service = (IDBSupportService)ServiceLocator.getBean(this.getDbService());

map = DropdownListBoxUtil.getListMaps(this.getDbService(),this.getEntityClassName(), request);

try

{

if(this.getSelectedIds()!=null&&this.getSelectedIds().length>0)//如果有被選擇記錄

{

//根據不同的流程狀態進行不同的處理,目前只測試發佈生成靜態頁面

//如果批量審批不需要工作流,可直接使用IDBSupportService

IYkUserService flowService = (IYkUserService)ServiceLocator.getBean("IYkUserService");

String sMess = "";

try

{

sMess = flowService.doBatchWorkFlow(this.getActCode(),this.entityClassName, this.getSelectedIds(), this.getDestFlowStatus(),request,this.getNameSpaceActionName());

if(sMess!=null&&sMess.trim().length()>0&&!sMess.equals("操作成功!"))

{

this.addActionError("操作失敗!");  //在頁面顯示錯誤信息!!----增加時間2010-08-12

return "error";

}

 

}

catch(Exception ex)

{

//this.addActionError(ex.toString());

this.addActionError("操作失敗!");

logger.error("審批流執行異常:"+ex.toString());

return "error";

}

}

else

{

logger.info("沒有被選擇的記錄!");

}

 

return this.gotoPage();//不跳到首頁,而是跳到當前頁

//return this.firstPage();

}

catch(Exception ex)

{

this.addActionError(ex.toString());

return "error";

}

}

 

注意上面代碼中的紅色字體:

com.yktx.entity.YkUser 是帶類完整路徑的類名。

IYkUserService  是yk_user表對應的接口,格式是I開頭,類名在中間,Service結尾。

如果是其他實體則按命名規則做相應的代碼修改。

 

保存後,編譯代碼(運行D:\project\build\01build-core.bat)。重啓tomcat後,再打開演客空間列表頁,見下圖,增加了流程審批按鈕:

 

上圖中增加了4個審批按鈕,對應4個審批流。可勾選多行記錄批量審批。

 

四 結語

 

(1)以後會把簡易審批流的代碼加到代碼生成器中,開發人員不需要再手工複製修改流程相關的代碼。

(2)通過openjweb平臺的簡易流程設置,開發人員不需要花大量精力來編寫簡易審批流程序代碼。

(3)Openjweb簡易審批流可通過權限碼授權的方式進行審批流權限控制。

 

 

OpenJWeb基礎平臺全部開源,購買一次性商用授權及法培訓服務請聯繫

QQ29803446 手機18600510596 王先生

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章