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