MES开发与应用 课件 3.5.8 工业管理软件开发基础-命令的使用-选择命令_第1页
MES开发与应用 课件 3.5.8 工业管理软件开发基础-命令的使用-选择命令_第2页
MES开发与应用 课件 3.5.8 工业管理软件开发基础-命令的使用-选择命令_第3页
MES开发与应用 课件 3.5.8 工业管理软件开发基础-命令的使用-选择命令_第4页
MES开发与应用 课件 3.5.8 工业管理软件开发基础-命令的使用-选择命令_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

3.5命令的使用深圳市信息职业技术学院——选择命令框架选择命令实现介绍01目

录自定义选择命令的开发实现02自定义选择命令注意事项03知识回顾平台查询实现介绍;标准查询实现功能查询的开发实现;重写查询命令实现功能查询的开发实现;自定义查询实体实现功能查询的开发实现;标准查询+数据提供者实现功能查询的开发实现;学习目标通过本节学习可以:掌握自定义选择命令的开发实现;了解框架选择命令的实现逻辑。01框架选择命令实现介绍选择命令框架实现介绍选择命令框架实现介绍选择命令框架是在SIE.cmd.LookupCommandBase中实现的。重写选择命令需要继承SIE.cmd.LookupCommandBase,框架选择命令通常用在子列表中。选择命令的命名规范:Select+实体名+Command;重写选择命令的定义:SIE.defineCommand('SIE.Web.LibMan.ReaderMans.Commands.SelectManCatCommand',{extend:'SIE.cmd.LookupCommandBase',meta:{text:"选择",group:"edit",iconCls:"icon-PlaylistCheckicon-blue"},});后端CS命令,前端和后端的全命名空间要完全一致。public

class

SelectManCatCommand:ViewCommand{}选择命令可重写的方法选择命令可重写的方法canExecute:function(view){}:是否可执行方法,返回值为true或false;execute:function(view,source){}:执行方法,命令执行的入口,不建议重写;save:function(win){}:保存方法,虚方法,继承选择命令,该方法必须实现;_checkParameter:function(){}:检查配置的必须参数;config:选择命令的配置,数据参数dataParams必须配置;_loadSourceViewAllData:function(view,source){}:加载原视图的所有数据;

getViewMeta:function(source){}:生成弹出界面Meta;getMetacallback:function(blocks,source){}:生成弹出界面Meta回调函数;_queryBlockProcess:function(block){}:查询块处理;选择命令可重写的方法选择命令可重写的方法_gridBlockProcess:function(block){}:表格处理;_popupWin:function(ui,source){}:弹出框处理;_reloadTargetViewData:function(){}:加载弹窗视图的数据。onLoad:function(store,records,successful,operation,eOpts){}:根据数据实现勾选上;getRowClass:function(record,index,rowParams,store){}:配置行样式;onBeforeSelect:function(selModel,record,index,eOpts){}:选择前事件;onSelect:function(selModel,record,index,eOpts){}:选择事件;onBeforeDeselect:function(selModel,record,index,eOpts){}:取消选择前事件;onDeselect:function(selModel,record,index,eOpts){}:取消选择事件;选择命令方法框架实现逻辑介绍方法实现逻辑介绍canExecute:是否可执行方法,返回值为true或者是false。canExecute:function(view){varpv=view.getParent();if(!pv){returntrue;}varentity=pv.getCurrent();varresult=entity!==null;if(result){result=pv.getSelection().length==1;}if(result){result=!entity.isNew();}returnresult;},获取父父当前操作行不为null,且只选择一行,选择的行状态不是新增,则选择按钮允许操作,否则不允许操作。父不存在,返回true,选择按钮允许操作获取父当前操作行父当前操作行为null,返回false,选择按钮不允许操作。选择命令方法框架实现逻辑介绍方法实现逻辑介绍execute::执行方法;save:保存方法。execute:function(view,source){varme=this;me._checkParameter();me._loadSourceViewAllData(view,source);},save:function(win){///<summary>///protectedabstract保存选择的操作列表。(子类需要重写实现自己的业务)///</summary>SIE.markAbstract();},调用检查配置必须参数的方法调用加载原视图的所有数据执行方法使用框架默认实现,通常不需要重写虚方法,子类必须实现重写的选择命令,该方法必须实现,用于处理自己的业务,主要是选择后数据的保存操作。选择命令方法框架实现逻辑介绍方法实现逻辑介绍config:选择命令全局配置。config:{userConfig:{dataParams:{specKeyPrototyName:null,//指定的关键属性的,根据此值获取,子类必须配置

targetClassName:null,//目标类全名,用于生成目标类的界面,子类必须配置

targetCriteriaClassName:null,},gridCfg:{multiSelect:true,//控件默认多选

pageSize:10000,//默认取10000笔数据,如需要更多,重写此配置即可

},}},用户配置,包括数据参数和列表参数配置必须配置,子和弹出框实体的外键必须配置,弹出框列表实体的全命名空间弹出框查询实体的配置,不配置,默认为弹出框实体全命名空间+Criteria选择命令方法框架实现逻辑介绍方法实现逻辑介绍选择命令的构造函数和全局变量定义constructor:function(config){///<summary>///构造函数

///</summary>///<paramname="config">可配置的属性对象</param>this.callParent(arguments);this.initConfig(config);this.userConfig=this.getUserConfig();this.dataParams=this.userConfig.dataParams;this.gridCfg=this.userConfig.gridCfg;},_sourceId:null,//操作的源ID关联关系的(如用户ID关联(一对一,一对多)用户组,这里表示的为用户ID)

_sourceViewSelectItems:[],//源视图已选项值

_targetView:null,//操作弹窗视图

_targetSelectItems:[],//操作弹窗视图选择的项

cloneStore:null,//克隆数据storelastClickTime:0,//最后单击时间

executeIntervalSecond:1,//间隔,对外友好使用单位(秒)getExecuteInterval:function(){return(this.executeIntervalSecond||1)*1000;},//间隔,默认1秒,单位(毫秒),点击命令就会执行进来,这里使用框架的逻辑即可全局变量定义,方便后面方法的逻辑处理。选择命令方法框架实现逻辑介绍方法实现逻辑介绍_checkParameter:

检查参数。_checkParameter:function(){///<summary>///检查配置的必须参数

///</summary>vardataParams=this.dataParams;if(Ext.isEmpty(dataParams.specKeyPrototyName)){SIE.emptyArgument('specKeyPrototyName');}if(Ext.isEmpty(dataParams.targetClassName)){SIE.emptyArgument('targetClassName');}Ext.require(dataParams.targetClassName);Ext.require(dataParams.targetCriteriaClassName||dataParams.targetClassName+'Criteria');},检查关键属性是否为空,为空,则提示。检查弹出框的实体是否为空,为空,则提示。查询实体取值,目标查询实体配置了值则取目标查询实体的值,否则根据目标实体+Criteria去匹配查询实体不需要重写,使用框架的逻辑即可满足需求选择命令方法框架实现逻辑介绍方法实现逻辑介绍_loadSourceViewAllData:加载源视图的所有数据(不分页)。_loadSourceViewAllData:function(view,source){varme=this;if(view){varcfg={scope:this,callback:function(records,operation,success){this.cloneStore._loaded=success;varparent=view.getParent();varsourceId;if(parent){sourceId=parent.getCurrent().getId();}else{if(view.getCurrent()){//没有父实体时,当前实体可能为空

sourceId=view.getCurrent().getId();}}me._sourceId=sourceId;varmodel=view.model;if(model){me.getViewMeta(source);}}}varstore=view.getData();this.cloneStore=store.clone({pageSize:this.gridCfg.pageSize});//克隆数据storethis.cloneStore.load(cfg);}},不需要重写,使用框架的逻辑即可满足需求全局变量源id的值设置当前view的实体存在,则处理界面元数据加载数据选择命令方法框架实现逻辑介绍方法实现逻辑介绍getViewMeta:生成弹出界面Meta;getMetacallback:生成弹出界面Meta回调函数。getViewMeta:function(source){varme=this;SIE.AutoUI.getMeta({model:me.dataParams.targetClassName,ignoreChild:true,ignoreCommands:true,isReadonly:true,ignoreQuery:false,isAggt:true,callback:function(res){me.getMetacallback(res,source);}});},

getMetacallback:function(blocks,source){varme=this;me._queryBlockProcess(blocks);me._gridBlockProcess(blocks);varui=SIE.AutoUI.generateAggtControl(blocks);me._popupWin(ui,source);me._reloadTargetViewData();},不需要重写,使用框架的逻辑即可满足需求不需要重写,使用框架的逻辑即可满足需求查询块视图控件处理表格的处理弹出对话框视图处理加载弹出框视图数据选择命令方法框架实现逻辑介绍方法实现逻辑介绍_queryBlockProcess:弹出框左边查询块处理_queryBlockProcess:function(block){///<summary>///查询块处理-只读为false///</summary>///<paramname="block"type="type"></param>if(block.surrounders){varsurround=block.surrounders["0"];if(surround){varitems=surround.mainBlock.formConfig.items;for(vari=0,len=items.length;i<len;i++){varitem=items[i];item.readOnly=false;}}}},根据实际业务需求,有可能需要重写将查询块的所有控件都设置为可写选择命令方法框架实现逻辑介绍方法实现逻辑介绍_reloadTargetViewData:加载弹窗视图的数据。_reloadTargetViewData:function(){ varme=this;me._sourceViewSelectItems=this.cloneStore.collect(me.dataParams.specKeyPrototyName);vardialogView=me._targetView;if(me._targetView!==null){varstore=dialogView.getData();if(store!==null){me.mon(store,'load',me.onLoad,this);if(dialogView._relations[0]){//存在查询面板时

dialogView._relations[0]._target.tryExecuteQuery();}else{dialogView.loadData();}}}},根据实际业务需求,框架默认查询不符合要求时需要重写调用框架的查询方法,查询数据加载数据注册加载事件选择命令方法框架实现逻辑介绍方法实现逻辑介绍onLoad:根据数据实现勾选。onLoad:function(store,records,successful,operation,eOpts){ varme=this;if((me._sourceViewSelectItems&&me._sourceViewSelectItems.length>0)||(me._targetSelectItems&&me._targetSelectItems.items.length>0)){varselModel=me._targetView.getSelectionModel();if(records&&records.length>0){for(vari=0,len=records.length;i<len;i++){varrecord=records[i];if(me._sourceViewSelectItems.indexOf(record.getId())>-1){selModel.select(record,true,true);//勾选上.}if(me._targetSelectItems.keys.indexOf(record.getId())>-1){selModel.select(record,true,true);}}}}},加载事件对应方法,不需要重写循环处理数据,源数据和目标数据一致,则设置勾选,否则不勾选选择命令方法框架实现逻辑介绍方法实现逻辑介绍popupWin:选择命令弹出窗口设置。_popupWin:function(ui,source){ varme=this;me._targetView=ui._view;if(me.win&&me.win.animateTarget==source){return;}//弹窗

me.win=SIE.Window.show({title:('选择'+me._targetView.label).t(),animateTarget:source,items:ui.getControl(),width:800,height:420,listeners:{close:function(){me.lastClickTime=0;}},//buttons:['确定','关闭'],//自定义按钮名称

callback:function(btn){ }});SIE.Window.winAutoSize(me.win);me.setGridListeners();me._targetSelectItems={items:[],keys:[]};},弹出窗体标题设置弹出窗体控件加载弹出窗体大小设置监听关闭时间,设置全局变量最后一次点击的时间为0弹窗回调函数,这里主要处理了弹窗确认按钮的逻辑自适应窗体大小设置表格监听事件目标选择数据置空选择命令方法框架实现逻辑介绍方法实现逻辑介绍popupWin弹框回调函数实现。 //buttons:['确定','关闭'],//自定义按钮名称

callback:function(btn){if(btn==='确定'.t()){varelapsed=Ext.now()-me.lastClickTime;varinterval=me.getExecuteInterval();if(elapsed>=interval){me.lastClickTime=Ext.now();if(me._targetSelectItems.keys.length>0){me.save(me.win);returnfalse;//阻止窗口关闭,在save中根据返回结果处理

}else{SIE.Msg.showWarning('没有可提交的数据');//没有选择数据点击确定时,窗口直接关闭了

returnfalse;}}returnfalse;}}点击确认按钮,且存在选择的行,调用保存方法选择命令框架实现介绍选择命令框架实现介绍选择命令框架其他方法的实现,参考SIE.cmd.LookupCommandBase.txt的实现。思考题重写选择命令,哪个方法必须实现?Save保存方法,该方法是虚方法,继承父类必须实现。02自定义选择命令的开发实现思考题通过前面框架选择命令的实现介绍,重写选择命令,该如何实现?选择命令重写示例业务描述:读者管理功能中添加管理读者分类子实体,子实体的数据通过选择分类命令操作读者分类已维护的数据进行保存操作,效果如下图所示:开发步骤选择命令重写示例创建管理读者分类的子实体,添加两个引用属性:读者管理与管理读者分类的引用关系,引用类型指向父;管理读者分类与读者分类的关系(该关系增加一个视图属性,用于界面展示)开发步骤选择命令重写示例管理读者分类与读者管理的关系:子实体和父引用关系开发步骤选择命令重写示例管理读者分类与读者分类的关系开发步骤选择命令重写示例类别名称的视图属性开发步骤选择命令重写示例在读者管理的实体中添加管理读者分类的列表属性开发步骤选择命令重写示例配置管理读者分类的界面开发步骤选择命令重写示例添加选择命令的js文件,继承SIE.cmd.LookupCommandBase,处理用户配置和实现保存方法。开发步骤选择命令重写示例重写选择命令前端实现源代码开发步骤SIE.defineCommand('SIE.Web.XyTest.ReaderMans.Commands.SelectManCatCommand',{extend:'SIE.cmd.LookupCommandBase',meta:{text:"选择分类",group:"edit",iconCls:"icon-PlaylistCheckicon-blue"},userConfig:{dataParams:{specKeyPrototyName:'CatId',targetClassName:'SIE.XyTest.ReaderCats.ReaderCat'},},save:function(win){

varme=this;

varindata={};

varselections=this._targetSelectItems.items;

if(selections&&selections.length>0){

varmanCatInReaderCats=[];SIE.each(selections,function(item){

varcatId=item.getId();

if(me._sourceViewSelectItems.indexOf(catId)===-1){

varmanCatInReaderCat={ManId:me._sourceId,CatId:catId};manCatInReaderCats.push(manCatInReaderCat);

}

});indata=manCatInReaderCats;me._targetView.execute({data:indata,success:function(res){win.close();//关闭模态窗口me._ownerView.loadChildData(true);//重载视图数据

}},me._ownerView);

}

else{SIE.Msg.showWarning('没有可提交的数据');

}

},});选择命令重写示例选择命令后端实现源代码开发步骤namespaceSIE.Web.XyTest.ReaderMans.Commands{

internal

class

SelectManCatCommand:ViewCommand

{

protected

override

objectExcute(ViewArgsargs,stringscope)

{

varmeta=ClientEntities.Find(args.Type);

varsavedData=newEntityList<ManReaderCat>();//RF.Find(meta.EntityType).NewList();

varmanReaderCatList=args.Data.ToJsonObject<List<ManReaderCat>>();

if(null==manReaderCatList||manReaderCatList.Count==0)

{

throw

newArgumentNullException("{0}数据参数不能为空".FormatArgs(nameof(manReaderCatList)));

}

foreach(variteminmanReaderCatList)

{

varmanReaderCat=newManReaderCat();manReaderCat.ManId=item.ManId;manReaderCat.CatId=item.CatId;savedData.Add(manReaderCat);

}RT.Service.Resolve<ReaderManController>().SaveManReaderCat(savedData);

return

true;

}

}}选择命令重写示例在界面使用命令开发步骤选择命令重写示例效果开发步骤知识扩展如果需要处理选择命令弹出左边查询条件,要求如下所示,要怎么实现?知识扩展知识扩展设置默认值,在选择命令的js文件中重写_reloadTargetViewData方法实现。知识扩展_reloadTargetViewData:function(){

///<summary>

///加载弹窗视图的数据

///</summary>

varme=this;me._sourceViewSelectItems=this.cloneStore.collect(me.dataParams.specKeyPrototyName);

vardialogView=me._targetView;

if(me._targetView!==null){

varstore=dialogView.getData();

if(store!==null){me.mon(store,'load',me.onLoad,this);

if(dialogView._relations[0]){//存在查询面板时dialogView._relations[0]._target.getCurrent().setCatNo("01")dialogView._relations[0]._target.tryExecuteQuery();

}

else{dialogView.loadData();

}

}

}

},调用框架查询方法前进行默认值设置知识扩展设

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论