MES開發(fā)與應(yīng)用 課件 3.5.6 工業(yè)管理軟件開發(fā)基礎(chǔ)-命令的使用-保存命令_第1頁
MES開發(fā)與應(yīng)用 課件 3.5.6 工業(yè)管理軟件開發(fā)基礎(chǔ)-命令的使用-保存命令_第2頁
MES開發(fā)與應(yīng)用 課件 3.5.6 工業(yè)管理軟件開發(fā)基礎(chǔ)-命令的使用-保存命令_第3頁
MES開發(fā)與應(yīng)用 課件 3.5.6 工業(yè)管理軟件開發(fā)基礎(chǔ)-命令的使用-保存命令_第4頁
MES開發(fā)與應(yīng)用 課件 3.5.6 工業(yè)管理軟件開發(fā)基礎(chǔ)-命令的使用-保存命令_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

3.5命令的使用深圳市信息職業(yè)技術(shù)學(xué)院——保存命令列表保存命令框架實(shí)現(xiàn)介紹01目

錄列表保存命令開發(fā)示例02表單保存命令框架實(shí)現(xiàn)介紹03表單保存命令開發(fā)示例04保存命令注意事項(xiàng)05知識回顧平臺刪除命令實(shí)現(xiàn)介紹;自定義刪除命令開發(fā)示例;自定義刪除命令注意事項(xiàng);學(xué)習(xí)目標(biāo)通過本節(jié)學(xué)習(xí)可以:掌握列表保存命令的重寫;掌握表單保存命令的重寫;掌握保存命令有哪些注意事項(xiàng);了解列表保存命令平臺的實(shí)現(xiàn)邏輯;了解表單保存命令平臺的實(shí)現(xiàn)邏輯。01列表保存命令框架實(shí)現(xiàn)介紹平臺列表保存命令實(shí)現(xiàn)邏輯介紹平臺列表保存命令實(shí)現(xiàn)邏輯介紹列表保存命令前端部分在SIE.cmd.Save中實(shí)現(xiàn)的,后端保存邏輯在SaveCommand中實(shí)現(xiàn)的。重寫的列表保存命令,即使不處理后端邏輯,也必須添加后端CS命令文件,否則點(diǎn)擊重寫的保存命令會報(bào)錯。列表保存命令的命名規(guī)范:ListSave+實(shí)體名+Command;重寫保存命令的定義SIE.defineCommand('SIE.Web.LibMan.ReaderMans.Commands.ListSaveReaderCommand',{extend:'SIE.cmd.Save',meta:{text:"保存",group:"edit",iconCls:"icon-SaveEntityicon-blue"},});后端CS命令,前端和后端的全命名空間要完全一致。public

class

ListSaveReaderCommand:SaveCommand{}列表保存命令前端可重寫的方法列表保存命令前端可重寫的方法canExecute:function(view){}:是否可執(zhí)行方法,返回值為true或false;execute:function(view,source){}:執(zhí)行方法,命令執(zhí)行的入口,不建議重寫;onValidation:function(view){}:驗(yàn)證方法,處理前端驗(yàn)證,框架統(tǒng)一實(shí)現(xiàn),通常不需要重寫;onSaving:function(view){}:保存數(shù)據(jù)前的處理,調(diào)用了驗(yàn)證的方法,通常不需要重寫;doSave:function(view){}:執(zhí)行保存操作的邏輯,會向后端請求數(shù)據(jù);onSaved:function(view,res){}:視圖數(shù)據(jù)提交保存后回調(diào)處理;onSavedMsg:function(view,res){}:保存后的提示信息平臺保存命令前端方法實(shí)現(xiàn)邏輯介紹方法實(shí)現(xiàn)邏輯介紹canExecute:function(view){} 保存按鈕是否可執(zhí)行,返回值為true或者是false。canExecute:function(view){if(view.isListView){varresult=false;varpv=view.getParent();//判斷childif(pv){varcurrent=pv.getCurrent();if(current){if(!current.isNew()){result=_canExecute(view);}}}else{result=view.getData().isDirty();if(view.getCurrent()){for(vari=0;i<view.getData().data.items.length;i++){varisresult=view.getData().data.items[i].isDirty();if(isresult){result=true;break;}}}}returnresult;}returnthis.callParent(arguments);},var_canExecute=function(view){varresult;if(view.editMode===SIE.viewMeta.editMode.FORM){varcurrent=view.getCurrent();if(current){result=current.isChildrenDirty();}}else{result=view.getData().isDirty();}returnresult;};_canExecute私有方法的邏輯:編輯模式為表單模式,返回值為子是否為臟;編輯模式為行內(nèi):返回值為當(dāng)前視圖的數(shù)據(jù)是否為臟。為子,父的當(dāng)前操作行存在,且不是新增,是否允許執(zhí)行為_canExecute的邏輯。不為子,獲取的視圖數(shù)據(jù)只要有一行數(shù)據(jù)為臟,則保存按鈕允許操作。平臺保存命令前端方法實(shí)現(xiàn)邏輯介紹execute:function(view,source){} 執(zhí)行方法execute:function(view,source){varme=this;if(this.isExecuting==true)return;this.isExecuting=true;setTimeout(function(){me.isExecuting=false;},100,me);varisValid=this.onSaving(view);if(isValid)this.doSave(view);}onSaving:function(view){returnthis.onValidation(view);},onValidation:function(view){returnview.validateData();},處理框架的前端驗(yàn)證前端驗(yàn)證校驗(yàn)通過,調(diào)用doSave的方法,去處理執(zhí)行的邏輯。方法實(shí)現(xiàn)邏輯介紹平臺保存命令前端方法實(shí)現(xiàn)邏輯介紹doSave執(zhí)行保存邏輯和onSaved保存后邏輯的方法。 doSave:function(view){varme=this;varchildren=view.getChildren();varwithChildren=children.length>0;view.execute({withChildren:withChildren,success:function(res){me.onSaved(view,res);}});}, onSaved:function(view,res){varme=this;varoperationView=view;if(view.associateCmd){operationView=view.associateCmd.view;}_viewReload(operationView);me.onSavedMsg(view,res);},通過view.execute向后端請求數(shù)據(jù),執(zhí)行保存數(shù)據(jù)的邏輯,在請求成功的方法中,調(diào)用onSaved方法處理保存后的邏輯。保存成功后重新加載列表的數(shù)據(jù),并提示保存成功的消息。方法實(shí)現(xiàn)邏輯介紹平臺保存命令前端方法實(shí)現(xiàn)邏輯介紹_viewReload加載列表的私有方法和onSaveMsg消息提示方法/***private私有方法,列表加載數(shù)據(jù)*@param{SIE.view.ListView}view-視圖對象*/var_viewReload=function(view){if(view.isListView){view.reloadData();}}; /***@protectedvirtualvoid*保存后的提示信息*@param{type}view*@param{type}res*/onSavedMsg:function(view,res){SIE.Msg.showInstantMessage('保存成功'.t());},重新加載表格的數(shù)據(jù)。倒計(jì)時提示保存成功的的消息。方法實(shí)現(xiàn)邏輯介紹列表保存命令后端可重寫的方法列表保存命令后端可重寫的方法Excute:執(zhí)行方法,不建議重寫;OnSaving:保存前方法,框架預(yù)留的一個空方法,用于處理保存前的邏輯;DoSave:執(zhí)行保存的邏輯,傳入的參數(shù)是前端操作過變更的數(shù)據(jù);OnSaved:保存后方法,框架預(yù)留的一個空方法,用于處理保存后的業(yè)務(wù)邏輯;平臺保存命令后端方法實(shí)現(xiàn)邏輯介紹public

class

SaveCommand:ListViewCommand

{

//命令名

public

const

stringCommandName="SIE.cmd.Save"; //執(zhí)行方法 protected

override

objectExcute(ViewArgsargs,stringscope)

{EntityListdeserializeData=GetDeserializeData(args,scope);OnSaving(deserializeData);DoSave(deserializeData);OnSaved(deserializeData);

returndeserializeData;

}

//保存前動作

protected

virtual

voidOnSaving(EntityListdata)

{

}

//進(jìn)行保存 protected

virtual

voidDoSave(EntityListdata)

{RepositoryFactory.Save(data);data.MarkSaved();

} //保存后動作 protected

virtual

voidOnSaved(EntityListdata)

{

}

}方法實(shí)現(xiàn)邏輯介紹后端執(zhí)行方法,獲取反序列化之后的數(shù)據(jù),調(diào)用保存前、保存中和保存后方法。執(zhí)行保存操作,如果有驗(yàn)證和提交事件的處理,會同步進(jìn)行處理。標(biāo)記數(shù)據(jù)為未修改的狀態(tài)。思考題在前端命令中定義私有方法是如何進(jìn)行定義的?SIE.defineCommand('SIE.cmd.Save',function(){/***private私有方法,列表加載數(shù)據(jù)*@param{SIE.view.ListView}view-視圖對象*/var_canExecute=function(view){ };return{meta:{text:"保存",group:"edit",iconCls:"icon-SaveEntityicon-blue"},02列表保存命令開發(fā)示例思考題讀者管理功能設(shè)置為行內(nèi)操作,重寫保存命令,保存邏輯為:讀者管理數(shù)據(jù)保存成功后,關(guān)聯(lián)的讀者分類的可借書數(shù)量加1?從需求分析可以看出,該業(yè)務(wù)只有后端處理邏輯,所以前端方法不需要重寫。列表保存命令重寫示例1、添加命令的js文件,繼承SIE.cmd.Save,js文件的生成操作設(shè)置為嵌入的資源;SIE.defineCommand('SIE.Web.XyTest.ReaderMans.Commands.ListSaveReaderCommand',{extend:'SIE.cmd.Save',meta:{text:"保存",group:"edit",iconCls:"icon-SaveEntityicon-blue"},});開發(fā)步驟列表保存命令重寫示例2、在控制器中實(shí)現(xiàn)讀者分類可借書數(shù)量加1的邏輯;開發(fā)步驟列表保存命令重寫示例3、添加保存命令的CS文件,繼承SaveCommand,重寫保存后方法OnSaved,在保存后方法中處理參數(shù),調(diào)用步驟2處理讀者分類可借書數(shù)量加1邏輯的方法;開發(fā)步驟列表保存命令重寫示例4、在界面的ConfigListView方法中使用命令,運(yùn)行項(xiàng)目操作保存按鈕即可看到效果;開發(fā)步驟03表單保存命令框架實(shí)現(xiàn)介紹平臺表單保存命令實(shí)現(xiàn)邏輯介紹平臺表單保存命令實(shí)現(xiàn)邏輯介紹表單保存命令前端部分在SIE.cmd.FormSave中實(shí)現(xiàn)的,后端保存邏輯在FormSaveCommand中實(shí)現(xiàn)的。重寫的表單保存命令,即使不處理后端邏輯,也必須添加后端CS命令文件,否則點(diǎn)擊重寫的保存命令會報(bào)錯。表單保存命令的命名規(guī)范:FormSave+實(shí)體名+Command;重寫表單保存命令的定義SIE.defineCommand('SIE.Web.LibMan.ReaderMans.Commands.FormSaveReaderCommand',{ extend:'SIE.cmd.FormSave',meta:{text:"保存",group:"edit",iconCls:"icon-SaveEntityicon-blue"},});后端CS命令,前端和后端的全命名空間要完全一致。public

class

ListSaveReaderCommand:FormSaveCommand{}表單保存命令前端可重寫的方法表單保存命令前端可重寫的方法canExecute:function(view){}:是否可執(zhí)行方法,返回值為true或false;execute:function(view,source){}:執(zhí)行方法,命令執(zhí)行的入口,不建議重寫;onValidation:function(view){}:驗(yàn)證方法,處理前端驗(yàn)證,框架統(tǒng)一實(shí)現(xiàn),通常不需要重寫;onSaving:function(view){}:保存數(shù)據(jù)前的處理,調(diào)用了驗(yàn)證的方法,通常不需要重寫;doSave:function(view){}:執(zhí)行保存操作的邏輯,會向后端請求數(shù)據(jù);onSaved:function(view,res){}:視圖數(shù)據(jù)提交保存后回調(diào)處理;onSavedMsg:function(view,res){}:保存后的提示信息平臺保存命令前端方法實(shí)現(xiàn)邏輯介紹方法實(shí)現(xiàn)邏輯介紹canExecute:function(view){} 保存按鈕是否可執(zhí)行,返回值為true或者是false。

canExecute:function(view){if(view.isDetailView){varresult=false;varcurrent=view.getCurrent();if(current){result=current.isDirty();}returnresult;}returnthis.callParent(arguments);},根據(jù)當(dāng)前操作行的數(shù)據(jù)是否為臟控制是否可執(zhí)行平臺保存命令前端方法實(shí)現(xiàn)邏輯介紹execute:function(view,source){} 執(zhí)行方法execute:function(view,source){varme=this;if(this.isExecuting==true)return;this.isExecuting=true;setTimeout(function(){me.isExecuting=false;},100,me);varisValidator=this.onSaving(view);if(isValidator)this.doSave(view);elseSIE.Msg.showMessage("數(shù)據(jù)驗(yàn)證未通過,保存失??!".t())},處理框架的前端驗(yàn)證前端驗(yàn)證校驗(yàn)通過,調(diào)用doSave的方法,去處理執(zhí)行的邏輯。方法實(shí)現(xiàn)邏輯介紹驗(yàn)證未通過給出具體的提示。平臺保存命令前端方法實(shí)現(xiàn)邏輯介紹onValidation:function(view){}驗(yàn)證方法,onSaving:function(view){}保存前方法 /***@protectedvirtualvoid*驗(yàn)證實(shí)體*@param{type}entity*/onValidation:function(view){returnview.validateData();},/***保存前方法*@paramview當(dāng)前視圖*@returns*/onSaving:function(view){varisValidator=this.onValidation(view);returnisValidator;},前端數(shù)據(jù)校驗(yàn)調(diào)用前端校驗(yàn)。方法實(shí)現(xiàn)邏輯介紹平臺保存命令前端方法實(shí)現(xiàn)邏輯介紹doSave:function(view){}執(zhí)行保存邏輯方法。 doSave:function(view){varme=this;varchildren=view.getChildren();varwithChildren=children.length>0;view.execute({withChildren:withChildren,success:function(res){me.onSaved(view,res);}});},通過view.execute向后端請求數(shù)據(jù),執(zhí)行保存數(shù)據(jù)的邏輯,在請求成功的方法中,調(diào)用onSaved方法處理保存后的邏輯。方法實(shí)現(xiàn)邏輯介紹平臺保存命令前端方法實(shí)現(xiàn)邏輯介紹onSaved:function(view){}保存后邏輯和onSaveMsg:function(view){}消息提示方法。onSaved:function(view,res){varme=this;varcurrent=view.getCurrent();current.markSaved();CRT.Event.fire(view.model+'_refresh',view.getCurrent().getId());CRT.Event.fire(view.model+'_'+view.getCurrent().getId()+'_refresh',view.getCurrent().getId());me.onSavedMsg(view,res);}, /***@protectedvirtualvoid*保存后的提示信息*@param{type}view*@param{type}res*/onSavedMsg:function(view,res){SIE.Msg.showInstantMessage('保存成功'.t());},激活刷新事件。方法實(shí)現(xiàn)邏輯介紹表單保存命令后端可重寫的方法表單保存命令后端可重寫的方法Excute:執(zhí)行方法,不建議重寫;OnValidation:保存前驗(yàn)證方法;OnSaving:保存前方法,框架預(yù)留的一個空方法,用于處理保存前的邏輯;DoSave:執(zhí)行保存的邏輯,傳入的參數(shù)是前端操作過變更的數(shù)據(jù);OnSaved:保存后方法,框架預(yù)留的一個空方法,用于處理保存后的業(yè)務(wù)邏輯;平臺表單保存命令后端方法實(shí)現(xiàn)邏輯介紹//表單保存命令public

class

FormSaveCommand:DetailViewCommand

{

//命令名

public

const

stringFormSaveCommandName="SIE.cmd.FormSave";

//執(zhí)行方法

protected

override

objectExcute(ViewArgsargs,stringscope)

{EntityListdeserializeData=GetDeserializeData(args,scope);Entityentity=(deserializeData.Count>0)?deserializeData[0]:null;OnSaving(entity);DoSave(entity);OnSaved(entity);

returnentity;

}

}方法實(shí)現(xiàn)邏輯介紹獲取反序列化數(shù)據(jù)實(shí)體數(shù)據(jù)的處理,這里區(qū)分列表的保存,列表保存?zhèn)魅氲膮?shù)是集合,這里是實(shí)體對象。FormSaveCommand表單命令類實(shí)現(xiàn)邏輯;調(diào)用父類DetailViewCommand的保存前、保存中和保存后方法。平臺表單保存命令后端方法實(shí)現(xiàn)邏輯介紹

public

abstract

class

DetailViewCommand:ViewCommand

{

//保存前驗(yàn)證

protected

virtual

voidOnValidation(Entityentity)

{BrokenRulesCollectionbrokenRulesCollection=entity.Validate();

if(brokenRulesCollection.Count>0)

{

throw

newValidationException(brokenRulesCollection.ToString().L10N());

}

}

//保存前動作

protected

virtual

voidOnSaving(Entityentity)

{OnValidation(entity);

}

//進(jìn)行保存

protected

virtual

voidDoSave(Entityentity)

{RepositoryFactory.Save(entity);entity.MarkSaved();

}

//保存后動作

protected

virtual

voidOnSaved(Entityentity)

{

}

}方法實(shí)現(xiàn)邏輯介紹保存前方法去調(diào)用了驗(yàn)證方法的邏輯。保存數(shù)據(jù)。FormSaveCommand繼承的父類DetailViewCommand類實(shí)現(xiàn)邏輯;標(biāo)記為未修改的狀態(tài)。思考題在前端標(biāo)記當(dāng)前行數(shù)據(jù)為未修改狀態(tài),應(yīng)該如何實(shí)現(xiàn)?view.getCurrent().markSaved();04表單保存命令開發(fā)示例思考題讀者管理功能設(shè)置為表單操作,添加修改界面保存數(shù)據(jù)完成后,關(guān)閉新增、修改頁簽,應(yīng)該如何進(jìn)行開發(fā)實(shí)現(xiàn)?從需求分析可以看出,該業(yè)務(wù)只有前端處理邏輯,后端方法不需要重寫。表單保存命令開發(fā)示例界面效果表單保存命令開發(fā)示例1、添加保存命令的js文件,繼承SIE.cmd.FormSave,js文件設(shè)置嵌入到資源,重寫onSavedMsg方法,在這個方法中處理關(guān)閉窗體的邏輯。關(guān)閉當(dāng)前頁簽使用:CRT.Workbench.closeCurrentTab();SIE.defineCommand('SIE.Web.XyTest.ReaderMans.Commands.FormSaveReaderCommand',{extend:'SIE.cmd.FormSave',meta:{text:"保存",group:"edit",iconCls:"icon-SaveEntityicon-blue"},onSavedMsg:function(view,res){

varme

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論