版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
用友集團ERP客戶化開發(fā)系列叢書目錄TOC\o"1-4"\h\z\u第一篇入門篇 71. 搭建NC環(huán)境 71.1. 內容概述 71.2. 詳細介紹 81.2.1. 建立數據庫 81.2.2. 安裝NC 81.2.3. 配置啟動NC 121.2.4. Eclipse中建立NC開發(fā)環(huán)境 161.2.5. 產品參數,檔案初始化 221.2.6. 權限管理 251.2.7. 產品主要目錄結構介紹 272. NC基礎技術 282.1. 內容概述 282.2. 詳細介紹 282.2.1. NC開發(fā)基本概念 282.2.2. NCUAP總體介紹 302.2.3. NC的開發(fā)模型 352.2.4. 開發(fā)遠程接口 37. 定義接口 37. 實現該接口 37. 部署組件 37. 客戶端調用 38. 事務型組件發(fā)布 38. 客戶端代碼 403. NC數據庫持久化技術 413.1. 內容概述 413.2. 詳細介紹 423.2.1. 核心類介紹 423.2.2. 通過JDBCFrameWork訪問數據庫 423.2.3. 通過BaseDao進行對象的持久化 443.2.4. 結果集合操作 453.2.5. 結果集控制 46第二篇中級篇 484. 元數據建模 484.1. 內容概述 484.2. 詳細介紹 484.2.1. 新建元數據模型 484.2.2. 建立模型文件 494.2.3. 建立數據實體 494.2.4. 發(fā)布元數據 594.2.5. 導出JAVA源代碼 604.2.6. 生成SQL腳本并執(zhí)行 604.2.7. 最終成果 615. 功能建模 625.1. 內容概述 625.2. 詳細介紹 625.2.1. 進入Workshop 625.2.2. 表單開發(fā)流程導航工具 65. 新建業(yè)務組件 65. 公共信息設置 66. 單據模板設置 66. 查詢模板設置 69. 配置打印模板 70. 建立單據類型 71. 單據動作編輯 71. 單據動作腳本設置 73. 單據VO交換 730. 單據號設置 741. 自定義按鈕設置 752. UI組裝 753. 發(fā)布UI 764. 生成代碼到本地 765.2.3. 權限分配 786. 單據開發(fā)技術 786.1. 內容概述 786.2. 詳細介紹 786.2.1. UI工廠 78. UI工廠結構圖 79. UI工廠最基礎類說明 79. 單據模型介紹 81. 界面加載 81. 事件處理 826.2.2. 參照開發(fā) 83. 參照的類結構圖 83. 自定義參照開發(fā)規(guī)范 83. UIRefPane和refModle設置 866.2.3. 單據號 87. 單據號規(guī)則 87. 接口方法 896.2.4. 公式 91. 常用公式 91. 創(chuàng)建公式執(zhí)行器 92. 設置公式執(zhí)行器環(huán)境 93. 設置公式的值 93. 對公式進行語法檢查 94. 提取公式變量 95. 給公式變量賦值 95. 取公式的值 966.2.5. 鎖 966.2.6. 日志 98. 日志API的選擇 99. 日志級別的選擇 1006.2.7. 異常 100第三篇高級篇 1017. 流程平臺 1027.1. 內容概述 1027.2. 詳細介紹 1027.2.1. 流程平臺介紹 1027.2.2. 業(yè)務流程 104. 建立數據交換 104. 建立業(yè)務類型 109. 單據動作配置(推式流程配置) 109. 流程配置 110. 單據來源配置(拉式流程配置) 110. 動作約束配置 112. 動作事件控制配置 113. 動作驅動配置(推式流程配置) 114. 其他工作 1150. 推式流程過程 1161. 拉式單據過程(單據的上下游參照) 1167.2.3. 審批流 118. 審批流定義 118. 流程模型 120. 消息配置(MessageConfig) 121. 工作項的審批結果 122. 相關平臺類介紹 123. 動作處理時序圖 124. UI端調用-PfUtilClient 1241. 判斷是否進行動作前提示 125. BS端調用 1251. 單據動作處理 1257.2.4. 消息中心 130. 展現樣式 131. 消息類型 1338. 查詢引擎 1348.1. 內容概述 1348.2. 詳細介紹 1348.2.1. 進入查詢引擎管理頁面 1348.2.2. 創(chuàng)建查詢對象 1348.2.3. 設置報表參數 1358.2.4. 制作查詢定義 1368.2.5. 查詢格式設計 1389. 預警平臺 1419.1. 內容概述 1419.2. 詳細介紹 1419.2.1. 預警類型注冊 1419.2.2. 預警條目注冊 14310. 交換平臺 14810.1. 內容概述 14810.2. 詳細介紹 14810.2.1. 交換平臺使用 148. 注冊外部系統(tǒng) 149. 準備外系統(tǒng)數據 150. 配置輔助信息(可選) 151. 設置基礎數據對照(可選) 151. 配置Servlet的URL地址 152. 利用客戶端發(fā)送數據 15211. 會計平臺 15411.1. 內容概述 15411.2. 詳細介紹 15511.2.1. 會計平臺注冊 15611.2.2. 代碼調用 16012. 單點登陸 16212.1. 內容概述 16212.2. 詳細介紹 16312.2.1. 單點登陸 16312.2.2. 打開代辦事項 16513. NC開發(fā)webservice 16713.1. 內容概述 16713.2. 詳細介紹 16713.2.1. 發(fā)布服務 167. 創(chuàng)建WSDL文件 168. 創(chuàng)建XSD文件 169. 配置UPM文件 17013.2.2. 客戶端調用 176. 創(chuàng)建相關JAVA類文件 176. 創(chuàng)建JAVA接口 177. 測試用例 178第四篇附錄 18214. XML和EXCEL 18214.1. 內容概述 18214.2. 詳細介紹 18214.2.1. 利用XmlUtils讀取XML 18214.2.2. Excel文件讀寫 18815. 多語言 18915.1. 內容概述 18915.2. 詳細介紹 18915.2.1. 生成資源文件 19015.2.2. 代碼調用 19016. 補丁與安裝盤 19116.1. 內容概述 19116.2. 詳細介紹 19116.2.1. 安裝盤結構 19116.2.2. 產品結構 19116.2.3. 模塊結構 19216.2.4. 制作補丁 19417. 設計開發(fā)規(guī)范 19717.1. 內容概述 19717.2. 詳細介紹 19717.2.1. SQL規(guī)范 197. 概述 197. 書寫風格 197. 性能優(yōu)化 198. 四、多數據庫的考慮 19917.2.2. JAVA開發(fā)規(guī)范 201. 文件 201. 命名規(guī)則 202. 注釋規(guī)范 206. 編碼規(guī)范 21118. 開發(fā)常見問題與技巧 21518.1. 內容概述 21518.2. 詳細介紹 21518.2.1. 環(huán)境變量類nc.ui.pub.ClientEnvironment 21518.2.2. UAP發(fā)送待辦消息方法 21718.2.3. 模板中下拉框的值 21818.2.4. 數據權限過濾 21819. 技術紅皮書 22119.1. 內容概述 22119.2. 詳細介紹 22119.2.1. 技術紅皮書目錄 221第一篇入門篇歡迎您成為用友NC開發(fā)隊伍中的一員!如果您從未接觸過NC的開發(fā),本篇將從NC產品使用開始,循序漸進的帶您步入精彩的NC產品世界.本學時教程是在完成NC產品使用入門閱讀的最佳起點。在開始學習之前,您需要掌握以下基本技能:Eclipse使用JAVA和J2EE基礎知識本學時教程中將會講述以下內容:NC產品入門,本章旨在為那些對NC尚不了解的新進人員就NC的大體形態(tài)做個簡單的講解,以便對NC產品有個簡單的認識,并學習到與NC產品二次開發(fā)有關的產品操作技術入門知識。開發(fā)環(huán)境的安裝和搭建,本章是為第一次使用NC的人員做準備,達到迅速的安裝和搭建NC環(huán)境。NC技術框架簡介,本章您將會學習NC技術框架理論概念,通過學習范例代碼掌握VO\BO\遠程接口的概念。NC56的數據建模,介紹如何基于元數據進行業(yè)務建模,以及如何在運行時對元數據進行管理。搭建NC環(huán)境內容概述第一次在NC環(huán)境中做開發(fā),需要首先建立一個數據庫環(huán)境,這個數據庫環(huán)境中指定了NC所要使用的表空間,并預先建立了NC的系統(tǒng)表、視圖、索引等,并預置了大量的初始化數據。然后,在Eclipse中建立一個開發(fā)項目,引用UAP的jar包即可。經過這兩步,就完成了NC開發(fā)環(huán)境的建立。NC環(huán)境安裝完成后還需要對系統(tǒng)進行初始化,包括參數,組織結構,權限,基本檔案的建立,這樣一個系統(tǒng)才算真正可以使用。詳細介紹建立數據庫在數據庫服務器(Oracle,MSSQLServer,DB2)中新建一個空數據庫,并執(zhí)行數據庫腳本建立NC需要的表空間,不同的數據庫使用的腳本不一樣(正式安裝盤下有安裝說明),以Oracle為例:其數據文件存放在D:\sql\data下,那么數據庫腳本為:CREATETABLESPACENNC_DATA01DATAFILE'D:\sql\data\nnc_data01.dbf'SIZE500MAUTOEXTENDONNEXT50MEXTENTMANAGEMENTLOCALUNIFORMSIZE256K;CREATETABLESPACENNC_DATA01DATAFILE'D:\sql\data\nnc_data01.dbf'SIZE500MAUTOEXTENDONNEXT50MEXTENTMANAGEMENTLOCALUNIFORMSIZE256K;CREATETABLESPACENNC_DATA02DATAFILE'D:\sql\data\nnc_data02.dbf'SIZE300MAUTOEXTENDONNEXT50MEXTENTMANAGEMENTLOCALUNIFORMSIZE256K;CREATETABLESPACENNC_DATA03DATAFILE'D:\sql\data\nnc_data03.dbf'SIZE500MAUTOEXTENDONNEXT100MEXTENTMANAGEMENTLOCALUNIFORMSIZE512K;CREATETABLESPACENNC_INDEX01DATAFILE'D:\sql\data\nnc_index01.dbf'SIZE500MAUTOEXTENDONNEXT50MEXTENTMANAGEMENTLOCALUNIFORMSIZE128K;CREATETABLESPACENNC_INDEX02DATAFILE'D:\sql\data\nnc_index02.dbf'SIZE300MAUTOEXTENDONNEXT50MEXTENTMANAGEMENTLOCALUNIFORMSIZE128K;CREATETABLESPACENNC_INDEX03DATAFILE'D:\sql\data\nnc_index03.dbf'SIZE500MAUTOEXTENDONNEXT100MEXTENTMANAGEMENTLOCALUNIFORMSIZE256K;CREATEUSERNC50IDENTIFIEDBYNC50DEFAULTTABLESPACENNC_DATA01TEMPORARYTABLESPACEtemp;GRANTconnect,dbatoNC50;安裝NC該步驟的目的是建立NC測試服務器,并利用它建表,并初始化數據表。運行NC56標準金盤中UAP模塊下的ncsetup.bat文件,進入安裝向導:點擊【下一步】按鈕,進入版權申請頁面:選擇同意后,點擊【下一步】按鈕,進入選擇安裝目錄頁面:目錄設置完成后,點擊【下一步】按鈕,進入選擇安裝產品頁面:選擇客戶化模塊后,會將下面所有的功能都選擇上,點擊【下一步】按鈕,進入安裝頁面后,點擊【開始安裝】按鈕后進行產品的安裝:選擇第三方中間件,如果沒有則默認使用NC自帶中間件,直接點擊【下一步】按鈕:點擊【完成】按鈕,完成安裝:執(zhí)行完此向導后,可以在你指定的NC_HOME目錄中創(chuàng)建NC服務器端環(huán)境,如下圖:配置啟動NC1)在NC_HOME\BIN目錄下運行ncSysConfig.bat,首先需要建立數據源。2)修改服務器端口,可以在server頁簽修改web服務器的端口3)下面啟動NC自帶的中間件,方法是在上面的NC_HOME目錄中雙擊startup.bat,中間件即可啟動,啟動界面如下:4)利用InternetExplore作為客戶端登陸,在地址欄輸入/login.jsp,即可看到下面的界面:輸入用戶名root,密碼為空,登陸到系統(tǒng)管理帳套中 5)帳套管理里面新建帳套,用戶。前面建立了NC要使用的數據庫,并為數據庫設置了表空間信息,但這還不夠,還必須為其安裝NC的系統(tǒng)數據表和初始化數據。方法是點擊上面帳套管理頁面的“升級帳套”按鈕,開始進行數據表的建立和初始化,如下圖:然后開始初始化:至此,NC數據環(huán)境已準備好。注銷后再登陸到”學習帳套”,即進入了真正的NC系統(tǒng),如下所示:Eclipse中建立NC開發(fā)環(huán)境在上一個步驟中,演示了怎么搭建NC的數據環(huán)境和測試環(huán)境,但作為開發(fā)人員,日常的工作都是在Eclipse開發(fā)環(huán)境中進行。在Eclipse中建立開發(fā)環(huán)境分下面幾個步驟:1.在Eclipse插件中加入NC開發(fā)所需的MDE插件(nc.uap.mde.editor_1.0.1.jar和nc.uap.mde_1.0.2.jar),這些插件可以在相關工具\Eclipse_NC插件中找到,拷貝到eclipse安裝路徑下的plugins目錄下即可。2.取得NC_HOME,NC_HOME包含了開發(fā)環(huán)境所需的所有jar包,NC_HONE就是安裝完NC產品的主目錄。通過Preferences中MDEDevelopment中設置NCHome。還可以設置數據源,模塊選擇。3.打開Eclipse,點擊菜單“新建/項目”,彈出下面的對話框:選擇MDEDevelopment下的MoudleProject即可。4.點擊下一步,開始創(chuàng)建MoudleProject,在下面的對話框中填入信息:5.點擊完成后,會創(chuàng)建項目,形成下圖所示的目錄結構:6.至此,開發(fā)環(huán)境已建立完畢。在開發(fā)環(huán)境中調試程序,一般需要首先啟動NC中間件,然后啟動UAP客戶端調試器。下面我們在eclipse調試器中建立這兩個程序:建立中間件調試啟動點,方法是在調試點管理界面左邊列表的ModuleApplication下新建一個調試點,MDE插件會為它設置默認參數,我們只需改變一下調試點名稱,如下所示:programarguments設置如下:${FIELD_NC_HOME}/ierp/bin/prop.xml-Dnc.server.location=${FIELD_NC_HOME}-DEJBConfigDir=${FIELD_NC_HOME}/ejbXMLs-DExtServiceConfigDir=${FIELD_NC_HOME}/ejbXMLsVMarguments設置如下:-Dnc.server.location=${FIELD_NC_HOME}-DEJBConfigDir=${FIELD_NC_HOME}/ejbXMLs-DExtServiceConfigDir=${FIELD_NC_HOME}/ejbXMLsWorkingdirectory選擇Other內容為${FIELD_NC_HOME}啟動中間件快捷方式是在工程點擊右鍵,在runas出點擊NCMilldeware就可以。建立UAP客戶端調試器啟動點,該調試器的入口類是nc.starter.test.Jstarter,因此可以新建一個JavaApplication類型的調試點,輸入入口類,如下所示:在設立這兩個調試點之后,要注意兩個問題:一是你的項目所使用的JRE的安全策略必須是:grant{grant{ permissionjava.security.AllPermission;};這可以通過修改{$JRE根目錄}/jre/lib下的java.policy文件來實現,否則在啟動中間件時會出現java.security.AccessControlException;二是要成功運行UAP客戶端調試器(JStarter),必須將jre/lib下的plugin.jar,Tools.jar也加入到項目默認的JRE的classpath中,如下所示:此時即可先啟動中間件,再啟動客戶端調試環(huán)境。即可進入NC登陸界面,如下所示:至此,NC的環(huán)境完全建立起來。產品參數,檔案初始化利用NC-UAP進行開發(fā)的時候并不是做一個單據,報表就可以運行的,NC作為一個ERP軟件,需要對系統(tǒng)進行一些初始化才可以正常運行,主要是對組織機構,人員,權限,會計期間,參數,檔案的初始化。(本節(jié)只對這些設置進行簡單描述,詳細介紹可參考相應產品手冊,比如基本檔案,權限手冊)參數在NC管理軟件中,參數設置平臺管理系統(tǒng)所有的參數,并對參數按實際需要進行逐級分配,實現既能統(tǒng)一控制,又能滿足單位靈活運用。參數包括公共參數和業(yè)務參數,以集團進入還是以公司進入看到的參數設置界面內容是不同的。主菜單中雙擊【客戶化】-【參數設置】:必須設置的參數是集團本位幣。幣種對于全集團用到的幣種在本功能中進行設置。總公司或上級單位確定集團公司或所屬下級單位使用的全部幣種,包括本位幣。幣種設置完成后,集團公司所有內部單位還需在各自單位賬中錄入相應的主輔幣信息及匯率信息,待這些信息錄入完畢后,方能在日常業(yè)務使用的這些幣種。在主菜單中雙擊【客戶化】-【基礎數據】-【幣種】,系統(tǒng)將彈出界面。屬于集團檔案會計期間方案和會計期間會計期間方案用來定義賬套擁有的會計期間數目,然后為每個期間方案定義一套會計期間。在主菜單中雙擊【客戶化】-【基礎設置】-【會計期間】會計期間節(jié)點用來定義賬套的會計月度和會計季度。啟用多賬簿的情況下會計期間按照會計期間方案分別進行設置。公司目錄公司目錄用于定義集團公司所有公司的基本信息、聯系信息,包括公司編號、名稱、聯系方式等相關信息,并確定分子公司之間的關系。以公司身份登陸后,只能查詢。在主菜單中雙擊【客戶化】-【基礎數據】-【公司目錄】建公司帳新建公司賬是為已經存在公司目錄中的公司建賬、增補系統(tǒng)模塊,以便初始化業(yè)務數據及業(yè)務參數,已建賬的公司才能處理有關業(yè)務。新建公司賬還可為已建賬公司增補功能節(jié)點。在主菜單中雙擊【客戶化】-【建公司賬】-【新建公司賬】基本檔案在基本檔案節(jié)點為集團和公司建立基本信息,以便于業(yè)務系統(tǒng)使用,包括部門、人員、庫存、自定義項、組織機構、財務信息、業(yè)務信息、制造信息等等。除少數幾個檔案只能在集團增加外,其他檔案受集團參數設置節(jié)點的【客戶化】中的【基本檔案】參數決定,為“是”公司和集團均可增加檔案內容,為“否”則公司不能增加。常見的檔案添加比如:部門檔案在公司增加,人員類別在集團,人員檔案在公司。具體檔案初始化參考基本檔案產品手冊,不一一介紹。權限管理NCV5.0權限管理與之前版本最大的區(qū)別在于在權限管理中引入了“角色”概念。先規(guī)劃好各種角色并分配權限,再將用戶與角色關聯起來,將角色作為橋梁把“用戶”和“權限”連接起來。換句話說就是:通過規(guī)劃好各種角色先將用戶分類,再為各類用戶分配權限。資源權限控制界面用來為當前登錄公司以及當前登錄公司的下屬公司啟用按鈕權限控制和數據權限控制。NC系統(tǒng)中的權限由三個部分構成,分別為功能權限、數據權限和按鈕權限。功能權限是指節(jié)點的查看和打開的權限;數據權限是指檔案的參照權限,而按鈕權限是只指各個界面上按鈕的查看和使用權限。如果不啟用權限控制,則不需要分配權限,系統(tǒng)默認角色具有所有權限;啟用權限控制后,可以為具體的角色分配具體的權限。NCV5.0系統(tǒng)默認啟用了功能權限控制,且該設置不可修改;數據權限和按鈕權限的權限控制默認為不啟用狀態(tài),但可在本界面對設置進行修改。在用戶管理界面可以為當前登錄公司以及當前登錄公司的下級公司增加用戶,還可以為在這些公司創(chuàng)建的用戶委派角色。用戶必須被委托角色才有相應權限角色管理的界面如圖所示。角色管理節(jié)點用來為當前登錄公司以及當前登錄公司的下屬公司創(chuàng)建角色,將創(chuàng)建的角色分配給下屬公司以及為角色關聯用戶。權限分配的界面如圖所示。權限分配節(jié)點用來為當前登錄公司和當前登錄公司下屬公司的角色分配功能權限、按鈕權限以及檔案的數據權限。經過以上操作可以為公司建立角色,用戶,并賦予相應權限。深入的權限管理參考權限管理產品手冊。產品主要目錄結構介紹ierp/bin:與整個產品相關的配置文件都存放在該目錄,如日志配置文件pertiesmodules:NC產品模塊存放的目錄,下面的所有模塊在系統(tǒng)啟動時得到加載modules/<模塊名>:某個模塊的目錄,模塊名必須是小寫的英文字母,在能表達意義的基礎上盡量的短modules/<模塊名>/META-INF/module.xml:必須存在,配置模塊的一些通用屬性,如名稱,描述,classloader等,注意名稱必須與模塊名稱同名modules/<模塊名>/lib:模塊公開的API類,如接口,接口相關的VO等,放JAR包modules/<模塊名>/classes:模塊公開的API類,如接口,接口相關的VO等,放帶目錄的.class文件等,用于補丁modules/<模塊名>/META-INF/lib:模塊私有的代碼,如DMO,業(yè)務實現等,放JAR包modules/<模塊名>/META-INF/classes:模塊私有的代碼,放帶目錄的.class文件等,用于補丁modules/<模塊名>/extension/lib,classes:用于二次擴展的公開的APImodules/<模塊名>/extension/META-INF/lib,classes:用于二次擴展的私有的APImodules/<模塊名>/client/lib,classes:用于從目標上來說不屬于公共的API,但是客戶端用到的代碼webapps/nc_web:NC產品的web應用hotwebs:下面放其他的web應用,如hrss,lfw等resource:存放與整個產品相關的資源,如產品的多與資源lib,classes,external/lib,classes:由平臺維護和提供的類庫,不允許第三方調整NC基礎技術內容概述本章將介紹UAP-NC平臺的技術結構,開發(fā)模型,并通過一個例子親身感受遠程接口開發(fā)。詳細介紹NC開發(fā)基本概念單據:比如報銷時的報銷單,一般由表頭和表體組成(有些時候還含有表尾)。表頭中包含了單據的主信息,比如日期、部門、預算項目;表體包含了單據的明細信息,比如具體的事項和金額;單據類型:一個業(yè)務系統(tǒng)為了使結構更清晰,通常也是分層的。比如,供應鏈系統(tǒng)包含了采購、庫存等子系統(tǒng),每個子系統(tǒng)都具有一個系統(tǒng)類型,而每個子系統(tǒng)都會具有很多張單據,為了區(qū)分這些單據,為每張單據命名一個單據類型,作為唯一標識;模板:單據開發(fā)涉及到三大模板(單據模板、查詢模板、打印模板)。單據模板定義了單據的顯示外觀和基本框架,查詢模板定義了單據的查詢對話框,打印模板定義了單據信息打印到打印機的樣式和格式;VO是ValueObject的簡寫,在NC中是一個抽象類,它實現了Cloneable和Serializable接口。是NC業(yè)務數據的載體在系統(tǒng)各層之間傳遞業(yè)務數據。CircularlyAccessibleValueObject是ValueObject的子類,提供了對自身的屬性進行存取操作的方法。SuperVO是CircularlyAccessibleValueObject的子類,是NC系統(tǒng)中最常使用的VO類型,它與一張數據庫表對應,可以方便的利用NC的JDBCFramework進行持久化操作。以上是對一個數據對象的抽象,在NC產品中,絕大部分功能是通過單據的形式提供的,而NC的單據大部分是一對多的關系,我們稱之為一個主表記錄對應多個子表記錄。AggregatedValueObject就是用于存儲一對多關系的主子表數據。對于一主多子的情況,實現IExAggVO接口。聚合VO:單據一般由表頭和表體構成,因此單據的數據表通常設計成主表和子表。聚合VO是對單據數據的抽象,它用于裝載主表VO和一組子表VO.;UI工廠:雖然能通過三大模板定義出單據的顯示,但每張單據都有一些公共的或特殊的行為。UI工廠是一種單據開發(fā)框架,它將常用單據抽象成了很多類型,因此,UI工廠相當于是單據開發(fā)的代碼模板,預置了單據的各種公共行為,比如增、刪、改、查,并且可以連接到NC流程平臺,支持審批、單據驅動等應用。遠程接口:V5遠程組件開發(fā)都是基于接口(替代原先的BO訪問),訪問也都是基于接口。參照:是一種輔助的數據輸入方式,通常彈出界面的形式提供可以參考的數據,比如在錄入省份信息時,提供一個全國省份列表以供選擇。單據開發(fā)中,有很多輸入字段存在類似的需求。NC系統(tǒng)中預置了很多種常見參照(基本覆蓋了所有的基本檔案,比如人員參照,存貨參照),如果要自定義一種參照,則需要簡單的開發(fā)工作。ToftPanel:提供對NC產品功能節(jié)點開發(fā)的支持,統(tǒng)一功能節(jié)點的注冊類型(ToftPanel)。提供了節(jié)點開發(fā)過程中按鈕的注冊機制以及按鈕與界面的互動機制(通過ToftPanel的onButtonClick(bo)方法進行事件響應)。節(jié)點打開時,真正運行的是FramePanel實例,它提供了ButtonBar進行按鈕展示,TitlePanel進行節(jié)點標題的顯示,同時將用戶開發(fā)的ToftPanel子類放置到中心位置進行展現。下圖是ToftPanel區(qū)域介紹:FramePanelFramePanelButtonBarToftPanelTitlePanelNCUAP總體介紹UAP-NC作為基于多組織架構的企業(yè)應用運行平臺、基于模式化的開發(fā)平臺、開放的系統(tǒng)集成平臺及統(tǒng)一的系統(tǒng)管理平臺,是建立在Java語言所提供的強大功能的基礎上開發(fā)的。Java是一種簡單的、面向對象的、分布式的、結構中立的、安全的、可移植的、性能優(yōu)異的、多線程的、動態(tài)的開發(fā)語言,適合構建基于網絡計算的企業(yè)應用。由于Java的平臺無關性,使得UAP-NC可以運行在不同硬件平臺、不同操作系統(tǒng)平臺上?;赨AP-NC所開發(fā)的應用軟件采用Browser/Server(瀏覽器/服務器)的方式來運行。B/S的運行方式最大限度地方便了用戶部署和維護大型軟件系統(tǒng),保證了瘦客戶機運行,從而大大降低了用戶目標系統(tǒng)的總體擁有成本(TCO)。系統(tǒng)框架層主要指基礎軟件,如操作系統(tǒng)、數據庫及J2EE應用服務器。UAP-NC支持多種操作系統(tǒng)(Solaris、AIX、Linux、Windows等),可運行于符合J2EE規(guī)范的多種應用服務器(IBMWebSphere、BEAWebLogic、UFIDAApplicationServer等),支持多種數據庫DBMS(DB2、Oracle、SQLServer、OSCAR等)。UAP-NC還提供Portal服務器進行內容集成以使用戶對企業(yè)資源有一個統(tǒng)一的訪問點。技術框架層是在系統(tǒng)框架層(操作系統(tǒng)、數據庫及應用服務器)和應用系統(tǒng)之間建立的一層技術封裝層和系統(tǒng)資源監(jiān)控和管理層。技術框架層屏蔽不同具體技術實現的細節(jié),減少直接使用系統(tǒng)資源帶來的復雜性、異構性、不安全性及不穩(wěn)定性;技術框架層監(jiān)控和管理系統(tǒng)資源,保證系統(tǒng)資源的可用性及其合理使用;技術框架層提供最佳編程模式,加快在不同技術平臺上開發(fā)和部署應用的速度,保證應用的健壯性。技術框架層所屏蔽技術實現細節(jié)包括界面風格、遠程接入、EJB實現/訪問、多數據庫適配、事務處理、并發(fā)處理、緩存處理、安全管理等等。企業(yè)服務架構(EnterpriseServiceArchitecture,ESA)企業(yè)服務架構是一個服務集成總線,支持異構環(huán)境的服務、消息及基于事件的交互。通過ESA,可以使用與實現無關的接口來定義服務,可發(fā)現和調用所需的服務,可解決服務之間的相互依賴。連接框架(ConnectFramework)連接框架連接客戶端與服務器,使不同客戶端(瀏覽器小應用程序、Java應用程序、瀏覽器JSP)可通過不同訪問協(xié)議(HTTP/HTTPS,RMI)使用服務器提供的服務。同步(Synchronization)同步服務實現客戶端與服務器代碼和數據的同步,及集群環(huán)境下服務器之間的資源同步。SQL翻譯器(SQLTranslator)SQL翻譯器將SQL翻譯成適合目標數據庫的SQL語句,以適配不同數據庫廠商提供的產品;優(yōu)化SQL,充分發(fā)揮不同數據庫的最大性能。元數據管理(MetadataManagement)元數據是描述系統(tǒng)數據(包括界面定義、規(guī)則定義、流程定義等)的數據。通過元數據管理,對系統(tǒng)數據統(tǒng)一進行維護以支持用戶自定義,如改變字段的可編輯屬性、字段的取值范圍等。工作流引擎(Workflow) 工作流引擎根據工作過程的描述,通過執(zhí)行一系列已定義的工作項,完成此工作過程。UAP-NC的工作流引擎支持多種工作流模式,如分支、合并、并行、選擇、循環(huán)、回退等;支持工作項的搶占與會簽;支持可配置的動作執(zhí)行腳本,等等。規(guī)則引擎(RuleEngine) 規(guī)則引擎用來定義和執(zhí)行各種規(guī)則,包括界面規(guī)則、關聯關系、計算規(guī)則、條件跳轉規(guī)則等。使用規(guī)則可以讓應用更加富有柔性。規(guī)則需要通用的行業(yè)化語言精確表達且淺顯易懂。規(guī)則引擎需要滿足一定的計算速度,支持規(guī)則的批量處理及理解外部數據。持久化框架(PersistenceFramework)封裝不同持久化技術(如JDBC、普通文件、XML、Excel)。持久化框架可解決對象與關系之間的“阻抗失配”問題?;A算法(BasicAlgorithms)提供統(tǒng)一的基本算法,如排序,XML文檔操作,方便開發(fā)與編程,統(tǒng)一代碼規(guī)范。登錄和安全(Login/CASecurity)統(tǒng)一管理系統(tǒng)登錄時的身份認證。支持多種身份認證策略,如靜態(tài)密碼認證、基于USBKey的CA身份認證等。支持對業(yè)務敏感數據使用證書進行簽名和驗證以防止數據篡改和提供抗抵賴性。調度引擎(Scheduler) 調度引擎對服務和線程進行統(tǒng)一管理,以屏蔽不同應用服務器的異構性。調度引擎調度各種服務、常駐系統(tǒng)服務、客戶端的請求服務、以及一些服務的組合。異常(Exception)統(tǒng)一解釋與封裝異常消息,如不同廠商的數據庫異常的不一致。緩存(Cache)提供在服務器端與客戶端的臨時內存中進行緩存的機制,包括對象的創(chuàng)建、共享訪問、假脫機(Spooling)、失效等,加快對用戶操作的響應。日志(Log)日志機制提供對系統(tǒng)運行時的監(jiān)控及支持對系統(tǒng)異常的追蹤與定位。日志機制可控制日志輸出的格式、日志信息的級別、日志信息輸出的目的地(文件、控制臺、SocketServer等)。通過配置文件進行靈活的設置,用戶可以細致地控制日志的生成過程,而不需修改程序代碼。應用框架層是基于企業(yè)建模理論的、以業(yè)務導向和驅動的、可快速構建應用軟件的軟件平臺。應用框架層的出現是一種技術創(chuàng)新,它使軟件平臺多了一個具有革命性意義的戰(zhàn)略層次,為降低大型復雜軟件系統(tǒng)的實現難度提供了新的途徑。將應用軟件的業(yè)務邏輯和開發(fā)技術相對分開,使得應用軟件的開發(fā)者可以僅關注應用的業(yè)務邏輯,而不必關注其繁瑣的技術實現。這使管理層與業(yè)務人員參與應用軟件的開發(fā)成為可能。UAP-NC應用框架層基于業(yè)務和管理層面,以業(yè)務建模(組織、流程、功能、資源、信息)為基本手段,從而構造、開發(fā)和維護業(yè)務應用系統(tǒng)。使用UAP-NC提供的應用框架層,可大大縮短研發(fā)周期,提高研發(fā)效率,加快應用開發(fā)的速度;減少企業(yè)信息系統(tǒng)開發(fā)的風險;降低開發(fā)成本;實現最終用戶的個性化的需求;支持用戶在發(fā)展過程中各種各樣的需求變化;提供應用的高價值。國際化(I18N)實現界面的多語化及數據和展示的本地化。界面的多語化是指根據用戶登錄時指定的語種顯示相應的語言界面。企業(yè)用戶可以修改相應的語言信息及顯示的圖片。數據和展示的本地化指日期、時間、數字、貨幣、匯率等可根據企業(yè)用戶本地的習慣進行展示。消息管理(MessageManagement)消息管理集中顯示通過ESA所傳送的消息,如應用系統(tǒng)所產生的預警消息,通知消息,業(yè)務流程相關的消息,及企業(yè)公告和用戶對發(fā)消息等。移動管理(MobileManagement)支持通過移動設備進行消息的交互及操縱業(yè)務數據等。對無線設備的廣泛支持,UAP-NC帶來的是企業(yè)管理的無處不在和服務的無限拓展,同時也為企業(yè)決策人員提供了高端、迅捷的管理機制。組織管理(OrganizationManagement)提供從不同維度管理企業(yè),如公司、部門、主體賬簿等。數據傳輸(DataTransfer)數據傳輸負責傳輸以規(guī)則定義的數據集以支持數據層的應用集成。數據交換(DataExchange)與第三方系統(tǒng)進行數據交換,提供靈活的數據映射及數據綁定,支持根據業(yè)務規(guī)則的轉換,同時結合工作流平臺整合業(yè)務流程。動態(tài)會計平臺(FinancialAccountPlatform)通過定義會計科目類別和憑證模板,使用憑證生成器,根據業(yè)務數據生成實時憑證。在保持業(yè)務數據與財務數據相對獨立的基礎上保證數據的一致性和及時性。 預警平臺(PreAlert) 在預警平臺上可定義多種方式的預警條件以進行形式多樣的預警,如時間條件、庫存大小、生日等。預警還可配置在用戶登錄時觸發(fā)。預警消息可以用HTML網頁的形式發(fā)布,可以通過郵件發(fā)布,還可使用短消息發(fā)送。業(yè)務流程和審批流程的編排(BusinessProcessandApprovalFlowOrchestration)用來定義業(yè)務流程和審批流中數據的流向,數據間的關系及以人員的關系。 訪問控制(AccessControl)使用基于用戶角色和對象權限的權限分配方式。每一角色都包含公有權限和屬于某一具體公司的私有權限。角色還提供信任功能。應用模式(ApplicationPatterns)UAP-NC根據經驗積累與用戶實施,總結出一套與應用界面相關的模式(表單、報表和打?。?,更好地提供滿足用戶需求的界面展現,更快地滿足用戶個性化的需求。NC的開發(fā)模型系統(tǒng)前端為客戶端UI代碼,UI端代碼繼承ToftPanel,UI代碼通過調用遠程組件與服務器端進行交互,中間傳遞的數據模型為VO,遠程組件調用底層的業(yè)務實現代碼,完成整個交互邏輯。通過JDBCFramework,系統(tǒng)提供了一套良好的數據持續(xù)機制,解決數據庫交互的復雜問題。下圖是NCV5的代碼結構圖NC5后將代碼分區(qū)域存放:Public目錄存放接口和公共代碼(比如VO和公共算法)Private目錄存放實現和其它實現細節(jié)Client目錄存放客戶端代碼META-INF目錄存放模塊配置文件目錄,包括module.xml文件和xxx.module接口配置文件。針對上面的開發(fā)模式,我們規(guī)范一下代碼的包結構:nc.itf.<模塊>:表示該模塊定義的接口nc.impl.<模塊>:表示該模塊定義的接口實現nc.vo<模塊>:表示VO的實現nc.bs.<模塊>:普通的后臺應用nc.ui.<模塊>.*:客戶端代碼開發(fā)遠程接口V5.0版本的遠程組件開發(fā)是基于接口,因此遠程組件的開發(fā)按照下面兩個步驟開發(fā):定義遠程接口,注意這里的遠程接口不用實現java.rmi.Remote接口,普通接口就可以了對該接口進行實現把該組件部署為遠程組件下面以HelloWord為例子:定義接口packagenc.itf.sample.service;publicclassIHelloWorld{ StringsayHello(StringtoName);}實現該接口packagenc.impl.sample.service;publicclassHelloWorldImplimplementsIHelloWorld{ publicStringsayHello(StringtoName){ StringretValue="Welcome"+toName+"exploreV5"; System.out.println(retValue); returnretValue;}部署組件編輯或新建該產品模塊下的模塊部署描述文件(META-INF下的.module文件),加入一個公共組件:<?xmlversion="1.0"encoding="UTF-8"?><modulename="sample"><public><componentremote=”true”><interface>nc.itf.sample.service.IHelloWorld</interface><implementation>nc.impl.sample.service.HelloWorldImpl</implementation></component></public></module>遠程組件只要指出他的remote屬性為true即可??蛻舳苏{用接下來客戶端就可以通過下面的方式進行遠程訪問了:IHelloWorldhello=NCLocator.getInstance().lookup("nc.itf.sample.service.IHelloWorld");System.out.println(hello.sayHello("uap"));系統(tǒng)輸出:WelcomeuapexploreV5你的一個實現可以同時實現多個接口,并且可以在部署的時候選擇性的公布出你需要遠程分布的接口,例如你的一個實現類,實現了多個接口IService1,IService2,IService3,你可以選擇只遠程公布接口IService2,IService3,部署信息如下:<?xmlversion="1.0"encoding="UTF-8"?><modulename="sample"><public><componentremote="true"supportAlias="true"><interface>nc.itf.sample.service.IService2</interface><interface>nc.itf.sample.service.IService3</interface><implementation>nc.impl.sample.service.MultiServiceImpl</implementation></component></public></module>注意我們使用了supportAlias屬性,指出我們可以通過兩個接口中的任何接口進行遠程組件的查找。supportAlias為true只有在公共組件中才起作用。事務型組件發(fā)布定義遠程接口,就是普通接口,分有事務和無事務,區(qū)別在于部署文件時放在private下而不是public下,部署成private的接口需要生成ejb代碼,否則無法調用,部署成public的代碼不需要生成ejb代碼。一般來說,增刪改操作發(fā)布成private接口,查詢發(fā)布成public接口。下面是兩種接口的發(fā)布事例:<?xmlversion="1.0"encoding="UTF-8"?><?xmlversion="1.0"encoding="UTF-8"?><module><public><componentpriority="0"singleton="true"remote="true"tx="NONE"><interface>nc.itf.sample.IHelloPub</interface><implementation>nc.impl.sample.HelloWorldPub</implementation></component></public><private><componentname="IHelloWorld"priority="0"singleton="false"><implementation>nc.impl.sample.HelloWorldImpl</implementation></component></private></module>配置文件規(guī)范:所有的屬性中不能出現(除系統(tǒng)生成的proxy外)supportAlias=”所有的屬性中不能出現(除系統(tǒng)生成的proxy外)supportAlias=”true|false”priority屬性只對活動組件有用公共組件約定:公共組件的屬性中不能出現:name=””,公共組件可以出現以下屬性:tx=”NONE”,singleton=”true”//根據不同情況進行決定,建議采用trueremote=”true|false”私有組件約定私有組件的節(jié)點中不能出現:<interface>…</interface>不能出現以下屬性:tx=””,remote=”” 可以出現以下屬性:singleton=”true”//根據不同情況進行決定,建議采用truename=名稱以接口名稱為準(不包含包名稱)對于事務型的組件(是指該組件的方法調用中事務處理會自動參與)可通過后綴名來判斷事務類型:方法名后綴RequiresNew:新事物方法名后綴Mandatory:必須在一個已有的事務環(huán)境中運行改方法方法名后綴Supports:只是支持事務,不建議使用方法名后綴NotSupported:不支持事務,不建議使用方法名后綴Never:不能有事務,否則出錯沒有方法名后綴:如果有事務,就在該事務環(huán)境下工作,否則新啟事務,這是大部分事務型組件的情況事務型組件一般都是針對數據庫等事務性資源進行操作,如果沒有對事務性資源進行操作,請不要把組件定義為事務性組件。對于發(fā)布成private的組件,需要點擊xxx.module部署文件,在代理組件生成頁簽,選擇需要發(fā)布的接口,輸入ejb名字,點擊生成就可將代碼生成到gen目錄下。只有這樣,才可以調用private的接口。安裝nc產品后通過sysconfig部署代碼操作也是這個過程??蛻舳舜a客戶端調試代碼可以通過junit和注冊Toftpanel來實現。通過junit運行調試接口比較方便,不需要進行客戶端登陸。新做一個類繼承AbstractTestCase,實現一個以test開頭的方法,在方法里面寫調用遠程組件的方法。然后以JUnit來運行。Toftpanel方式是寫一個ToftPanel的子類,將此類注冊成nc節(jié)點,然后通過eclipse啟動jstarter來進入nc,點擊相應節(jié)點執(zhí)行相應方法。通過擴展ToftPanel,實現getTitle()方法,在postInit()方法中初始化界面,調用setButtons(ButtonObject[])方法設置菜單,實現onButtonClicked(ButtonObject)方法響應菜單事件。NC數據庫持久化技術內容概述在NC中很多時候需要我們直接操作數據庫,對數據庫德訪問NC提供了框架類。JDBCFrameWork為NC訪問數據庫提供統(tǒng)一的數據操作訪問,簡化數據訪問操作。BaseDao是在JDBCFrameWork之上提供數據持久化的工具類。下圖是NC數據庫訪問的層次圖:詳細介紹核心類介紹PersistenceManager管理連接會話的生命周期,并提供了對單表VO操作的常用實現可以傳遞構造參數選擇不同的數據源JdbcSession對JDBC的API封裝和簡化SQLParameter封裝執(zhí)行SQL的參數ResultSetProcessor結果集處理回調接口,封裝結果集處理DbException封裝不同數據庫的異常,和統(tǒng)一處理不同數據庫的ErrorCodeBaseDAO/IUAPQueryBS/IVOPersistence管理連接會話的生命周期,提供了對單表VO操作的常用實現通過JDBCFrameWork訪問數據庫通過代碼和注釋來看如何通過JdbcSession訪問數據庫PersistenceManagersessionManager=null;try{sessionManager=PersistenceManager.getInstance();//構造參數可指定數據源JdbcSessionsession=sessionManager.getJdbcSession();//開始jdbc會話Stringsql="updatebd_invmandocsetpk_invmandoc='0001AA10000000000DDD'wherepk_invmandoc=?”;SQLParameterparameter=newSQLParameter();構造參數對象parameter.addParam("0001AA10000000000DDD");添加參數,JdbcSession會將參數對象中的每個對象放入到預處理對象的相應位置session.executeUpdate(sql,parameter);}catch(DbExceptione){//根據數據庫的不同統(tǒng)一異常處理if(e.isBadSQLGrammar())//如果是語法錯誤//todo相關處理if(e.isDataIntegrityViolation())//如果是數據一致性錯誤//todo相關處理}}finally{if(sessionManager!=null)sessionManager.release();//需要關閉會話}下面是幾種參數語法介紹:1.無參查詢Stringsql="select*frombd_deptdoc";//構造查詢語句Listlist=(List)session.executeQuery(sql,newArrayListProcessor());2.有參查詢Stringsql="select*frombd_deptdocwheredept_code=?";SQLParameterparam=newSQLParameter();//構造參數對象param.addParam(“aaa”);//添加參數Listlist=(List)session.executeQuery(sql,param,newArrayListProcessor());3.有參更新Stringsql="updatebd_deptdocsetdept_code=‘aaa’wheredept_code=?”;SQLParameterparam=newSQLParameter();//構造參數對象param.addParam(“bbb”);//添加參數session.executeUpdate(sql,param);5.無參批量更新Stringsql="updatebd_deptdocsetdept_code=‘aaa’wheredept_code=‘bbb’";session.addBatch(sql);//添加需要執(zhí)行的同構SQLintrows=session.executeBatch();//執(zhí)6.特殊參數1.Null參數param.addNullParam(java.sql.Types.INTEGER);2.Blob參數param.addBlobParam(newObject());3.Clob參數param.addClobParam(newString());通過BaseDao進行對象的持久化通過持久層框架可以很方便的實現把內存中的對象持久化到數據庫、把數據庫中的關系數據加載到內存中。作為入門的一個例子,我們使用一個簡單的JavaBeanPerson類(注意需要進行持久化的VO類必須符合JavaBean規(guī)范)1.前臺數據訪問:使用IVOPersistence服務組件,進行增刪改操作;使用IUAPQueryBS服務組件,進行查詢操作。IUAPQueryBSiUAPQueryBS=(IUAPQueryBS)NCLocator.getInstance().lookup(IUAPQueryBS.class.getName());iUAPQueryBS.executeQuery()2.后臺數據訪問:使用BaseDAO工具類3.對象讀取BaseDAOdao=newBaseDAO();//構造參數可以指定數據源PersonVOMetameta=newPersonVOMeta();dao.retrieveByClause(Person.class,meta,"id=5");4.對象寫入BaseDAOdao=newBaseDAO();Personperson=newPerson();person.setName(“tom”);person.setAge(“20”);PersonVOMetameta=newPersonVOMeta();dao.insertObject(person,meta);//默認會為Person對象生成主鍵類說明Person是普通值對象,PersonVOMeta映射元數據類實現IMappingMeta接口,用于影射值對象和數據庫關系,SupperVO不需要實現影射類結果集合操作對查詢結果集合的操作,主要由ResultProcessor類來實現,這是一個接口ResultProcessor包含有一個簡單的方法,不同的ResultProcessor實現返回不同的結果對象。系統(tǒng)提供了一系列常用的默認實現。ArrayProcessor數組處理器,返回一個對象數組,結果集中只有一行數據,其中結果集中每一列對應數組的一個元素。ArrayListProcessor數組集合處理器,返回一個ArrayList集合,集合中的每一個元素是一個數組,每個數組對應結果集中的一行數據,其中結果集中每一列對應數組的一個元素。MapProcessorHashMap處理器,返回一個HashMap,結果集中只有一行數據,其中結果集合中每一列的列名和列值對應HashMap的一個關鍵字和相應的值。MapListProcessorHashMap集合處理器,返回一個ArrayList集合,集合中的每一個元素是一個HashMap,每個HashMap對應結果集中的一行數據,其中結果集合中每一列的列名和列值對應HashMap的一個關鍵字和相應的值。BeanProcessor值對象處理器,返回一個JavaBean,結果集中只有一行數據,該處理器能自動把結果集中的值按列的名稱映射到javaBean中,如結果集中有名稱為”name”的字段,那么只要該java對象中有getName()方法就能把結果集合中”name”對應的值映射到對象中。BeanListProcessor值對象集合處理器,返回一個ArrayList集合,集合中的每一個元素是一個javaBean,每個javaBean對應結果集合中一行數據,其中每個JavaBean中的數據映射關系和BeanProcess同理。還有ColumnProcessor,BeanMappingListProcessor,BeanMappingProcessor幾個類BeanListProcessor作為結果集的例子:ArrayListlist=(ArrayList)session.executeQuery(sql,param,newBeanListProcessor(TrainReqmatbillVO.class));//TrainReqmatbillVO是一個普通vo類intlistcount=list.size();TrainReqmatbillVO[]vos=newTrainReqmatbillVO[listcount];for(inti=0;i<vos.length;i++){ vos[i]=(TrainReqmatbillVO)list.get(i);}結果集控制在NC持久層中為了防止執(zhí)行大查詢后返回結果集合過多導致系統(tǒng)內存溢出系統(tǒng)默認設置了最大返回結果集行數是10萬行,如果如要返回更多行數或者不限制返回行數,需要做如下設置:在SuperDMO中設置返回行數SuperDMOsuperDmo=newSuperDMO();superDmo.setMaxRows(行數);如果rows=-1表示不限制返回行數在BaseDAO中設置返回行數BaseDAObaseDao=newBaseDAO();BaseDAO.setMaxRows(行數);如果rows=-1表示不限制返回行數在ResultsetProcessor中設置返回行數BaseProcessorprocessor=newArrayListProcessor();Processor.setMaxRows(行數);在結果集中設置返回行數CrossDBResultsetresultset=(CrossDBResultset)rs;Resultset.setMaxRows(行數);第二篇中級篇經過入門篇的學習,你已經初步了解了NC的環(huán)境,使用和技術規(guī)范。但是離真正的業(yè)務開發(fā)還差很遠,通過本篇的學習,你將真正進入NC的業(yè)務開發(fā),了解NC單據的開發(fā),數據庫操作,報表等技術,通過本章的學習,你將可以具備實用的需求業(yè)務開發(fā)能力。元數據建模內容概述本文檔主要介紹了如何基于元數據進行業(yè)務建模,以及如何在運行時對元數據進行管理。最后列舉了元數據的一些典型應用。目的是盡可能地讓大家在使用元數據的時候更加方便。關于元數據本身的代碼架構,以及元數據的基本概念,請參見《NCV5.5-元數據開發(fā)紅皮書》。詳細介紹新建元數據模型為方便操作,將eclipse設為“NC模型設計器”模式,如下圖。建立元數據模型的流程如下:建立模型文件模型文件概念:一個模型文件(bmf文件),對應一個元數據模型,對應一個業(yè)務組件。本例具體操作:如下圖,在[MDP資源瀏覽器]中,新建模型文件,輸入模型文件名。建立數據實體一個數據實體,可以理解為對應一個數據庫表。一張主子表的單據應包含一個主實體、一個子實體。一個bmf文件中,有且僅有一個主實體。[建立數據實體]總結為4個必要步驟:1建立空實體,2指定實體的properties,3為實體添加屬性,4實現業(yè)務接口。建立空實體操作簡介如上圖,在工具箱中,點擊“實體”,然后在左側畫布區(qū)域點擊,即可建立一個空實體。建立后的實體如下圖所示。本例具體操作本示例需要建立兩個實體,如下表實體對應數據表對應VO主實體采購訂單主表采購訂單主VO子實體采購訂單子表采購訂單子VO指定數據的properties操作簡介如上圖,選中實體對象,在Properties頁簽中指定實體的property值。下表為關鍵property值代表的含義。propertyvalue訪問器類型AggVO:指聚合實體,主實體要設為這個POJO:暫不知含義NCVO:指普通實體,子實體要設為這個包裝類名當選擇AggVO時,才出現。指聚合VO類類名稱指VO類名名稱實體名稱,一般設為VO名稱相同缺省表名數據庫表名顯示名稱在畫布中的顯示名稱,在NC元數據管理中的顯示名稱主屬性實體的主鍵,需要[為實體添加屬性]后指定本示例的具體操作本例中,按下表,指定實體的properties。PropertyValue主實體訪問器類型AggVO包裝類名自動生成類名稱自動生成名稱OrderHVO缺省表名ln_order_h顯示名稱采購訂單主表主屬性訂單主鍵([為實體添加屬性]后指定)子實體訪問器類型NCVO包裝類名自動生成類名稱自動生成名稱OrderBVO缺省表名ln_order_b顯示名稱采購訂單子表主屬性明細主鍵([為實體添加屬性]后指定)為實體添加屬性操作簡介如上圖,在[模型視圖]中增加實體屬性。上圖中關鍵的列含義解釋見下表:列value名稱屬性在VO中的名稱顯示名稱在畫布實體中的顯示名稱,NC元數據管理中的顯示名稱類型樣式SINGLE:簡單類型,UFID、Sring、Integer、UFDouble等REF:參照類型ARRAY:子實體聚合在主實體中,共同組成一張單據。那么,子實體在主實體中就是ARRAY。類型VO中的屬性類型。UFID:主鍵類型,一定要用這個,20位長度;前邊選REF時,要在這兒選擇具體的參照,如:公司目錄。字段名稱數據庫表中的字段名字段類型數據庫表中的字段類型。參照名稱下拉框,選參照時,帶過來的,有時會有多個參照,擇適合自己的。記問策略nc.md.model.access.BodyOfAggVOAccessor:主實體中的聚合子實體,一定選這個實體中必須添加的屬性見下表名稱顯示名稱類型樣式類型字段名稱字段類型參照名稱訪問策略主實體(名稱中的“主鍵”、“子表明細”用的漢字,我為了表達清晰,別傻呵呵的寫漢字,練練英文)主鍵主鍵SINGLEStringpk_order_hcharpk_corp公司IDREF公司目錄Pk_corp公司目錄(集團)vbillno單據號SINGLEStringvbillnovarcharvbillstatus單據狀態(tài)SINGLEIntegervbillstatusintpk_billtype單據類型REF單據類型pk_billtype影響因素單據類型pk_busitype業(yè)務類型REF業(yè)務類型pk_busitype業(yè)務類型voperatorid制單人REF用戶voperatorid用戶vapproveid審批人REF用戶vapproveid用戶dapprovedate審批日期SINGLEUFDatedapprovedateCharvapprovenote審批批語SINGLEStringvapprovenoteVarchar子表明細明細ARRAY采購訂單明細pk_order_hCharnc.md.model.access.BodyOfAggVOAccessor賦值方法:在此處加上此字段即可,不用為其手工設置類型樣式、類型,在完成下一步操作“設置組合關系”時,會自動賦值。但“字段名稱”你千萬別省事,一般設為與主鍵相同,代表此屬性是子表的外鍵。子實體(其實,除了主鍵,沒有必須的屬性)子表主鍵設置組合關系操作簡介如上圖,在[工具箱]中點擊組合,從主實體畫向子實體。完成后,選中新畫的組合關系,在[Properties]頁簽中為其設置屬性值,如下圖,關鍵的Property介紹如下Propertyvalue顯示名稱畫布中的組合名稱。源屬性選擇:主實體中建立的那個ARRAY屬性,子表明細。此將作為主表在子表中的外鍵。目標組合的目標,也就是子實體源點組合的源點,也就是主實體實現業(yè)務接口操作簡介業(yè)務接口詳細使用可見《NCV5.5-元數據建模及管理紅皮書》。
如上圖,在[MDP資源瀏覽器]的引用模型中,找到需要引用實現的業(yè)務接口,鼠標拖拽到畫布,如上圖,在[工具箱]中點擊“業(yè)務接口實現”,由實體畫向業(yè)務接口,操作完成。本示例的具體操作本示例中,元數據的主實體要實現如下業(yè)務接口:接口名接口路徑作用流程信息獲取引用模型\uap\pf\pfbizitf.bmf指定制單人、單據號等。沒有此接口,保存不了單據,拋沒有實現IFlowBusInf接口異常。交換前后對單據VO的調整處理同上數據交換時使用單據主子VO查詢同上參照本單據時使用業(yè)務接口屬性映射完成此步之前,要選中主實體,在[模型視圖]中完成。指定模型文件的Properties操作簡介如上圖,在畫布空白區(qū)域點擊,在[properties頁簽]中,指定property值,關鍵property含義見下表:propertyvalue顯示名稱起一個可讀的名字主實體這兒選“采購訂單主表”發(fā)布元數據在保證中間已啟動、且數據庫連接正常的情況下,在畫布區(qū)城右擊(如上圖),點擊“發(fā)布元數據”。若發(fā)布元數據時,出現如下圖所示的錯誤,則說明沒有啟動中間件,或數據庫連接有問題。導出JAVA源代碼操作簡介在中間件已啟動、且數據庫連接有問題時,右鍵數據實體(如上圖),點擊“導出為JAVA源文件”,在隨后彈出的導出路徑選擇框中,選擇導出到{%當前eclipse工程%/src/public包}。生成SQL腳本并執(zhí)行操作簡介啟動中間件、連接數據庫,右鍵畫布任意區(qū)域(如上圖),點擊“生成建庫SQL腳本并執(zhí)行”,在隨后彈出的路徑選擇框中,選擇任意有意義的路徑。最終成果經過上述步驟,元數據模型完成,其實,我們還附帶完成了導出VO代碼、執(zhí)行建表腳本的操作。最終的完成的成果見下表。成果項成果描述元數據模型即bmf文件,元數據模型如下圖。若以后修改此文件,則需要重新發(fā)布元數據。VO代碼聚合VO、主VO、子VO。SQL腳本數據庫建表腳本。數據表數據表已建立到數據庫中功能建模內容概述NC中最重要的概念就是單據,幾乎大部分業(yè)務數據錄入都是通過單據完成,所以單據開發(fā)是NC中最重要的技術。單據開發(fā)中重要的技術是單據模板和UI工廠。我們開發(fā)可以通過集成開發(fā)工具向導完成初步開發(fā),經過集成開發(fā)工具設計的單據,已經可以完成日常的操作,比如增刪改,審核等工作,如果有需要,可以把集成開發(fā)工具生成的代碼導出到eclipse,然后繼續(xù)修改,完成復雜業(yè)務邏輯功能。UAP發(fā)展到現在,已經提供了不少二次開發(fā)工具和其他輔助性開發(fā)工具,更重要的是,也同時積累下來了一些標準的開發(fā)流程。作為NC內部和外部的開發(fā)者,通常的疑惑是如何使用這些工具,以及標準開發(fā)流程到底是什么(比如在表單開發(fā)中,何時該導入數據字典,何時配置單據模板)。NC集成開發(fā)工具(UAPDeveloperWorkshop)的目標就是:集成UAP現有的所有二次開發(fā)工具,對其進行一定的組織;集成內置標準開發(fā)流程的(具有增值性)開發(fā)工具,比如表單開發(fā)工具、報表開發(fā)工具,以插件的形式組裝起來。詳細介紹進入Workshop登陸到NC后,點擊功能節(jié)點客戶化/二次開發(fā)工具/UAP集成開發(fā)工具,可打開下面的頁面:點擊最左邊的圖標即可進入UAP集成開發(fā)工具中,主界面為:上面菜單和工具欄,主要針對中心編輯區(qū)。組件導航和組件資源導航兩個頁簽,中心是用戶編輯
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新生兒口腔衛(wèi)生保健制度
- 環(huán)衛(wèi)公共衛(wèi)生間管理制度
- 浉河區(qū)村衛(wèi)生室規(guī)章制度
- 文化中心衛(wèi)生工工作制度
- 小學衛(wèi)生室疾控制度
- 衛(wèi)生院藥房安全管理制度
- 衛(wèi)生區(qū)域檢查制度
- 美發(fā)管衛(wèi)生管理制度
- 衛(wèi)生部二十二項管理制度
- 食品企業(yè)衛(wèi)生工管理制度
- CJ/T 325-2010公共浴池水質標準
- GB/T 10810.1-2025眼鏡鏡片第1部分:單焦和多焦
- 新版GCP培訓課件
- 客戶開發(fā)流程圖
- 音樂節(jié)活動場地租賃合同
- 風險管理顧問協(xié)議
- 一年級下冊字帖筆順
- 2024屆高考語文復習:散文訓練王劍冰散文(含解析)
- SWITCH暗黑破壞神3超級金手指修改 版本號:2.7.7.92380
- 二尖瓣狹窄講課課件
- 腸造瘺術后護理查房
評論
0/150
提交評論