版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
3.1單表功能開發(fā)深圳市信息職業(yè)技術(shù)學(xué)院需求說明及效果01目
錄單表UML建模02單表功能開發(fā)實現(xiàn)步驟03數(shù)據(jù)庫表生成及菜單配置04效果展示及功能驗證05知識回顧業(yè)務(wù)端工程項目的搭建;網(wǎng)頁端工程項目的搭建;桌面端工程項目的搭建;項目工程目錄結(jié)構(gòu)及規(guī)范;項目運行原理。學(xué)習(xí)目標通過本節(jié)學(xué)習(xí)可以:掌握單表功能的UML建模;掌握單表功能的開發(fā)實現(xiàn),能獨立完成單表功能的開發(fā);掌握單表功能的菜單配置;掌握單表的數(shù)據(jù)庫表和字段是如何生成的;能夠根據(jù)需求對完成的功能進行測試;能夠修復(fù)測試過程中的BUG。01需求說明及效果單表功能開發(fā)需求說明需求說明單表的功能開發(fā),以讀者分類功能的開發(fā)為例。功能邏輯列屬性:類別號,類別名稱,可借書數(shù)量,可借書天數(shù),修改人和修改時間操作命令:查詢、添加、復(fù)制添加、修改、刪除、保存、導(dǎo)出查詢條件:類別號和類別名稱編輯模式:行內(nèi)編輯類別號非空非重復(fù),且修改時只讀類別名稱非空類別號和類別名稱最大可輸入長度為40可借書數(shù)量最小值為1本,且不允許輸入小數(shù)和負數(shù)可借書天數(shù)最大值為180天,且不允許輸入小數(shù)和負數(shù)修改人和修改時間列寬設(shè)置為200;效果效果02單表UML的建模思考題單表UML建模使用的建模工具是?UML建模UML建模1、雙擊打開ModelFirst工具,右邊的項目總管的命名層級與項目工程一致,在中間設(shè)計部分“右鍵--新建--類”。UML建模2、根據(jù)需求說明,進行UML建模如下:UML建模UML建模3、建好的模型如下,完成后保存建模。UML建模UML建模4、建好的模型如下,完成后保存建模(注意要保存到一個有讀寫權(quán)限的文件夾下)。UML建模生成代碼5、選中“類”右鍵“生成代碼”。生成代碼生成代碼6、選中2018下面的模板(Entity.mft和WebViewConfig.mft),點擊“Generate”生成代碼。生成代碼03單表功能開發(fā)實現(xiàn)步驟思考題單表功能開發(fā)的查詢面板和查詢條件是如何進行開發(fā)實現(xiàn)的?拷貝生成文件到項目中1、在“生成文件列表”中,選擇ReaderCat這行數(shù)據(jù),右鍵“打開所在文件夾”(如左圖),連同文件夾一起復(fù)制粘貼到對應(yīng)的服務(wù)端工程中(如右圖)??截愇募椒?wù)端工程拷貝生成文件到項目中2、點擊ReaderCat類,添加名稱空間的使用,生成不報錯。處理報錯和查詢面板配置拷貝生成文件到項目中3、在“生成文件列表”中,選擇ReaderCatViewConfig這行數(shù)據(jù),右鍵“打開所在文件夾”(如左圖),連同文件夾一起復(fù)制粘貼到對應(yīng)的客戶端工程中(如右圖)??截愇募絎eb端工程拷貝生成文件到項目中4、生成代碼不報錯,重寫查詢方法配置查詢條件。處理報錯和查詢條件配置類別號修改只讀設(shè)置5、類別號修改時只讀,描述和實現(xiàn)如下。修改只讀實現(xiàn)說明:后臺獲取或者設(shè)置實體的操作狀態(tài)都可以用PersistenceStatus進行操作,這個屬性在后臺會頻繁用到。隱藏創(chuàng)建人和創(chuàng)建時間6、列屬性配置:類別號,類別名稱,可借書數(shù)量,可借書天數(shù),修改人和修改時間。列屬性配置說明:列表默認是將創(chuàng)建人、創(chuàng)建時間、修改人和修改時間顯示的,如果要隱藏需要手動設(shè)置設(shè)置修改人和修改時間列寬7、修改人和修改時間列寬設(shè)置為200。列寬設(shè)置界面驗證設(shè)置8、類別號非空非重復(fù),類別名稱非空;類別號和類別名稱最大可輸入長度為40。界面驗證設(shè)置界面驗證設(shè)置9、可借書數(shù)量最小值為1本,且不允許輸入小數(shù)和負數(shù);可借書天數(shù)最大值為180天,且不允許輸入小數(shù)和負數(shù)。界面驗證設(shè)置界面驗證設(shè)置設(shè)置完成后,需要在實體元數(shù)據(jù)中“更新”或者“選擇更新”,生成對應(yīng)規(guī)則為啟用才會生效,這一步可以配置菜單后再一起操作。界面驗證設(shè)置注意:實體元數(shù)據(jù)生成的規(guī)則,即使代碼把相應(yīng)規(guī)則刪掉了,這里的規(guī)則也不會自動刪除,界面的驗證還會生效,如果要移除需要手動進行刪除或者是在規(guī)則中禁用。知識擴展對生成的實體進行一個簡單的說明是為了后續(xù)如果不通過實體建模通過代碼實現(xiàn),知道怎么去定義一個實體進行功能開發(fā)實現(xiàn),或者是實體出現(xiàn)了問題,知道從哪些地方去排查。實體配置說明知識擴展ViewConfig界面配置說明。界面配置說明知識擴展列屬性配置。界面配置說明初始菜單配置11、在Web端工程(SIE.Web.LibMan)的LibModule中配置初始菜單。初始菜單配置04數(shù)據(jù)庫表生成及菜單配置思考題通過程序的升級數(shù)據(jù)庫功能,除了生成表還會生成?生成數(shù)據(jù)庫表1、運行項目,在“實體元數(shù)據(jù)”中升級數(shù)據(jù)庫表和序列,生成完成后會在數(shù)據(jù)庫中新建一張表和兩個序列如右圖。生成表更新元數(shù)據(jù)2、更新實體元數(shù)據(jù):我們在ReaderCat實體中加了驗證,如果不進行更新操作,添加的驗證不會生效。更新規(guī)則配置菜單3、配置菜單。配置菜單05效果展示及功能驗證效果預(yù)覽點擊功能地圖中剛剛配置的菜單,效果如下。效果預(yù)覽效果預(yù)覽驗證通過的數(shù)據(jù)可以正常保存數(shù)據(jù),驗證不通過會有對應(yīng)的提示信息,這樣一個單表功能就開發(fā)完成了。效果預(yù)覽練習(xí)1、以下關(guān)于ModelFirst實體建模,類的屬性說法正確的是()A:同一個類的屬性可以重名;
B:類屬性的備注不添加,不會有任何影響;C:類的屬性名可以是Id;
D:類的屬性名不能為CreateBy。2、
SMOM開發(fā)界面視圖配置方法中,首先執(zhí)行的是哪個視圖配置方法()A:ConfigView; B:ConfigListView;C:ConfigDetailsView; D:ConfigQueryView。DA本章小結(jié)本章主要講解了工業(yè)管理軟件單表功能的開發(fā),包括:根據(jù)需求進行UML建模;根據(jù)UML選擇模型生成代碼;將生成的代碼拷貝到項目中根據(jù)業(yè)務(wù)需求修改完善代碼;配置初始菜單;運行項目生成數(shù)據(jù)庫表、更新元數(shù)據(jù)和配置菜單;根據(jù)業(yè)務(wù)需求對完成的功能進行測試和問題修復(fù)。單表功能在工業(yè)管理軟件開發(fā)中較基礎(chǔ)也較重要,學(xué)員必須掌握,為接下來的學(xué)習(xí)打下基礎(chǔ)。THANKYOU深圳市信息職業(yè)技術(shù)學(xué)院3.2帶關(guān)系單表功能開發(fā)深圳市信息職業(yè)技術(shù)學(xué)院需求說明及效果01目
錄帶關(guān)系單表UML建模02帶關(guān)系單表功能開發(fā)實現(xiàn)步驟03數(shù)據(jù)庫表生成及菜單配置04效果展示及功能驗證05知識回顧根據(jù)需求進行單表功能UML建模;單表功能的開發(fā)實現(xiàn)步驟;初始菜單配置;數(shù)據(jù)庫表和序列的生成;實體元數(shù)據(jù)的更新生成規(guī)則;配置菜單及功能驗證學(xué)習(xí)目標通過本節(jié)學(xué)習(xí)可以:掌握帶關(guān)系單表功能的UML建模;掌握帶關(guān)系單表功能的開發(fā)實現(xiàn),能獨立完成帶關(guān)系單表功能的開發(fā);掌握帶關(guān)系單表功能的菜單配置;掌握帶關(guān)系單表的數(shù)據(jù)庫表和字段是如何生成的;能夠根據(jù)需求對完成的功能進行測試;能夠修復(fù)測試過程中的BUG。01需求說明及效果帶關(guān)系單表功能開發(fā)需求說明需求說明開發(fā)一個讀者管理功能,讀者管理的類別號關(guān)聯(lián)到讀者分類的類別號,具體業(yè)務(wù)描述如下:功能邏輯列屬性:讀者編號、姓名、類別號(下拉選擇實現(xiàn),取的是讀者分類的類別號)、類別名稱(類別名稱根據(jù)選擇的類別號自動帶出,只讀)、單位、手機號、微信、已借書數(shù)量、創(chuàng)建人、創(chuàng)建時間、修改人和修改時間操作命令:查詢、添加、修改、刪除、復(fù)制新增、保存、導(dǎo)出查詢條件:讀者編號、姓名、類別號、修改時間(默認當(dāng)前周)編輯模式:行內(nèi)編輯讀者編號非空,姓名非空,類別號非空,單位非空讀者編號和姓名最大可輸入長度為20效果效果02帶關(guān)系單表的UML建模思考題數(shù)據(jù)庫外鍵關(guān)系在UML建模中是如何實現(xiàn)的?UML建模UML建模1、將業(yè)務(wù)需求轉(zhuǎn)化為UML建模,實現(xiàn)如下,類別號通過關(guān)聯(lián)關(guān)系實現(xiàn),類別名稱不在模型中體現(xiàn)。UML建模UML建模2、類屬性的類型和驗證如下。UML建模3、“類別號”通過“關(guān)聯(lián)”關(guān)系去關(guān)聯(lián)了讀者分類的實體。UML建模UML建模4、建好模型后,保存UML模型,選擇讀者管理的類,右鍵-生成代碼。UML建模生成代碼5、選中2018下面的模板(Entity.mft和WebViewConfig.mft),點擊“Generate”生成代碼。生成代碼03帶關(guān)系單表功能開發(fā)實現(xiàn)步驟思考題類別號的下拉列表要正常顯示和操作,需要做哪些開發(fā)實現(xiàn)?拷貝生成文件到項目中1、在“生成文件列表”中,選擇ReaderMan這行數(shù)據(jù),右鍵“打開所在文件夾”,連同文件夾一起復(fù)制粘貼到對應(yīng)的服務(wù)端工程中??截愇募椒?wù)端工程拷貝生成文件到項目中2、點擊ReaderMan類,添加名稱空間的使用,生成不報錯。處理報錯和查詢面板配置拷貝生成文件到項目中3、同樣的在“生成文件列表”中,選擇ReaderManViewConfig這行數(shù)據(jù),右鍵“打開所在文件夾”,連同文件夾一起復(fù)制粘貼到對應(yīng)的客戶端工程中??截愇募娇蛻舳斯こ炭截惿晌募巾椖恐?、添加名稱空間的使用,生成代碼不報錯,重寫查詢方法配置查詢條件。處理報錯和查詢條件配置下拉選擇配置5、實體引用屬性說明:通過類圖關(guān)聯(lián)關(guān)系生成的實體引用屬性不會生成label,需要在實體中手動添加Label。下拉選擇配置下拉選擇配置6、關(guān)聯(lián)關(guān)系會生成兩個屬性名,一個是id,一個是關(guān)聯(lián)的實體,說明如下。下拉選擇配置下拉選擇配置7、引用屬性界面配置說明:通過類圖生成的ViewConfig的引用屬性是用的實體屬性,會造成N+1的問題,需要調(diào)整為Id去處理。下拉選擇配置調(diào)整為:下拉選擇配置8、下拉表格列和數(shù)據(jù)顯示不出來,需要在關(guān)聯(lián)的實體對應(yīng)的界面中去配置選擇視圖的列屬性;如類別號關(guān)聯(lián)的是讀者分類,則在讀者分類的界面去配置選擇視圖的屬性,如下。下拉選擇配置下拉選擇配置9、配置前后對比。下拉選擇配置下拉顯示配置10、下拉表格配置好后,發(fā)現(xiàn)選擇的數(shù)據(jù)在界面無法顯示,應(yīng)該如何配置。下拉顯示配置下拉顯示配置11、通過在關(guān)聯(lián)實體上標記特性顯示成員DisplayMember進行配置。下拉顯示配置下拉查詢條件配置12、下拉彈出列表查詢條件的配置,默認是以顯示名稱作為模糊查詢條件,如果還要配置其他的查詢條件,可以在實體中配置QueryMembers。下拉查詢條件配置下拉聯(lián)動設(shè)置13、類別名稱因為是只讀顯示,這里我們使用視圖屬性實現(xiàn),視圖屬性屬于界面操作屬性,不映射數(shù)據(jù)庫字段。下拉聯(lián)動設(shè)置注意:視圖屬性依賴于引用屬性,如果實體中沒有引用屬性,無法使用視圖屬性。下拉聯(lián)動設(shè)置14、聯(lián)動顯示在界面中配置,通過框架默認下拉編輯器UsePagingLookUpEditor的DicLinkField進行配置。下拉聯(lián)動設(shè)置注意:dic字典的value值,只能貪婪加載一層(也就是只支持“實體.引用屬性.屬性名”,不支持“實體.引用屬性.引用屬性.屬性名”)。下拉聯(lián)動設(shè)置15、選擇或者是切換“類別號”,“類別名稱”的內(nèi)容會自動變更對應(yīng)選擇“類別號”關(guān)聯(lián)的“類別名稱”。下拉聯(lián)動設(shè)置注意:1.如果界面的查詢方法重寫了,重寫的查詢方法一定要加貪婪加載,否則默認查詢帶出的類別名稱是空白的;2.該功能是使用的框架自帶的查詢,框架默認做了貪婪加載,不需要額外處理。初始菜單配置在Web端工程(SIE.Web.LibMan)的LibModule中配置初始菜單。初始菜單配置04數(shù)據(jù)庫表生成及菜單配置生成數(shù)據(jù)庫表1、運行項目,在“實體元數(shù)據(jù)”中升級數(shù)據(jù)庫表和序列,生成完成后會在數(shù)據(jù)庫中新建一張表和兩個序列如右圖。生成表更新元數(shù)據(jù)2、更新實體元數(shù)據(jù):我們在ReaderMan實體中加了驗證,如果不進行更新操作,添加的驗證不會生效。更新規(guī)則配置菜單3、配置菜單。配置菜單05效果展示及功能驗證效果預(yù)覽點擊功能地圖中剛剛配置的菜單,效果如下。效果預(yù)覽效果預(yù)覽驗證通過的數(shù)據(jù)可以正常保存數(shù)據(jù),驗證不通過會有對應(yīng)的提示信息,這樣一個帶關(guān)系單表功能就開發(fā)完成了。效果預(yù)覽練習(xí)1、在實體類中任何情況下都可以使用視圖屬性()2、設(shè)置下拉列表選擇之后的顯示名稱是在實體上標記DisplayMember特性,該特性關(guān)系的屬性可以是引用實體或者是視圖屬性()3、本地代碼調(diào)試中,SMOM開發(fā)中配置的菜單顯示不出來,可能的原因()A:WebClient調(diào)試工程可能沒有添加對應(yīng)菜單的工程引用;B:功能對應(yīng)的客戶端工程選擇的目標框架不符合要求;C:功能對應(yīng)的客戶端工程的初始化類有沒有添加模塊標記特性,如果添加了,可能添加的不對;D:沒有在菜單功能中進行模塊初始化操作;錯錯ABCD本章小結(jié)本章主要講解了工業(yè)管理軟件帶關(guān)系單表功能的開發(fā),包括:根據(jù)需求進行UML建模;根據(jù)UML選擇模型生成代碼;帶關(guān)系單表功能的開發(fā)步驟;配置初始菜單;運行項目生成數(shù)據(jù)庫表、更新元數(shù)據(jù)和配置菜單;根據(jù)業(yè)務(wù)需求對完成的功能進行測試和問題修復(fù);能夠理解和區(qū)分單表和帶關(guān)系單表開發(fā)的異同點。帶關(guān)系單表功能開發(fā)需要在單表的基礎(chǔ)上進行學(xué)習(xí),這部分的內(nèi)容在工業(yè)管理軟件開發(fā)中較基礎(chǔ)也較重要,學(xué)員必須掌握。THANKYOU深圳市信息職業(yè)技術(shù)學(xué)院3.3主從表功能開發(fā)深圳市信息職業(yè)技術(shù)學(xué)院需求說明及效果01目
錄主從表UML建模02主從表功能開發(fā)實現(xiàn)步驟03數(shù)據(jù)庫表生成及菜單配置04效果展示及功能驗證05知識回顧根據(jù)需求進行帶關(guān)系單表功能UML建模;帶關(guān)系單表功能的開發(fā)實現(xiàn)步驟;下拉選擇列表、顯示名稱、查詢條件的開發(fā)配置;初始菜單配置;數(shù)據(jù)庫表和序列的生成;實體元數(shù)據(jù)的更新生成規(guī)則;配置菜單及功能驗證學(xué)習(xí)目標通過本節(jié)學(xué)習(xí)可以:掌握主從表功能的UML建模;掌握主從表功能的開發(fā)實現(xiàn),能獨立完成主從表功能的開發(fā);掌握主從表功能的菜單配置;掌握主從表的數(shù)據(jù)庫表和字段是如何生成的;能夠根據(jù)需求對完成的功能進行測試;能夠修復(fù)測試過程中的BUG;通過主從表的開發(fā)能夠延伸出多個從、主從孫結(jié)構(gòu)的開發(fā)實現(xiàn);01需求說明及效果帶關(guān)系單表功能開發(fā)需求說明需求說明以圖書分類功能的開發(fā)為例,功能描述如下:功能邏輯主列表屬性:分類編碼、分類名稱、圖書狀態(tài)(枚舉,包括在館和不在館)、備注、創(chuàng)建人、創(chuàng)建時間、修改人和修改時間主列表操作命令:查詢、添加、修改、刪除、導(dǎo)出查詢條件:分類編碼、分類名稱、圖書狀態(tài)明細列表屬性:小類編碼、小類名稱、備注、創(chuàng)建人、創(chuàng)建時間、修改人和修改時間明細列表操作命令:添加、修改、刪除、復(fù)制添加、保存和導(dǎo)出主和明細布局4:6顯示主編輯模式:表單編輯;明細編輯模式:行內(nèi)編輯主表添加修改命令兩列顯示,備注占三行兩列分類編碼和分類名稱非空,分類編碼和分類名稱非重復(fù),分類編碼最大輸入長度為15,類別名稱最大輸入長度為50明細添加修改驗證小類編碼和小類名稱非空,分類編碼最大輸入長度為15,類別名稱最大輸入長度為50效果效果02主從表的UML建模思考題主從結(jié)構(gòu)的關(guān)系在UML建模中是如何實現(xiàn)的?UML建模UML建模1、圖書大類的建模:建模只建業(yè)務(wù)相關(guān)屬性,注意業(yè)務(wù)屬性不要跟框架的屬性沖突。UML建模UML建模1、圖書狀態(tài)的枚舉類。UML建模UML建模3、圖書小類的建模:建模只建業(yè)務(wù)相關(guān)屬性,注意業(yè)務(wù)屬性不要跟框架的屬性沖突。UML建模UML建模4、圖書大類和圖書小類的關(guān)系。UML建模5、組合關(guān)系說明。UML建模注意:框架的關(guān)聯(lián)關(guān)系、枚舉、組合關(guān)系,一定是通過關(guān)系進行處理(默認關(guān)系的名稱為空白,會根據(jù)類名去生成,如果要更改關(guān)系的名稱,注意不要跟類中添加的屬性名稱沖突),不要在類中去建模屬性。生成代碼6、建好模型后,保存UML模型,選擇圖書分類的類,右鍵-生成代碼。生成代碼生成代碼7、選中2018下面的模板Entity.mft,點擊“Generate”生成代碼。生成代碼生成代碼8、選擇圖書分類的類,右鍵-生成代碼。生成代碼生成代碼9、選中2018下面的模板WebViewConfig.mft,點擊“Generate”生成代碼。生成代碼03主從表功能開發(fā)實現(xiàn)步驟思考題子屬性在ViewConfig是如何配置實現(xiàn)的?拷貝生成文件到項目中1、在“生成文件列表”中,將Entity.mft模型生成的文件連同文件夾一起復(fù)制粘貼到對應(yīng)的服務(wù)端工程中。拷貝文件到服務(wù)端工程處理報錯和配置查詢面板2、添加名稱空間的使用,生成不報錯,并將圖書大類的[CriteriaQuery]取消注釋。處理報錯和查詢面板配置拷貝生成文件到項目中3、同樣的在“生成文件列表”中,將WebViewConfig.mft模型生成的文件連同文件夾一起復(fù)制粘貼到對應(yīng)的客戶端工程中??截愇募娇蛻舳斯こ烫幚韴箦e4、通過ModelFirst生成的主界面的子屬性是異常的,生成的代碼如下。處理報錯子屬性修改如下:查詢條件配置5、在主實體對應(yīng)的界面配置查詢條件,子實體不配置(主實體配置了查詢面板,子實體不要配置)。查詢條件配置界面配置修改6、主列表設(shè)置父子顯示比例、啟用表單編輯模式、移除復(fù)制新增按鈕
。界面配置修改界面配置修改7、主界面添加修改界面配置。界面配置修改初始菜單配置在Web端工程的初始化類中配置初始菜單。初始菜單配置04數(shù)據(jù)庫表生成及菜單配置生成數(shù)據(jù)庫表1、運行項目,在“實體元數(shù)據(jù)”中升級數(shù)據(jù)庫表和序列,生成表和序列如右圖。生成表更新元數(shù)據(jù)2、更新實體元數(shù)據(jù):我們在圖書大類和圖書小類實體中加了驗證,如果不進行更新操作,添加的驗證不會生效。更新規(guī)則配置菜單3、配置菜單:先更新功能模塊,更新完成后配置菜單配置菜單05效果展示及功能驗證效果預(yù)覽點擊功能地圖中剛剛配置的菜單,效果如下。效果預(yù)覽效果預(yù)覽添加修改命令界面效果。效果預(yù)覽思考題主從結(jié)構(gòu)開發(fā),編輯界面打不開,出現(xiàn)js報錯。總結(jié)1、實體建模的命名要規(guī)范,文件的層級與項目工程的層級保持一致,避免出現(xiàn)不規(guī)范引發(fā)的異常;2、實體建模組合關(guān)系生成出來的是單向的,需要手動將箭頭去掉;3、如果使用代碼段建組合關(guān)系,子和組的引用關(guān)系要指向父;4、實體屬性標記的驗證規(guī)則需要進行實體元數(shù)據(jù)的更新才會生效;5、創(chuàng)建的屬性不要跟框架的屬性沖突;6、通過SQL語句創(chuàng)建的表,除了創(chuàng)建表還得創(chuàng)建表對應(yīng)的序列,否則操作數(shù)據(jù)會出現(xiàn)異常;7、子實體不要進行菜單配置,配置菜單只配置根實體;總結(jié)練習(xí)1、主從表功能開發(fā),使用標準查詢配置界面的查詢條件是在哪里配置?()A:主實體對應(yīng)的ViewConfig的ConfigQueryView方法中配置;B:子實體對應(yīng)的ViewConfig的ConfigQueryView方法中配置;C:主實體上標記特性[CriteriaQuery];D:子實體上標記特性[CriteriaQuery]。2、主從表配置菜單需要把主實體和子實體都配置菜單。()A錯本章小結(jié)本章主要講解了工業(yè)管理軟件主從表功能的開發(fā),包括:根據(jù)需求進行UML建模;根據(jù)UML選擇模型生成代碼;主從表的開發(fā)實現(xiàn)步驟;配置初始菜單;運行項目生成數(shù)據(jù)庫表、更新元數(shù)據(jù)和配置菜單;根據(jù)業(yè)務(wù)需求對完成的功能進行測試和問題修復(fù);能夠?qū)δ苓M行擴展,完成一主多從、主從孫關(guān)系的功能開發(fā)實現(xiàn)。主從表功能開發(fā)的內(nèi)容在工業(yè)管理軟件開發(fā)中較基礎(chǔ)也較重要,學(xué)員必須掌握。THANKYOU深圳市信息職業(yè)技術(shù)學(xué)院3.4平臺通用配置深圳市信息職業(yè)技術(shù)學(xué)院——驗證規(guī)則配置實現(xiàn)目
錄驗證規(guī)則開發(fā)實現(xiàn)示例01框架驗證規(guī)則實現(xiàn)邏輯介紹02框架驗證規(guī)則實現(xiàn)03經(jīng)驗總結(jié)04知識回顧根據(jù)需求進行主從表功能UML建模;主從表功能的開發(fā)實現(xiàn)步驟;初始菜單配置;運行項目生成數(shù)據(jù)庫表、序列、更新元數(shù)據(jù)和配置菜單;能夠獨立進行主從表功能的問題修復(fù);能夠?qū)δ苓M行擴展,完成一主多從、主從孫關(guān)系的功能開發(fā)實現(xiàn)學(xué)習(xí)目標通過本節(jié)學(xué)習(xí)可以:掌握框架驗證規(guī)則包括哪幾種實現(xiàn)方式,不同的實現(xiàn)方式有什么差異?掌握不同驗證規(guī)則的開發(fā)實現(xiàn)步驟;能夠修復(fù)驗證規(guī)則開發(fā)過程中的bug。01驗證規(guī)則開發(fā)實現(xiàn)示例思考題通過前面課程的學(xué)習(xí),我們知道框架驗證可以在哪里進行配置實現(xiàn)?可以在實體屬性中標記規(guī)則特性,然后進行實體元數(shù)據(jù)的更新。業(yè)務(wù)描述業(yè)務(wù)描述讀者分類增加驗證:
讀者分類被讀者管理引用后,不允許刪除讀者管理增加驗證:1、讀者編號、姓名聯(lián)合驗證唯一2、手機號驗證輸入格式3、已借書數(shù)量不能大于讀者分類中維護的可借書數(shù)量開發(fā)實現(xiàn)-讀者分類被讀者管理引用后不允許刪除實現(xiàn)邏輯:可以用框架的規(guī)則去實現(xiàn),引用后不允許刪除使用框架的引用規(guī)則,需要自己在服務(wù)端建一個規(guī)則類,以Rule進行結(jié)尾,繼承NoReferencedRule進行實現(xiàn),如下圖實現(xiàn):開發(fā)實現(xiàn)開發(fā)實現(xiàn)-讀者管理中讀者編號、姓名聯(lián)合驗證唯一實現(xiàn)邏輯:該驗證的實現(xiàn)可以使用非重復(fù)驗證來實現(xiàn),這里以規(guī)則類的方式開發(fā)實現(xiàn):開發(fā)實現(xiàn)開發(fā)實現(xiàn)-讀者管理中手機號輸入格式驗證實現(xiàn)邏輯:該驗證的實現(xiàn)可以使用實體規(guī)則進行驗證,也是需要建一個規(guī)則類進行實現(xiàn):開發(fā)實現(xiàn)開發(fā)實現(xiàn)-已借書數(shù)量不能大于讀者分類中維護的可借書數(shù)量實現(xiàn)邏輯:該驗證的實現(xiàn)也可以通過實體規(guī)則進行驗證。開發(fā)實現(xiàn)注意:以上所有的規(guī)則實現(xiàn)都要進行實體元數(shù)據(jù)的更新才會生效,修改了對應(yīng)的規(guī)則需要重新進行實體元數(shù)據(jù)的更新。思考題前面示例驗證規(guī)則的實現(xiàn)中,繼承的父類包括哪些?02框架驗證規(guī)則實現(xiàn)邏輯介紹框架驗證規(guī)則實現(xiàn)邏輯介紹通過前面單表、主從表的開發(fā)和剛剛的驗證規(guī)則示例中可以看出,我們的規(guī)則可以在實體屬性中標記特性進行實現(xiàn),也可以在服務(wù)端定義規(guī)則類進行實現(xiàn),之間有什么差異呢?從實現(xiàn)可以看出,在實體中標記的特性只能是對該屬性的簡單驗證;對于復(fù)雜驗證或者是屬性之間的聯(lián)合驗證無法在實體中標記特性,就需要引入規(guī)則類進行實現(xiàn)。兩者的相同點就是:實現(xiàn)完成后都需要進行實體元數(shù)據(jù)的更新才會生效。框架驗證規(guī)則實現(xiàn)邏輯框架驗證規(guī)則實現(xiàn)邏輯介紹框架驗證規(guī)則邏輯的實現(xiàn):框架針對單個屬性的簡單驗證是在實體屬性中標記特性進行實現(xiàn)的(這些也可以在驗證方法中進行實現(xiàn)),框架在生成表格或者表單的時候,將屬性的這些特性和屬性對應(yīng)Ext控件一起生成返回到前端,然后前端解析將可以轉(zhuǎn)換為Ext控件的驗證規(guī)則轉(zhuǎn)換為控件規(guī)則,在操作控件時,在對應(yīng)控件中有紅色框框顯示(這種是做了前后端雙重驗證);不能轉(zhuǎn)換的,保存數(shù)據(jù)時給出具體的異常提示(只做了后臺驗證)。對于復(fù)雜的驗證,如規(guī)則類中實現(xiàn)的規(guī)則,是無法解析為對應(yīng)控件的驗證,則是在后臺進行數(shù)據(jù)的驗證處理,即通過RF.Save()保存數(shù)據(jù)前,去調(diào)用實體對應(yīng)的驗證,驗證不通過給出具體的異常提示(走的后臺驗證)??蚣茯炞C規(guī)則實現(xiàn)邏輯03框架驗證規(guī)則的實現(xiàn)思考題框架驗證規(guī)則的實現(xiàn)方式包括幾種?分別是?框架驗證規(guī)則實現(xiàn)方式框架通用的驗證方式,框架提供了三種實現(xiàn)方式,分別為運行時規(guī)則、標準規(guī)則和預(yù)編譯規(guī)則。1、運行時規(guī)則:1)通過在實體元數(shù)據(jù)模塊進行運行時配置的規(guī)則,如字段長度、非空等驗證。如果是部署的服務(wù),添加或者修改了配置規(guī)則,需要重啟服務(wù)。2)在實體屬性中標記特性,只能標記非空,非重復(fù),最大長度,最小長度,最大值和最小值,標記的特性是針對單個屬性的驗證,標記完成后需要對實體元數(shù)據(jù)進行更新操作,驗證才會生效。說明:該種方式實現(xiàn)的規(guī)則如果在實體元數(shù)據(jù)規(guī)則類中把對應(yīng)規(guī)則禁用了,即使在代碼中標記了對應(yīng)的規(guī)則,也不會生效;規(guī)則刪除后,實體元數(shù)據(jù)的規(guī)則不能自動刪除,需要手動把對應(yīng)的規(guī)則刪除或者是禁用。驗證規(guī)則的實現(xiàn)方式框架驗證規(guī)則實現(xiàn)方式2、標準規(guī)則:在實體配置中重寫AddValidations()方法實現(xiàn)規(guī)則驗證,編寫代碼運行項目后立即生效,不可配置。3、預(yù)編譯規(guī)則:通過C#代碼的方式實現(xiàn)驗證規(guī)則,然后在實體元數(shù)據(jù)功能進行更新并配置啟用。包含的規(guī)則父類:實體規(guī)則(繼承EntityRule<T>)、非重復(fù)規(guī)則(繼承NotDuplicateRule<T>)、刪除被引用規(guī)則(繼承NoReferencedRule<T>)說明:預(yù)編譯規(guī)則也需要在實體元數(shù)據(jù)中進行更新才會生效,如果規(guī)則的類名修改了,原來類名生成的規(guī)則不會自動刪除,會根據(jù)新的類名重新生成一條規(guī)則。驗證規(guī)則的實現(xiàn)方式運行時規(guī)則實現(xiàn)1、在“實體元數(shù)據(jù)(數(shù)據(jù)字典)”菜單的“實體規(guī)則”頁簽中,維護規(guī)則,做基礎(chǔ)的驗證。運行時規(guī)則實現(xiàn)說明:在項目開發(fā)階段不建議在該界面直接維護規(guī)則。運行時規(guī)則實現(xiàn)2、在實體屬性中配置驗證規(guī)則,包含的驗證:
非空驗證:[Required]
非重復(fù)驗證:[NotDuplicate]
最大長度驗證:[MaxLength(40)]
最小長度驗證:[MinLength(2)]
最大值驗證:[MaxValue(9999)]
最小值驗證:[MinValue(1)]
示例:運行時規(guī)則驗證示例,如讀者分類中類別號的驗證:運行時規(guī)則實現(xiàn)運行時規(guī)則實現(xiàn)注意事項:1、驗證要生效,必須進行實體元數(shù)據(jù)的更新,且規(guī)則狀態(tài)是啟用狀態(tài)才會生效;2、實體屬性配置的規(guī)則刪除,元數(shù)據(jù)生成的規(guī)則不會自動刪除,需要手動刪除或者禁用,否則規(guī)則還會生效;3、引用屬性的非空驗證是通過屬性的類型進行驗證的,不要在引用屬性中標記非空特性[Required],否則非空驗證的提示會提示兩次。運行時規(guī)則實現(xiàn)標準規(guī)則實現(xiàn)標準規(guī)則是在實體配置中重寫添加驗證方法AddValidations進行實現(xiàn):標準規(guī)則實現(xiàn)1、標準規(guī)則中可以實現(xiàn)運行時規(guī)則和預(yù)編譯規(guī)則中實現(xiàn)的所有規(guī)則(雖然可以實現(xiàn),但是被引用刪除規(guī)則建議還是使用預(yù)編譯中刪除被引用的規(guī)則實現(xiàn),減少開發(fā)的代碼量);2、標準規(guī)則與運行時和預(yù)編譯規(guī)則的差異:標準規(guī)則不可配置,運行時和預(yù)編譯規(guī)則可配置。標準規(guī)則實現(xiàn)標準規(guī)則中可以實現(xiàn)的驗證:1、非空驗證;rules.AddRule(屬性名,newRequiredRule());2、非重復(fù)驗證,單個和多個屬性的非重復(fù)驗證;
單個屬性非重復(fù)驗證:rules.AddRule(屬性名,newNotDuplicateRule());
多個屬性非重復(fù)驗證
rules.AddRule(newNotDuplicateRule()
{Properties=
{
屬性名1,
屬性名2
},MessageBuilder=(e)=>
{return“驗證不通過的提示信息".L10N();
}
});標準規(guī)則實現(xiàn)標準規(guī)則實現(xiàn)3、長度驗證,包括最小和最大長度的設(shè)置;
rules.AddRule(屬性名,newStringLengthRangeRule(){Min=2,Max=40});4、最大最小值驗證;rules.AddRule(屬性名,newNumberRangeRule(){Min=1,Max=100});5、正則表達式驗證;
rules.AddRule(屬性名,newRegexMatchRule(){Regex=newRegex(@"^((\d{3}-\d{8}|\d{4}-\d{7,8})|(0?(13|14|15|17|18|19)[0-9]{9}))$"),MessageBuilder=(o)=>{ return"電話號碼不正確";}});標準規(guī)則實現(xiàn)標準規(guī)則實現(xiàn)6、實體驗證
rules.AddRule(newHandlerRule(){Handler=(o,e)=>{
//這里可以進行查數(shù)據(jù)庫進行操作,當(dāng)前實體的數(shù)據(jù)不能滿足驗證判斷要求時可查數(shù)據(jù)庫判斷varreader=o.CastTo<實體類>();if(判斷的條件)
e.BrokenDescription=“具體的驗證提示信息".L10nFormat(reader.Name);}});標準規(guī)則實現(xiàn)標準規(guī)則實現(xiàn)示例讀者管理中通過標準規(guī)則驗證實現(xiàn)如下驗證:讀者編號非空,姓名非空,單位非空讀者編號,姓名聯(lián)合驗證唯一讀者編號和姓名最大可輸入長度為20手機號需要驗證格式已借書數(shù)量不能大于可借書數(shù)量標準規(guī)則實現(xiàn)示例預(yù)編譯規(guī)則實現(xiàn)預(yù)編譯規(guī)則也是需要對實體元數(shù)據(jù)進行更新,編寫的規(guī)則才會生效;1、非重復(fù)規(guī)則:繼承NotDuplicateRule<T>,在構(gòu)造函數(shù)中實現(xiàn)非重復(fù)邏輯預(yù)編譯規(guī)則實現(xiàn)[System.ComponentModel.DisplayName(“規(guī)則名稱信息")][System.ComponentModel.Description(“規(guī)則描述信息")]
public
class
XXXRule:NotDuplicateRule<T>
{
public
XXXRule()
{Scope=EntityStatusScopes.Update|EntityStatusScopes.Add;Properties.Add(屬性1);Properties.Add(屬性2);MessageBuilder=(e)=>
{
vart=easT;//e為對應(yīng)的實體
return
“驗證不通過的提示信息[{0}]”.L10nFormat(t.A);//{0}為參數(shù)設(shè)置
};
}
}規(guī)則作用域,用Scope進行設(shè)置,默認為Add和Update。非重復(fù)驗證的屬性,只能設(shè)置數(shù)據(jù)庫存在的字段屬性,且不能是復(fù)雜屬性提示信息,可不設(shè)置,非重復(fù)框架有默認的提示。預(yù)編譯規(guī)則實現(xiàn)2、被引用不允許刪除:繼承NoReferencedRule<T>,在構(gòu)造函數(shù)中實現(xiàn)被引用不能刪除的邏輯。預(yù)編譯規(guī)則實現(xiàn)[System.ComponentModel.DisplayName(“規(guī)則名稱信息")][System.ComponentModel.Description(“規(guī)則描述信息")]
public
class
XXXRule:NoReferencedRule<T>
{
public
XXXRule()
{Scope=EntityStatusScopes.Delete;Properties.Add(被引用的屬性名);MessageBuilder=(e,c)=>
{
varcat=easT;
return
“被引用刪除的提示信息{0}”.L10nFormat(c);
};
}
}規(guī)則作用域,用Scope進行設(shè)置,默認為刪除,通常不用設(shè)置。只能是引用Id屬性,通過其他實體.引用Id屬性名加載出來。驗證不通過的提示信息,引用不允許刪除框架有默認提示信息,如果想修改框架的提示信息可通過此屬性添加,其中e為實體,c為被引用的次數(shù)。預(yù)編譯規(guī)則實現(xiàn)3、實體規(guī)則:繼承EntityRule<T>,在這個規(guī)則中可以實現(xiàn)所有規(guī)則。預(yù)編譯規(guī)則實現(xiàn)[System.ComponentModel.DisplayName("規(guī)則名稱信息")][System.ComponentModel.Description("規(guī)則描述信息")]
public
class
XXXRule:EntityRule<T>
{
public
XXXRule()//構(gòu)造函數(shù)
{Scope=EntityStatusScopes.Add|EntityStatusScopes.Update;//規(guī)則作用域默認為新增和修改,如果是只在添加操作生效,可以對該屬性進行規(guī)則設(shè)置ConnectToDataSource=false;
}
protected
override
voidValidate(IEntityentity,RuleArgse)//驗證方法
{ //這里可以調(diào)用控制器方法對數(shù)據(jù)庫進行操作
vart=entityasT;//entity為當(dāng)前驗證的實體
if(驗證的條件)e.BrokenDescription=“驗證不通過的提示信息{0}".L10nFormat(t.A);
}
}是否連接數(shù)據(jù)倉庫,默認為false,如果在驗證方法中有對數(shù)據(jù)庫進行操作,該屬性要設(shè)置為true。思考題標準規(guī)則的實體驗證和預(yù)編譯規(guī)則的標準規(guī)則,都能實現(xiàn)所有的驗證,有什么區(qū)別?04經(jīng)驗總結(jié)經(jīng)驗總結(jié)標準驗證AddValidations和預(yù)編譯驗證(在服務(wù)端編寫驗證規(guī)則類)是兩種不一樣的實現(xiàn)方式,同一邏輯用兩種方式驗證的效果是一樣的,只是其中一種是代碼所見即所得,一種是可配置;在項目上對應(yīng)的驗證邏輯,根據(jù)實際需要選擇其中一種方式實現(xiàn)即可;非重復(fù)驗證盡量使用框架非重復(fù)的子類進行驗證,不要在實體規(guī)則中進行驗證,原因是寫的邏輯比較多,還有可能寫漏,用框架的非重復(fù)驗證會簡單很多,也避免一些不必要的bug出現(xiàn);被引用不允許刪除盡量使用框架的,原因與非重復(fù)驗證一致;String類型的長度驗證,框架默認配置的長度是20,如果有些字段需要設(shè)置為其他的長度限制,需要自己手動設(shè)置,如果框架string類型的長度限制都需要調(diào)整,可以在配置文件中配置DefaultFieldMaximumLength??蚣艿倪@些驗證都是在調(diào)用RF.Save()保存數(shù)據(jù)庫前進行校驗的,使用DB操作數(shù)據(jù)庫驗證不會生效。經(jīng)驗總結(jié)思考題在部署好的服務(wù)中,為什么增加或者修改實體元數(shù)據(jù)對應(yīng)功能的規(guī)則不生效?使用db或者sql語句執(zhí)行數(shù)據(jù)庫保存操作,驗證規(guī)則未生效?修改實體元數(shù)據(jù)的規(guī)則要重啟服務(wù)后才能生效??蚣艿膶嶓w規(guī)則是要在通過實體倉庫保存數(shù)據(jù)前才會執(zhí)行,通過db和sql直接操作數(shù)據(jù)庫不會執(zhí)行。練習(xí)1、框架驗證規(guī)則是什么時候執(zhí)行的()A:數(shù)據(jù)添加時; B:數(shù)據(jù)修改時;C:數(shù)據(jù)保存前; D:數(shù)據(jù)刪除時。2、被引用不允許刪除規(guī)則的作用域是新增和修改。()3、標準規(guī)則需要進行實體元數(shù)據(jù)的初始化才會生效。()C錯錯本章小結(jié)本章主要講解了工業(yè)管理軟件驗證規(guī)則的實現(xiàn),包括:框架驗證規(guī)則的實現(xiàn)邏輯;運行時驗證規(guī)則的開發(fā)實現(xiàn)步驟與配置;標準規(guī)則的開發(fā)實現(xiàn);預(yù)編譯規(guī)則的開發(fā)實現(xiàn);框架驗證規(guī)則是在什么情況下執(zhí)行的。驗證規(guī)則在整個工業(yè)管理軟件開發(fā)中比較重要,學(xué)員要能夠根據(jù)不同的業(yè)務(wù)需求選擇合適的驗證規(guī)則去實現(xiàn)對應(yīng)的業(yè)務(wù)驗證邏輯,并且遇到問題能夠定位和修復(fù)。THANKYOU深圳市信息職業(yè)技術(shù)學(xué)院3.4平臺通用配置深圳市信息職業(yè)技術(shù)學(xué)院——提交事件目
錄提交事件課題導(dǎo)入01提交前事件02提交后事件03經(jīng)驗總結(jié)04知識回顧框架驗證規(guī)則的實現(xiàn)邏輯;運行時驗證規(guī)則的開發(fā)實現(xiàn)步驟與配置;標準規(guī)則的開發(fā)實現(xiàn)步驟;預(yù)編譯規(guī)則的開發(fā)實現(xiàn)步驟;驗證規(guī)則使用的注意事項;學(xué)習(xí)目標通過本節(jié)學(xué)習(xí)可以:掌握提交前事件的開發(fā)實現(xiàn)步驟;掌握提交后事件的開發(fā)實現(xiàn)步驟;掌握使用提交事件應(yīng)該注意哪些問題;了解框架提交事件的應(yīng)用場景。01提交事件課題導(dǎo)入課題導(dǎo)入在做功能開發(fā)時,對于一些功能或者是框架通用的邏輯,我們常規(guī)的開發(fā)思路是寫一個通用的方法,需要用到這個方法時去調(diào)用該方法,這種方式是需要開發(fā)人員自己寫代碼去調(diào)用;提交事件是針對上述這種通用邏輯引入的,將功能的一些通用邏輯寫到提交事件的方法中,由框架統(tǒng)一去執(zhí)行,不需要自己額外去調(diào)用。提交事件介紹提交事件介紹提交事件:分為提交前和提交后事件。提交前事件:針對某個實體,保存之前的通用邏輯處理,可以使用提交前事件處理;程序在調(diào)用RF.Save()保存實體數(shù)據(jù)之前框架會自動去調(diào)用提交前事件的方法執(zhí)行對應(yīng)的邏輯。提交后事件:針對某個實體,保存之后的通用邏輯處理,可以使用提交后事件處理;程序在調(diào)用RF.Save()保存實體數(shù)據(jù)之后框架會自動去調(diào)用提交后事件的方法執(zhí)行對應(yīng)的邏輯。02提交前事件提交前事件開發(fā)示例實現(xiàn)步驟業(yè)務(wù)描述:讀者管理功能數(shù)據(jù)保存前,如果讀者管理的操作為新增時,將讀者管理關(guān)聯(lián)的讀者分類的更新時間設(shè)置為當(dāng)前操作時間。該業(yè)務(wù)實現(xiàn)使用提交前事件來處理,實現(xiàn)步驟如下:1、在服務(wù)端新建一個類,以Submitting結(jié)尾,繼承OnSubmitting,關(guān)聯(lián)實體為讀者管理的實體類提交前事件開發(fā)步驟提交前事件開發(fā)示例實現(xiàn)步驟2、鼠標點擊報錯的地方,實現(xiàn)抽象類。提交前事件開發(fā)步驟提交前事件開發(fā)示例實現(xiàn)步驟3、給提交前事件類增加名稱DisplayName和描述Description信息。提交前事件開發(fā)步驟提交前事件開發(fā)示例實現(xiàn)步驟4、實現(xiàn)業(yè)務(wù)邏輯:讀者管理的操作為新增時,將讀者管理關(guān)聯(lián)的讀者分類的更新時間設(shè)置為當(dāng)前操作時間。提交前事件開發(fā)步驟提交前事件開發(fā)示例實現(xiàn)步驟5、運行項目,進行實體元數(shù)據(jù)的更新,會在讀者管理的提交前事件的子頁簽生成一筆對應(yīng)的數(shù)據(jù),如下:提交前事件開發(fā)步驟提交前事件開發(fā)示例實現(xiàn)步驟6、可以在Invoke方法中設(shè)置斷點,在讀者管理中插入一筆數(shù)據(jù)點擊保存,在讀者分類中查看效果,可以看到修改時間更新了。提交前事件開發(fā)步驟思考題提交前事件的命名規(guī)范?該類是添加在服務(wù)端工程還是客戶端工程?提交前事件繼承的父類是?03提交后事件提交后事件開發(fā)示例實現(xiàn)步驟業(yè)務(wù)描述:讀者管理功能數(shù)據(jù)保存后,如果讀者管理的操作狀態(tài)為修改時,且管理的讀者分類為學(xué)生時,更新對應(yīng)讀者分類的可借書天數(shù),可借書天數(shù)在原來的基礎(chǔ)上加1,當(dāng)可借書天數(shù)>=90時,不執(zhí)行更新操作;該業(yè)務(wù)實現(xiàn)使用提交前事件來處理,實現(xiàn)步驟如下:1、在服務(wù)端新建一個類,以Submitted結(jié)尾,繼承OnSubmitted,關(guān)聯(lián)實體為讀者管理的實體類提交后事件開發(fā)步驟提交后事件開發(fā)示例實現(xiàn)步驟2、鼠標點擊報錯的地方,實現(xiàn)Invoke抽象類。提交后事件開發(fā)步驟提交后事件開發(fā)示例實現(xiàn)步驟3、給類增加名稱DisplayName和描述Description信息提交后事件開發(fā)步驟提交后事件開發(fā)示例實現(xiàn)步驟4、實現(xiàn)業(yè)務(wù)邏輯。提交后事件開發(fā)步驟提交后事件開發(fā)示例實現(xiàn)步驟5、運行項目,進行實體元數(shù)據(jù)的更新,會在讀者管理的提交后事件的子頁簽生成一筆對應(yīng)的數(shù)據(jù),如下:提交后事件開發(fā)步驟提交后事件開發(fā)示例實現(xiàn)步驟6、可以在Invoke方法中設(shè)置斷點,在讀者管理中修改一筆讀者分類為學(xué)生的數(shù)據(jù),在讀者分類中查看效果。提交后事件開發(fā)步驟思考題提交后事件與提交前事件的區(qū)別?04經(jīng)驗總結(jié)經(jīng)驗總結(jié)1、提交前、提交后事件使用要生效,必須進行實體元數(shù)據(jù)更新,狀態(tài)為可用;2、每次修改了提交前或者提交后事件,也必須進行實體元數(shù)據(jù)的更新;3、提交事件后臺代碼刪除,在實體元數(shù)據(jù)對應(yīng)提交事件子列表的數(shù)據(jù)不會刪除,需要手動去提交事件子頁簽將對應(yīng)數(shù)據(jù)禁用,或者是在后臺數(shù)據(jù)庫將數(shù)據(jù)刪除。
提交事件的表為:MDA_ENTITY_SUBMIT_EVENT,通過DISCRIMINATOR區(qū)分為提交前后事件;DISCRIMINATOR=‘A’,為提交前事件;DISCRIMINATOR=‘B’,為提交后事件;經(jīng)驗總結(jié)經(jīng)驗總結(jié)4、提交事件后臺的類名修改了,修改之前通過“更新”生成的提交事件對應(yīng)的數(shù)據(jù)程序不會刪除,會重新再生成一筆數(shù)據(jù);也就是提交事件在“更新”之后修改了類名,需要把修改類名之前的數(shù)據(jù)禁用或者從數(shù)據(jù)庫中刪除。5、提交事件只有通過RF.Save()進行實體保存時才會執(zhí)行,如果是通過DB操作的數(shù)據(jù),或者是其他批量保存,不會執(zhí)行對應(yīng)的提交邏輯。6、編寫提交事件要避免出現(xiàn)死循環(huán),當(dāng)Invoke方法中有通過RF.Save保存提交事件關(guān)聯(lián)的實體就會出現(xiàn)死循環(huán)。經(jīng)驗總結(jié)思考題使用DB或者sql語句保存數(shù)據(jù),提交事件為什么沒執(zhí)行進去?提交事件只有使用RF.Save()保存數(shù)據(jù)才會執(zhí)行。練習(xí)1、框架驗證規(guī)則是什么時候執(zhí)行的()A:數(shù)據(jù)添加時; B:數(shù)據(jù)修改時;C:數(shù)據(jù)保存前; D:數(shù)據(jù)刪除時。2、被引用不允許刪除規(guī)則的作用域是新增和修改。()3、標準規(guī)則需要進行實體元數(shù)據(jù)的初始化才會生效。()C錯錯本章小結(jié)本章主要講解了工業(yè)管理軟件的提交事件,包括:提交事件的使用場景;提交前事件的開發(fā)實現(xiàn)步驟;提交后事件的開發(fā)實現(xiàn)步驟;提交事件的經(jīng)驗總結(jié)。學(xué)員要了解提交事件的使用場景,選擇更切合業(yè)務(wù)場景的方式進行提交事件的開發(fā)實現(xiàn),過程中遇到問題,能夠進行調(diào)試定位問題并修復(fù)。THANKYOU深圳市信息職業(yè)技術(shù)學(xué)院3.4平臺通用配置深圳市信息職業(yè)技術(shù)學(xué)院——控制器與界面分組介紹目
錄控制器實現(xiàn)介紹01框架分組介紹及自定義分組的實現(xiàn)方式02自定義分組的實現(xiàn)示例03自定義分組的注意事項04知識回顧提交事件的使用場景介紹;提交前事件的開發(fā)實現(xiàn)步驟;提交后事件的開發(fā)實現(xiàn)步驟;提交事件的經(jīng)驗總結(jié);學(xué)習(xí)目標通過本節(jié)學(xué)習(xí)可以:掌握控制器的使用;掌握自定義分組的開發(fā)實現(xiàn);掌握自定義分組可能引發(fā)的異常并能對其進行修復(fù);了解框架分組的實現(xiàn)邏輯。01控制器實現(xiàn)介紹控制器類介紹控制器類介紹控制器:主要用于處理業(yè)務(wù)的后端數(shù)據(jù)庫操作的邏輯實現(xiàn),通常一個實體對應(yīng)一個控制器,如實體名為Item,則控制器的名稱為ItemController,對Item進行增刪改查方法的實現(xiàn)在ItemController中進行實現(xiàn)??刂破髅?guī)范:XXXController,即以Controller結(jié)尾??刂破黝悓崿F(xiàn):
控制器類:必須建在服務(wù)端工程中
訪問修飾符:public
繼承:DomainController
方法:非私有方法必須是虛方法virtual,且功能邏輯相似的方法盡量放到一起,方法的編寫與C#基礎(chǔ)的方法編寫規(guī)范一致??刂破黝惙椒ǖ恼{(diào)用:RT.Service.Resolve<控制器類名>().方法名(方法參數(shù));思考題本地代碼啟用代理調(diào)試,客戶端調(diào)用控制器的方法執(zhí)行不了報錯的原因?調(diào)用的控制器方法未標記為virtual。02框架分組介紹及自定義分組的實現(xiàn)方式框架分組介紹框架ViewConfig的默認分組包括:ListView、DetailsView、SelectionView、QueryView、ImportView。框架默認的分組原理:界面首先進入到ConfigView方法中,在該方法中通過對ViewGroup進行分組判斷,如果分組ViewGroup為ListView則進入到ConfigListView方法中,進行列表界面呈現(xiàn)的配置;如果分組ViewGroup為DetailsView則進入到ConfigDetailsView方法中,進行添加修改命令界面呈現(xiàn)配置;如果分組ViewGroup為SelectionView則進入到ConfigSelectionView方法中,進行下拉選擇列表的界面配置;如果分組ViewGroup為QueryView則進入到ConfigQueryView方法中,進行查詢條件的界面配置;如果分組ViewGroup為ImportView則進入到ConfigImportView方法中,進行下載Excel模板的列頭配置??蚣芊纸M介紹自定義分組的實現(xiàn)方式在很多場景下,使用框架默認的列表和表單分組方法是無法滿足項目需求的,比如框架從菜單進入頁面默認是列表界面,如果想點擊菜單就打開為表單;又比如我們希望在表單操作時,新增和修改的操作界面不一樣等等之類的需求,框架提供的默認分組是無法滿足這種個性化的需求,這個時候就需要引入自定義分組來解決這種需求。從前面的框架默認分組原理能夠看出,要使用自定義分組其實就是更改ViewGroup的值,不進入到框架的視圖配置方法中,自己定義視圖配置方法去實現(xiàn)項目需求。框架自定義分組的實現(xiàn)方式包括三種:主界面自定義分組的實現(xiàn)、子列表或者子表單自定義分組的實現(xiàn)、命令自定義分組的實現(xiàn)。自定義分組的實現(xiàn)方式思考題ConfigDetailsView方法默認什么情況下會執(zhí)行進來?設(shè)置編輯模式為表單編輯,點擊添加或者修改按鈕會執(zhí)行進來。03自定義分組的實現(xiàn)示例思考題點擊菜單,進入菜單主界面,展示為表單形式,應(yīng)該如何實現(xiàn)?主界面自定義分組的使用
功能描述:在讀者分類中點擊菜單進入到界面功能,不進入配置列表視圖,而是進入到我們自定義的視圖配置方法中。實現(xiàn)步驟:1、在讀者分類中定義一個分組的常量(這里不直接用字符串是字符串出了問題難定位問題)主界面自定義分組的使用主界面自定義分組的使用
2、在配置菜單中使用分組,分組名為上面定義的常量名。主界面自定義分組的使用主界面自定義分組的使用
3、在讀者分類中自定義一個視圖配置方法。主界面自定義分組的使用主界面自定義分組的使用
4、在讀者分類的配置視圖ConfigView方法中添加分組的判斷,分組為我們自定義的分組名時,調(diào)用步驟3的方法。主界面自定義分組的使用主界面自定義分組的使用
5、效果。主界面自定義分組的使用思考題主從結(jié)構(gòu),主表為表單編輯,從表為行內(nèi)編輯,主界面從表的展示與主表添加修改按鈕從表的展示不一致,如何實現(xiàn)?子列表自定義分組的使用步驟
功能描述:圖書分類添加修改命令中圖書小類使用自定義分組實現(xiàn)。需求描述子列表自定義分組的使用步驟
1、在讀書小類視圖配置中定義一個分組常量。子列表自定義分組的使用子列表自定義分組的使用步驟
2、在圖書大類的明細視圖ConfigDetailsView的圖書小類的子列表屬性中使用分組。子列表自定義分組的使用子列表自定義分組的使用步驟
3、在圖書小類中添加自定義視圖配置方法。子列表自定義分組的使用子列表自定義分組的使用步驟
4、在圖書小類的配置視圖ConfigView方法中添加分組的判斷,分組為我們自定義的分組名,調(diào)用步驟3的方法。子列表自定義分組的使用子列表自定義分組的使用步驟
5、效果。子列表自定義分組的使用說明:附加子列表和附加子表單的自定義分組的實現(xiàn)步驟與子列表自定義分組實現(xiàn)步驟一致。思考題表單編輯模式,添加和修改按鈕的界面配置不一致,應(yīng)該如何實現(xiàn)?命令自定義分組的使用步驟
命令的自定義分組主要是指表單編輯模式下的自定義分組,列表編輯模式(行內(nèi)編輯模式)的操作命令都是在表格內(nèi)操作,沒有分組的設(shè)置。功能描述:這里以圖書分類的添加命令為例,點擊添加命令進入到自定義分組視圖配置的實現(xiàn),如下圖描述。業(yè)務(wù)需求命令自定義分組的使用步驟
1、在讀書大類中添加自定義視圖配置方法。業(yè)務(wù)需求命令自定義分組的使用步驟
2、在讀書大類的ConfigView方法中調(diào)用自定義視圖配置方法。業(yè)務(wù)需求命令自定義分組的使用步驟
3、重寫添加命令(js文件需要嵌入到資源),更改框架默認的ViewGroup(與步驟2的分組名一致),這里只需要掌握命令分組的更改,添加命令的具體使用在添加命令中再詳細介紹。業(yè)務(wù)需求命令自定義分組的使用步驟
4、在讀書大類的ConfigListView方法中替換添加命令。業(yè)務(wù)需求命令自定義分組的使用步驟
5、效果。業(yè)務(wù)需求04自定義分組的注意事項自定義分組注意事項1、自定義分組的分組名盡量不要使用字符串,容易出錯;2、自定義分組一定要記得進行額外授權(quán),否則普通權(quán)限會存在問題;
通過View.DeclareExtendViewGroup(分組名)進行授權(quán)。3、自定義視圖配置方法使用默認命令組合不生效(即View.UseDefaultCommands()失效),必須通過View.UseCommands(WebCommandNames.Add)一個個將命令加上;4、自定義視圖配置方法的屬性后面必須加show(),否則屬性顯示不出來,如下必須將show配置上
View.Property(p=>p.Code).Show();5、自定義視圖配置方法要使用using(View.OrderProperties())對列顯示順序進行排序,否則列顯示順序會亂。注意事項思考題自定義分組普通賬號界面權(quán)限異常的排查思路?1、檢查分配權(quán)限的用戶是否為普通賬號對應(yīng)的庫存組織的管理員;2、有沒有在菜單中進行“更新功能模塊”或“更新選定模塊”;3、自定義的分組名有沒有使用View.DeclareExtendViewGroup()加到額外的視圖中。練習(xí)1、自定義分組的列要按順序顯示,需要在自定義視圖方法中使用()指定列顯示順序。2、自定義分組方法中,列要能正常顯示,需要在屬性列配置后面加()。3、自定義分組普通賬號權(quán)限正常,需要在界面配置ConfigView方法中配置()。4、自定義分組方法中可以使用View.UseDefaultCommands()配置界面命令。()View.OrderProperties()View.DeclareExtendViewGroup(自定義分組名);錯Show()本章小結(jié)本章主要講解了工業(yè)管理軟件的控制器與界面分組介紹,包括:控制器的使用;框架分組的實現(xiàn)邏輯;自定義分組的實現(xiàn)方式;自定義分組的開發(fā)實現(xiàn)示例;自定義分組開發(fā)過程中的注意事項??刂破骱头纸M的使用在工業(yè)管理軟件開發(fā)中比較重要,使用頻率較高,學(xué)員要掌握控制器方法的編寫和調(diào)用,以及自定義分組的開發(fā)實現(xiàn),并了解什么情況下選擇使用自定義分組實現(xiàn)業(yè)務(wù)需求。THANKYOU深圳市信息職業(yè)技術(shù)學(xué)院3.4平臺通用配置深圳市信息職業(yè)技術(shù)學(xué)院——實體和界面配置Api實體屬性實體屬性特性實體特性實體配置實體介紹視圖介紹視圖配置視圖屬性配置知識擴展知識回顧控制器實現(xiàn)介紹;框架分組介紹;自定義分組的實現(xiàn)方式,三種入口的實現(xiàn)方式;自定義分組三種實現(xiàn)方式的實現(xiàn)示例;自定義分組的注意事項;學(xué)習(xí)目標通過本節(jié)學(xué)習(xí)可以:掌握實體包含的特性、實體屬性、屬性標簽;掌握實體的配置;掌握界面的方法及使用;掌握界面方法的屬性配置、命令配置、界面呈現(xiàn)配置;了解實體的組成;了解界面的組成。01實體介紹思考題平臺框架定義的實體通用屬性包括哪些?實體介紹實體介紹1、實體通常會映射數(shù)據(jù)庫,所有新建實體類要建在服務(wù)端工程;2、實體類必須包含在對應(yīng)文件夾下;文件夾以“實體名+S”進行命名;3、實體一定要包含命名空間,且命名空間要規(guī)范,一般為“對應(yīng)工程名+文件夾名”;4、實體一般定義為部分類,直接或間接繼承DataEntity;5、實體類繼承的父實體盡量不要包含子列表屬性,如果包含,子實體又沒有用new關(guān)鍵字覆蓋父實體屬性,BS生成界面會報錯;6、實體類中盡量只包含對應(yīng)的屬性,盡量不要去寫與業(yè)務(wù)邏輯相關(guān)的代碼;實體介紹實體介紹7、實體屬性包含一般屬性、引用屬性、列表屬性、只讀屬性和視圖屬性;默認情況下一般屬性和引用屬性會映射生成數(shù)據(jù)庫表字段,其他的屬性不會。8、創(chuàng)建實體的屬性,我們只建業(yè)務(wù)相關(guān)的屬性,業(yè)務(wù)屬性不要和框架屬性命名沖突,框架定義的屬性包括:Id,CreateBy,CreateDate,InvOrgId,IsPhantom,SyncId,UpdateBy,UpdateDate;框架屬性對應(yīng)數(shù)據(jù)庫表字段如下:9、實體類中的實體配置以“類名+Config”進行命名;02實體屬性一般屬性實體屬性:實體屬性是通過托管屬性進行注冊的,托管屬性通過P<T>.Register()方法進行注冊,T為所注冊的托管屬性的實體所有者(Owner)。一般屬性:普通類型的屬性#region
分類編碼Code///
<summary>///分類編碼///
</summary>[Label("分類編碼")]public
static
readonlyProperty<string>CodeProperty=P<BigBookCat>.Register(e=>e.Code);///
<summary>///分類編碼///
</summary>public
stringCode{get{returnGetProperty(CodeProperty);}set{SetProperty(CodeProperty,value);}}#endregion一般屬性一般屬性支持的屬性類型:stringbool、bool?int、int?,long,long?double、double?DateTime、DateTime?枚舉類型、Nullable<枚舉類型>Byte[]引用屬性引用屬性:引用類型的屬性,包括引用ID和引用實體兩個屬性,必須在同一實體中成對定義,屬性類型為double。引用屬性需指定引用類型ReferenceType,一般引用為Normal,子實體引用父實體為Parent。#region
讀者管理與讀者分類的關(guān)系ReaderCat[Label("類別號")]public
static
readonlyIRefIdPropertyReaderCatIdProperty=P<ReaderMan>.RegisterRefId(e=>e.ReaderCatId,ReferenceType.Normal);///
<summary>///讀者管理與讀者分類的關(guān)系Id///
</summary>public
doubleReaderCatId{get{return(double)GetRefId(ReaderCatIdProperty);}set{SetRefId(ReaderCatIdProperty,value);}}///
<summary>///讀者管理與讀者分類的關(guān)系///
</summary>public
static
readonlyRefEntityProperty<ReaderCat>ReaderCatProperty=P<ReaderMan>.RegisterRef(e=>e.ReaderCat,ReaderCatIdProperty);///
<summary>///讀者管理與讀者分類的關(guān)系///
</summary>publicReaderCatReaderCat{get{returnGetRefEntity(ReaderCatProperty);}set{SetRefEntity(ReaderCatProperty,value);}}#endregion引用屬性引用Id引用實體引用類型,一般外鍵為Normal列表屬性列表屬性:子列表的屬性,一對多關(guān)系中,父實體包含子實體的列表。#region
圖書大類與小類的關(guān)系SmallBookCatList///
<summary>///圖書大類與小類的關(guān)系///
</summary>public
static
readonlyListProperty<EntityList<SmallBookCat>>SmallBookCatListProperty=P<BigBookCat>.RegisterList(e=>e.SmallBookCatList);///
<summary>///圖書大類與小類的關(guān)系///
</summary>publicEntityList<SmallBookCat>SmallBookCatList{get{return
this.GetLazyList(SmallBookCatListProperty);}}#endregion列表屬性只讀屬性只讀屬性:只讀屬性用于表示實體中的一個只讀的數(shù)據(jù)。只讀屬性主要為界面展現(xiàn)層設(shè)計。#region
全名FullName///
<summary>///全名///
</summary>[Label("全名")]public
static
readonlyProperty<string>FullNameProperty=P<BigBookCat>.RegisterReadOnly(e=>e.FullName,e=>e.GetFullName(),CodeProperty,NameProperty);///
<summary>///全名///
</summary>public
stringFullName{ get{return
this.GetProperty(FullNameProperty);}}private
stringGetFullName(){ return
this.Code+"("+this.Name+")";}#endregion只讀屬性視圖屬性視圖屬性:視圖屬性是通過引用屬性懶加載的數(shù)據(jù),主要為界面展現(xiàn)層設(shè)計。如果實體和繼承的父實體中沒有引用屬性,則不能使用視圖屬性。#region
類別名稱CatName
///
<summary>
///類別名稱
///
</summary>[Label("類別名稱")]
public
static
readonlyProperty<string>CatNameProperty=P<ReaderMan>.RegisterView(e=>e.CatName,p=>p.ReaderCat.CatName);
///
<summary>
///類別名稱
///
</summary>
public
stringCatName
{
get{return
this.GetProperty(CatNameProperty);}
}
#endregion視圖屬性通過引用實體.屬性名加載出來視圖屬性的內(nèi)容思考題實體的一般屬性支持哪些類型?03實體屬性特性實體屬性特性屬性名稱標簽(Label):用于在實體屬性上聲明屬性的顯示名稱。必填標簽(Required):聲明實體屬性不能為空,字符串類型屬性會標記該特性。非重復(fù)標簽(NotDuplicate):聲明實體屬性不能重復(fù)。最大長度標簽(MaxLength):聲明實體屬性的最大長度,字符串類型的屬性會標記該特性。最小長度標簽(MinLength):聲明實體屬性的最小長度,字符串類型的屬性會標記該特性。最大值標簽(MaxValue):聲明實體屬性的最大值,數(shù)值類型的屬性會標記該特性。最小值標簽(MinValue):聲明實體屬性的最小值,數(shù)值類型的屬性會標記該特性。屬性默認值(DefaultValue):屬性默認值設(shè)置,作用域為當(dāng)前實體。實體屬性特性04實體特性實體特性實體類型特性(RootEntity,ChildEntity,QueryEntity):用于在實體上聲明實體的類型。實體
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于YOLOv5的果實與病蟲害識別關(guān)鍵技術(shù)研究
- 術(shù)前外周血炎癥指標及NETs水平對食管鱗癌淋巴結(jié)轉(zhuǎn)移的預(yù)測價值和相關(guān)性研究
- 2025年北京匯佳職業(yè)學(xué)院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 2025年云南特殊教育職業(yè)學(xué)院高職單招數(shù)學(xué)歷年(2016-2024)頻考點試題含答案解析
- 委托單法律風(fēng)險分析-洞察分析
- 油漆與環(huán)保的關(guān)系-洞察分析
- 系統(tǒng)生物學(xué)建模-洞察分析
- 香精功能性開發(fā)-洞察分析
- 語義網(wǎng)區(qū)塊鏈安全審計-洞察分析
- 藥效預(yù)測與數(shù)據(jù)挖掘-洞察分析
- 《醫(yī)院財務(wù)分析報告》課件
- 2025老年公寓合同管理制度
- 2024-2025學(xué)年人教版數(shù)學(xué)六年級上冊 期末綜合卷(含答案)
- 2024中國汽車后市場年度發(fā)展報告
- 感染性腹瀉的護理查房
- 廚房績效考核方案細則
- 2024年上海市各區(qū)高三語文二模試卷【文言文閱讀題】匯集練附答案解析
- 部編版語文一年級下冊第五單元整體教學(xué)設(shè)計教案
- 廢鐵收購廠管理制度
- 物品賠償單范本
- 《水和廢水監(jiān)測》課件
評論
0/150
提交評論