




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、 擴展項開發(fā)手冊功能開發(fā)說明書擴展項開發(fā) V1.0.20151109北京東華厚盾軟件有限公司BeiJing DHC Supporter Software Tech.Co.,Ltd目錄第1章.組件信息11.1.核心組件11.2.依賴公司組件11.3.依賴第三方1第2章.關鍵技術與實現(xiàn)22.1.對外公開接口22.2.關鍵技術點22.2.1.擴展項控件實現(xiàn)方式22.2.2.擴展項標簽解析2第3章.涉及數(shù)據(jù)庫表53.1.業(yè)務表53.2.其他關聯(lián)表5第4章.主要功能64.1.公開服務(擴展項在各模塊的應用)64.1.1.前臺服務64.1.2.后臺服務74.2.定義導航頁面可用業(yè)務類型94.3.啟用/停用
2、擴展項104.4.獲取擴展項控件展示內(nèi)容104.5.保存生成擴展項124.6.獲取擴展項定義144.7.添加擴展項支持14第5章.工作流開發(fā)165.1.Event Listener及流程變量165.2.繪制流程圖165.3.其他16第6章.其它16版本修訂說明修訂人審核人修訂時間修訂內(nèi)容潘小濱2015/06/11新增李剛2015/07/20補充關鍵技術點及主要功能李剛2015/09/10補充新業(yè)務類型添加擴展項支持的說明李剛2015/10/21添加擴展項依賴資源文件引入標簽李剛2015/11/13添加彈窗單選、彈窗多選、數(shù)字輸入框依賴資源標簽說明第1章. 組件信息1.1. 核心組件組 件SUP
3、P_EXTEND_ATTRIBUTE組件名稱擴展項管理組件前臺代碼位置bm/extend_attribute/后臺代碼位置com.supporter.prj.extend_attribute說 明1.2. 依賴公司組件名稱(英文)名稱(中文)說明supp_bm_exec_service執(zhí)行控制公共接口組件該組件包含了執(zhí)行控制各模塊的公共接口,用于組件之間能夠通過調用接口的方式實現(xiàn)某些功能,達到組件之間解耦的目的。supp_bm_exec_support執(zhí)行控制支撐組件對列表頁面的查詢方法進行了封裝,加入了頁面通用驗證器等,可簡化某些操作需要編寫的代碼等作用。supp_bm_exec_util執(zhí)
4、行控制工具組件調用了該組件中對時間、數(shù)字格式化相關的工具類。supp_bm_exec_comp執(zhí)行控制通用組件組件包含公共的變量、方法及功能,提高代碼的利用率,并保證某些公共信息的統(tǒng)一。1.3. 依賴第三方名稱(英文)名稱(中文)說明第2章. 關鍵技術與實現(xiàn)2.1. 對外公開接口接口說明IExtendAttributeBusinessService擴展項管理外部公開服務類.2.2. 關鍵技術點2.2.1. 擴展項控件實現(xiàn)方式擴展項控件實現(xiàn)方式1) 實現(xiàn)AbstractUIWidgetGenerator類2) 在碼表中配置相關的參數(shù):類的路徑,控件名稱,控件類型3) 新建擴展項時選擇對應的 控件
5、類型即可4) 該接口的處理方式使用了 java的反射機制來查找對應的控件的實現(xiàn)類:IUIWidgetGenerater uiWidget = (IUIWidgetGenerater) Class.forName(widgetDefinition.getWidgetGeneratorClass().newInstance();2.2.2. 擴展項標簽解析擴展項標簽com.supporter.prj.extend_attribute.tag. ExtendAttributeTag/* * 擴展項顯示自定義標簽. * <pre> * 為業(yè)務功能(如借款、報銷等)提供便捷統(tǒng)一的顯示擴展項的
6、接口 * </pre> * author 潘小濱 * since 5.8 * */public class ExtendAttributeTag extends TagSupport ./* * 拼接顯示在前臺的HTML. * * return 前臺展示的網(wǎng)頁信息 */private String generateWidgetHtmlString() /獲取當前業(yè)務的可用擴展項List < IEAWidgetDefinition > widgetDefinitions = null;Map < String, Object > values = getExt
7、endAttributeBusinessService().findExtendAttributeValue(getBmYear(),getInnerName(), getBusiId();/當控制類型為維度控制類型時,及不需要分配擴展項if (getControlType() != null && !"".equals(getControlType() && getControlType().equals(ExtendAttributeConstant.EXTEND_ATTRIBUTE_CONTROLTYPE_DIMENSION) widg
8、etDefinitions = getExtendAttributeBusinessService().getEAWidgetDefinitionsByBusiness(getBmYear(),getInnerName();else if(!CommonUtil.isNullOrEmpty(values.get(ExtendAttributeConstant.CREATE_BY_ID) Person person = EIPService.getEmpService().getEmp(String) values.get(ExtendAttributeConstant.CREATE_BY_ID
9、);user = EIPService.getSecurityService().getUserProfile(person);/獨立核算主體的ID(部分頁面可以將選擇的獨立核算主體的參數(shù)傳過來,用來更細粒度的權限過濾).if (CommonUtil.isNullOrEmpty(budgetDeptId) widgetDefinitions = getExtendAttributeBusinessService().getEAWidgetDefinitionsByBusiness(getBmYear(), user, getInnerName(); else if (!CommonUtil.i
10、sNullOrEmpty(budgetDeptId) widgetDefinitions = getExtendAttributeBusinessService().getEAWidgetDefinitionsByBudgetDeptId(getBmYear(), budgetDeptId, getInnerName(); /如果沒有配置擴展項,將直接返回空HTML串if (widgetDefinitions.size() = 0) return ""StringBuilder widgetHtml = new StringBuilder();if (this.getDis
11、playPanel() widgetHtml.append("<div class="panel-header" style="border-top:1;">n").append("擴展項信息n").append("</div>n").append("<div class="panel-body">n");StringBuilder javaScripts = new StringBuilder("<sc
12、ript type='text/javascript'>n");widgetHtml.append("<table border='0' width='100%'>n");doSetWidgetHtmlCode(user, widgetDefinitions, values, widgetHtml, javaScripts);widgetHtml.append("n</table>n").append(getDisplayPanel() ? "n</d
13、iv>" : "");javaScripts.append("n</script>");widgetHtml.append(javaScripts);return widgetHtml.toString();/* * 重新封裝控件的HTML代碼. * * param user 當前帳號 * param extendAttributeDefinitions 擴展項定義 * param values 擴展項數(shù)據(jù)值 * param widgetHtml 控件HTML代碼字符串 * param javaScripts 控件JavaSc
14、ript腳本字符串 */private void doSetWidgetHtmlCode(UserProfile user, List < IEAWidgetDefinition > extendAttributeDefinitions,Map < String, Object > values, StringBuilder widgetHtml, StringBuilder javaScripts)/根據(jù)擴展項定義,生成擴展項控件(一般指HTML前臺控件)for (IEAWidgetDefinition widgetDefinition : extendAttribu
15、teDefinitions) .IUIWidgetGenerater uiWidget = (IUIWidgetGenerater) Class.forName(widgetDefinition.getWidgetGeneratorClass().newInstance();boolean editable = "T".equals(widgetDefinition.getEditabled();/構建HTMLString thisWidgetHtml = uiWidget.generate(getBmYear(), user, contextPath, getEaPref
16、ix(), editable, operationType, widgetDefinition, values);/構建JSString thisWidgetJs = uiWidget.generateJavaScripes(getEaPrefix(), readOnly,widgetDefinition);.擴展項標簽com.supporter.prj.extend_attribute.tag. ExtendAttributeCommonTag/* * 擴展項顯示自定義標簽. * <pre> * 為業(yè)務功能(如借款、報銷等)提供便捷統(tǒng)一的顯示擴展項的接口 * </pre&g
17、t; * author 潘小濱 * since 5.8 * */public class ExtendAttributeCommonTag extends TagSupport ./* * 輸出當前模塊可用擴展項信息及對應的值. * * see javax.servlet.jsp.tagext.TagSupport#doStartTag() */Overridepublic int doStartTag() throws JspException try pageContext.getOut().println(generateHtml(); catch (Exception e) XLogg
18、er.getLogger().error("引用擴展項依賴資源文件出錯:", e); return EVAL_BODY_INCLUDE;private String generateHtml() StringBuffer sb = new StringBuffer();/應用名稱String appName = (HttpServletRequest) pageContext.getRequest().getContextPath();/base路徑String basepath = pageContext.getRequest().getScheme()+ ":
19、/" + pageContext.getRequest().getServerName()+ ":" + pageContext.getRequest().getServerPort() + appName + "/"sb.append("<link rel="stylesheet" type="text/css" href="").append(basepath).append("/bm/extend_attribute/css/extend_attribu
20、te.css" />");sb.append("<script type="text/javascript" src="").append(basepath).append("/common/json2.js" charset="UTF-8"></script>n");sb.append("<script type="text/javascript" src="").append(basep
21、ath).append("/bm/common/js/supp.core.js" charset="UTF-8"></script>n");sb.append("<script type="text/javascript" src="").append(basepath).append("/bm/extend_attribute/js/supp.bm.extend_attribute.js" charset="UTF-8">&
22、lt;/script>n");sb.append("<script type="text/javascript" src="").append(basepath).append("/bm/common/bm_budget_ui_widget.js" charset="UTF-8"></script>n");sb.append("<script type="text/javascript" >");sb.a
23、ppend("$SuppExtendAttribute.bmYear='");sb.append(bmYear);sb.append("'$SuppExtendAttribute.innerName='");sb.append(null2Blank(innerName);sb.append("'$SuppExtendAttribute.operationType='");sb.append(null2Blank(operationType);sb.append("'$SuppE
24、xtendAttribute.busiId='");sb.append(null2Blank(busiId);sb.append("'$SuppExtendAttribute.budgetDeptId='");sb.append(null2Blank(budgetDeptId);sb.append("'$SuppExtendAttribute.controlType='");sb.append(null2Blank(controlType);sb.append("'$SuppExtend
25、Attribute.eaPrefix='");sb.append(null2Blank(eaPrefix);sb.append("'</script>n");return sb.toString();.第3章. 涉及數(shù)據(jù)庫表3.1. 業(yè)務表表名(中文)表名(英文)說明擴展項定義表BM_YEAR.EA_WIDGET_DEFINITION保存擴展項定義的基本信息擴展項權限分配表BM_YEAR.EA_WIDGET_ALLOT保存擴展項權限的分配信息擴展項權限分配明細表BM_YEAR. EA_WIDGET_ALLOT_RECORD保存擴展項權限
26、的分配明細信息業(yè)務類型_EAV表BM_YEAR. 業(yè)務類型_EAV保存對應業(yè)務類型的擴展項的數(shù)據(jù)3.2. 其他關聯(lián)表表名(中文)表名(英文)說明第4章. 主要功能以下添加方式基于標準產(chǎn)品5.8環(huán)境,低版本或已做過個性化開發(fā)的項目請有選擇性參考進行。4.1. 公開服務(擴展項在各模塊的應用)4.1.1. 前臺服務前臺服務1)在jsp頁面中添加標簽:<% taglib prefix="ea" uri=" %>2)在head標簽內(nèi)引入擴展項資源引用標簽:<ea:extendAttributeCommon bmYear="$bmYear&quo
27、t; innerName="BM_EXEC_EXTRA" operationType="U"busiId="$execExtra.extraId"displayPanel="true" />3)在想要添加擴展項的位置添加標簽:<%- 擴展項信息 -%><ea:extendAttribute bmYear="$bmYear" innerName="BM_BORROW" operationType="U"busiId="$bo
28、rrow.borrowId"displayPanel="true" />參數(shù)說明:innerName:為業(yè)務類型的內(nèi)部名operationType:U代表update,為編輯頁面,可以編輯V代表view,為查看頁面,不可編輯busiId:代表業(yè)務單的ID4.1.2. 后臺服務后臺服務1) 首先在自己各個業(yè)務模塊的action中,新建一個名為 extendAttributes 的Map,寫上get和set方法 :/* 擴展項.*/private Map < String, Object > extendAttributes = new HashMa
29、p < String, Object >();2)保存或更新擴展項:EAService.getExtendAttributeBusinessService().saveOrUpdateValue(borrow.getBudgetYear(), BusinessInnerNameEnum.BORROW.getValue(), borrow.getBorrowId(), extendAttributes);參數(shù)說明:第一個:預算年度第二個:業(yè)務類型的innerName第三個:業(yè)務單的ID第四個:從action中傳過來的擴展項的Map3)刪除業(yè)務單的時候刪除擴展項數(shù)據(jù):EAService
30、.getExtendAttributeBusinessService().deleteExtendAttributeValue(borrow.getBudgetYear(), BusinessInnerNameEnum.BORROW.getValue(), borrow.getBorrowId();參數(shù)說明:第一個:預算年度第二個:業(yè)務類型的innerName第三個:業(yè)務單的ID4)根據(jù)內(nèi)部名獲取所有可用的擴展項定義:List < IEAWidgetDefinition > getEAWidgetDefinitionsByInnerName(int bmYear, String i
31、nnerName);5)開發(fā)其他的的控件類型:參照:UIWidgetInputTextGenerator.java類,繼承AbstractUIWidgetGenerator抽象類,實現(xiàn)其中的方法/* 返回前臺展示的demo.*/String generateWidgetDemo() return ; /* 生成HTML組件.*/String generate(int bmYear, UserProfile user, String contextPath, String basePackage, boolean readOnly, IEAWidgetDefinition widgetDefin
32、ition, Map < String, Object > values) return ; /* 將前臺頁面發(fā)來的數(shù)據(jù)轉換為數(shù)據(jù)庫使用的數(shù)據(jù).*/Object generateDBData(IEAWidgetDefinition widgetDefinition, Map < String, Object > values) return ; /* 將從數(shù)據(jù)庫中取到的數(shù)據(jù)轉換為前臺頁面使用的數(shù)據(jù).*/Object generatePageViewData(IEAWidgetDefinition widgetDefinition, Map < String, Ob
33、ject > values)return ; /* * 生成驗證腳本. */String generateJavaScripes(String basePackage, boolean isViewPage, IEAWidgetDefinition widgetDefinition)return ; /* * * 獲取擴展項字段個數(shù). * <pre> * 獲取擴展項字段個數(shù) * </pre> * * return 返回控件需要生成的字段個數(shù) */int getWidgetFieldNum();4.2. 定義導航頁面可用業(yè)務類型com.supporter.prj.e
34、xtend_attribute.action. ExtendAttributeAction.java/* * 獲取業(yè)務類型數(shù)據(jù)用于前臺,適用擴展項二級分類不為“否”的時候 * <pre> * 用于前臺展示業(yè)務類型 * </pre> */private void getComCodeTable() busiTypesList = new ArrayList < ComCodeTableItem > ();List < ComCodeTableItem > allbusiTypesList = ComCodeTableClient.getList(&
35、quot;BUSI_TYPE");for(ComCodeTableItem item : allbusiTypesList)/適用擴展項二級分類不為“否”的時候if (!("否".equals(item.getExtC()busiTypesList.add(item); 4.3. 啟用/停用擴展項com.supporter.prj.extend_attribute. service. ExstendAttributeService.java/* * 啟用/停用擴展項 * <pre> * 修改擴展項狀態(tài),啟用或者停用擴展項 * </pre>
36、* param budgetYear 年度 * param widgetId 擴展項ID * param newStatus 新狀態(tài) */public void modifyEnabled(int budgetYear,String widgetId, String newStatus) String hql = "update EAWidgetDefinition set enabled = :enabled where widgetId = :widgetId"Map < String, Object > param = new HashMap < S
37、tring, Object > ();param.put("widgetId", widgetId);param.put("enabled", newStatus);extendAttributeDao.updateEntity(budgetYear, hql , param); 4.4. 獲取擴展項控件展示內(nèi)容1. 獲取擴展項定義及擴展項值 com.supporter.prj.extend_attribute.tag. ExtendAttributeTag.java/* /* * 拼接顯示在前臺的HTML. * * return 前臺展示的網(wǎng)頁信
38、息 */private String generateWidgetHtmlString() /獲取業(yè)務單擴展項的值Map < String, Object > values = getExtendAttributeBusinessService().findExtendAttributeValue(getBmYear(),getInnerName(), getBusiId();/獲取當前業(yè)務的可用擴展項List < IEAWidgetDefinition > widgetDefinitions = null;/獲取當前業(yè)務擴展項的定義,當存在擴展項值的時候,根據(jù)值里的創(chuàng)
39、建人ID獲取擴展項,當不存在擴展項值時根據(jù)當前登錄人獲取擴展項。if(!CommonUtil.isNullOrEmpty(values.get(ExtendAttributeConstant.CREATE_BY_ID) Person person = EIPService.getEmpService().getEmp(String) values.get(ExtendAttributeConstant.CREATE_BY_ID);user = EIPService.getSecurityService().getUserProfile(person);/獨立核算主體的ID(部分頁面可以將選擇的
40、獨立核算主體的參數(shù)傳過來,用來更細粒度的權限過濾).if (CommonUtil.isNullOrEmpty(budgetDeptId) widgetDefinitions = getExtendAttributeBusinessService().getEAWidgetDefinitionsByBusiness(getBmYear(), user, getInnerName(); else if (!CommonUtil.isNullOrEmpty(budgetDeptId) widgetDefinitions = getExtendAttributeBusinessService().ge
41、tEAWidgetDefinitionsByBudgetDeptId(getBmYear(),budgetDeptId, getInnerName();./生成控件的HTML代碼doSetWidgetHtmlCode(user, widgetDefinitions, values, widgetHtml, javaScripts);.2. 生成控件HTML及javaScript com.supporter.prj.extend_attribute.tag. ExtendAttributeTag.java/* * 重新封裝控件的HTML代碼. * * param user 當前帳號 * para
42、m extendAttributeDefinitions 擴展項定義 * param values 擴展項數(shù)據(jù)值 * param widgetHtml 控件HTML代碼字符串 * param javaScripts 控件JavaScript腳本字符串 */private void doSetWidgetHtmlCode(UserProfile user, List < IEAWidgetDefinition > extendAttributeDefinitions,Map < String, Object > values, StringBuilder widgetHt
43、ml, StringBuilder javaScripts) .IUIWidgetGenerater uiWidget = (IUIWidgetGenerater) Class.forName(widgetDefinition.getWidgetGeneratorClass().newInstance();boolean editable = "T".equals(widgetDefinition.getEditabled();/生成擴展項HTMLString thisWidgetHtml = uiWidget.generate(getBmYear(), user, con
44、textPath, getEaPrefix(),editable, operationType, widgetDefinition, values);boolean readOnly = READONLY.equals(operationType) | "T".equals(widgetDefinition.getEditabled();/生成擴展項JS,詳情見各個控件實現(xiàn)內(nèi)容。String thisWidgetJs = uiWidget.generateJavaScripes(getEaPrefix(), readOnly, widgetDefinition);.4.5.
45、 保存生成擴展項1. 保存擴展項定義信息.com.supporter.prj.extend_attribute.service. ExstendAttributeService.java/* * 創(chuàng)建擴展項信息的操作,包括修改對應業(yè)務類型的表結構. * <pre> * 創(chuàng)建擴展項的方法 * </pre> * * param entity 傳過來的實體擴展項實體 * param isNew 是新建還是新增,isNew = true,表示新增 * param needModifyTable 是否需要修改表結構,true需要改;false不需要 */public void c
46、reateOrUpdateEAWidgetDefinition(int budgetYear, Object entity, boolean isNew, boolean needModifyTable)./首先保存擴展項定義的基本信息this.saveOrUpdate(budgetYear, eawd, isNew);/如果需要修改表結構,執(zhí)行修改操作,否則方法結束if (needModifyTable) /修改擴展項表結構modifyTableStructure(budgetYear, eawd, oldEawdInnerName,ExtendAttributeConstant.TABLE
47、_ADD_COLUMN);./* * 修改表結構方法,用于新增、刪除擴展項字段. * <pre> * 該方法提供擴展項刪除或新增字段的操作 * </pre> * */private void modifyTableStructure(int budgetYear,EAWidgetDefinition eawd, String oldEawdInnerName,String modifyType) /獲取添加擴展項字段SQLString modifyTableStructureSql = getModifyTableSql(eawd, oldEawdInnerName,
48、modifyType, isOracle);./根據(jù)業(yè)務表所在不同數(shù)據(jù)庫獲取數(shù)據(jù)源if (DBConstant.YEAR_DB.equals(eawd.getDbType() dataSourceName = DATA_SOURCE + budgetYear;else if (DBConstant.APP.equals(eawd.getDbType()dataSourceName = DATA_SOURCE + DBConstant.APP_VALUE;else if (DBConstant.SYS.equals(eawd.getDbType()dataSourceName = DATA_SO
49、URCE + DBConstant.SYS_VALUE;else throw new ExtendAttributeException("創(chuàng)建/修改擴展項表失敗,無法獲取數(shù)據(jù)源!");./確定表已經(jīng)存在,如果不存在,新建一張表,表名為:eawd.getBusiInnerName()+"EAV"String existFlag = determineTableExist(stmt,eawd.getBusiInnerName()+ "_EAV", isOracle);4.6. 獲取擴展項定義2. 根據(jù)業(yè)務類型,獲取對應的擴展項定義.com
50、.supporter.prj.extend_attribute.service. ExstendAttributeService.java/* * 根據(jù)業(yè)務類型,獲取對應的擴展項定義. * * param bmYear 預算年度 * param busiInnerName 業(yè)務類型(維度類型) * return */List< IEAWidgetDefinition > getEAWidgetDefinitionsByBusiness(int budgetYear,String busiInnerName).4.7. 添加擴展項支持1) 定義業(yè)務類型,如果是為新業(yè)務類型添加擴展項支
51、持,需要在通用碼表中的業(yè)務類型中添加新的業(yè)務類型分類,執(zhí)行唯一的內(nèi)部名,將“擴展項二級分類”屬性設置為是,“適用資金支付”、“適用流程”、“適用執(zhí)行業(yè)務”三項屬性可根據(jù)實際情況設置,如果不需要可設置為否。通用碼表菜單:“系統(tǒng)平臺開發(fā)工具通用碼表分類”2) 擴展項定義,為業(yè)務類型定義擴展項,如果是為該業(yè)務初次定義擴展項,系統(tǒng)會自動在數(shù)據(jù)庫中創(chuàng)建一個該業(yè)務的擴展項表,表名為“業(yè)務內(nèi)部名_EAV”,除了支出類合同,其他業(yè)務擴展項表所在的數(shù)據(jù)庫均為年庫。菜單路徑:“系統(tǒng)平臺業(yè)務參數(shù)設置擴展項定義”;3) 頁面添加擴展項標簽,在需要引入擴展項的頁面的指定位置添加擴展項的標簽,Ø 在jsp頁面中
52、添加標簽:<% taglib prefix="ea" uri=" %>Ø 在jsp頁面head標簽內(nèi)添加擴展項依賴資源文件引入標簽,引入擴展項控件依賴的JS文件。<%- 擴展項依賴資源文件引入標簽 -%><ea:extendAttributeCommon bmYear="" nerName=" " operationType=" " busiId="" displayPanel="true" />Ø 在需要添加
53、擴展項的位置添加標簽:<%- 擴展項信息 -%><ea:extendAttribute bmYear="" innerName="" operationType=" "busiId=""displayPanel="true" />參數(shù)說明:bmYear:預算年度innerName:為業(yè)務類型的內(nèi)部名operationType:U代表update,為編輯頁面,可以編輯,V代表view,為查看頁面,不可編輯busiId:代表業(yè)務單的IDdisplayPanel:頁面擴展項區(qū)域
54、是否顯示面板樣式4) 后臺服務添加擴展項支持,業(yè)務單處理后臺服務中添加擴展項保存、更新、刪除處理:Ø 首先在自己各個業(yè)務模塊的action中,新建一個名為 extendAttributes 的Map,寫上get和set方法 :private Map < String, Object > extendAttributes = new HashMap < String, Object >();Ø 保存或更新擴展項:保存或更新業(yè)務單時,同時調用該方法EAService.getExtendAttributeBusinessService().saveOrUp
55、dateValue(int bmYear, String innerName, String busId, Map extendAttributes);參數(shù)說明:bmYear:預算年度innerName:業(yè)務類型的內(nèi)部名busId:業(yè)務單的IDextendAttributes:從action中傳過來的擴展項的MapØ 刪除業(yè)務單的時候刪除擴展項數(shù)據(jù):刪除業(yè)務單時,調用該方法EAService.getExtendAttributeBusinessService().deleteExtendAttributeValue(int bmYear, String innerName, Stri
56、ng busId);參數(shù)說明:bmYear:預算年度innerName:業(yè)務類型的內(nèi)部名busId:業(yè)務單的ID4.8. 擴展項支持多字段1. 擴展項控件定義實現(xiàn)類可以自定義擴展項支持的字段個數(shù),目前最多支持3個字段。2. 在擴展項生成器接口中添加方法:getFieldNum(),各個控件生產(chǎn)類實現(xiàn)該方法,返回需要生成的字段個數(shù)。3. 字段命名規(guī)則:第一個字段的使用擴展項定義時指定的【內(nèi)部名】,第二個字段的命名規(guī)則為【內(nèi)部名+“_N”】,第三個字段的名稱規(guī)則為【內(nèi)部名+“_O”】。4. 擴展項生成時,根據(jù)控件實現(xiàn)類中的方法獲取該控件需要生成的字段個數(shù),根據(jù)字段個數(shù)及上述命名規(guī)則,生成業(yè)務的擴展項字段。5. 執(zhí)行控制負責的控件:下拉框、單選按鈕、多選按鈕、彈窗單選、彈窗多選,支持2個字段。當業(yè)務單查看和只讀時,讀取擴展項第二字段的值,將該值作為控件的顯示文本。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 派駐機構集中管理制度
- 招生老師教務管理制度
- 水庫項目建設管理制度
- 米粉廠車間管理制度
- 健全考核管理制度
- 儲運碼頭管理制度
- 銷售類規(guī)章管理制度
- 期貨公司銷售管理制度
- 上海企業(yè)管理制度
- 劃重點學習技巧初級社會工作者試題及答案
- 2024火電廠智能巡檢機器人系統(tǒng)應用
- 消化內(nèi)鏡檢查前胃腸道準備課件
- 浙江省杭州市上城區(qū)2022-2023學年五年級下學期期末學業(yè)水平監(jiān)測數(shù)學卷
- 新蘇教版科學六年級下冊全冊教案(含反思)
- 高中物理必修第1冊教材習題答案
- 小學法制講座《學憲法 講憲法 爭做憲法小衛(wèi)士》
- 動靜脈畸形栓塞術后護理
- 醫(yī)療試劑運輸方案
- 國家開放大學《當代中國政治制度》期末考試題庫參考答案
- 工程造價咨詢服務方案(技術方案)
- 2023口腔門診依法執(zhí)業(yè)自查年度總結報告
評論
0/150
提交評論