版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
3.5命令的使用深圳市信息职业技术学院——导入命令目
录平台导入命令使用通用说明01导入命令框架实现介绍02导入命令开发示例-使用框架导入模板03导入命令开发示例-自定义导入模板04知识回顾框架选择命令实现介绍;自定义选择命令的开发实现;自定义选择命令注意事项;学习目标通过本节学习可以:掌握平台导入命令的使用配置;掌握导入命令的重写;了解导入命令框架实现的逻辑。01平台导入命令使用通用说明平台导入命令使用通用说明平台导入命令使用通用说明在工业管理软件中要使用导入excel,需要在调试或者是部署的工程中直接或者间接引用NPOI包(引用的版本根据具体项目的版本而定),下图以WebClient直连数据库调试为例间接依赖NPOI包文件。平台导入命令使用通用说明平台导入命令使用通用说明平台通用导入命令的配置:View.UseImportCommands();下载的excel模板列头配置是在对应功能的ViewConfig配置ConfigImportView方法。如在读者管理中使用默认导入命令的实现: 1、导入命令的配置:
2、配置下载模板:平台导入命令使用通用说明平台导入命令使用通用说明 3、效果,可以正常下载模板和进行数据导入。
平台通用导入命令只能做一些基础的数据导入,对于业务复杂,或者是需要自定义模板的导入需要重写导入命令。如上面读者管理功能中使用默认的导入命令,类别号无法关联读者分类进行校验,单位快码的数据在快码表不存在也能正常导入数据等。02导入命令框架实现介绍导入命令框架实现介绍导入命令框架实现介绍导入命令框架前端是在SIE.Web.Common.Import.Commands.ImportCommandBase中实现的,后端是在ImportCommandBase类中实现的。导入命令的命名规范:Import+实体名+Command或实体名+ImportCommand;重写导入命令的前端定义:SIE.defineCommand('SIE.Web.LibMan.ReaderMans.Commands.ReaderManImportCommand',{extend:'SIE.Web.Common.Import.Commands.ImportCommandBase',meta:{text:"导入",group:"business",iconCls:"icon-ImportDataicon-blue"},});其中:导入命令的分组设置为business。后端CS命令,前端和后端的全命名空间要完全一致。public
class
ReaderManImportCommand:ImportCommandBase{}导入命令常用可重写的方法和属性导入命令常用可重写的方法和属性BehaviorName:初始化下载模板类型,枚举值为Download和DownloadCustom;BehaviorName=‘Download’:下载默认类型模板,即下载列模板是在ConfigImportView中配置的,BehaviorName=“DownloadCustom”下载自定义列模板;canExecute:function(view){}:是否可执行方法,框架默认是返回true,任何时候导入按钮都可操作;downloadTemplateSuccess:function(res){}:请求下载模板成功后处理,使用自定义下载模板,需要重写此方法;creatImportWindow:function(myview){}:创建导入面板,导入按钮打开的窗体不使用框架的而是自定义实现需要重写此方法;导入命令常用可重写的方法导入命令常用可重写的方法GetImportCompleted:获取导入完成处理逻辑,该方法是虚方法,继承平台导入命令的父类,必须实现;GetImportHandleType:获取导入类型,该方法是虚方法,继承平台导入命令的父类,必须实现;Excute:执行方法,如果是使用自定义下载列模板,该方法需要重写。导入命令框架方法实现逻辑介绍方法实现逻辑介绍canExecute:是否可执行方法;execute:执行方法;canExecute:function(view){returntrue;},execute:function(listView,source){myview=listView;//保存当前视图对象
varme=this;//初始化下载模板类型
me._downloadTemplateType();var_importWindow=me.creatImportWindow(myview);_importWindow.show();},总是可以执行,可根据实际业务进行重写导入命令的执行逻辑,不建议重写会根据BehaviorName的值进行初始化下载模板类型,为Download下载默认类型模板,为DownloadCustom下载自定义列模板,该方法不需要进行重写,通过改变BehaviorName的值能满足业务需求。调用创建导入面板的方法显示导入面板导入命令框架方法实现逻辑介绍方法实现逻辑介绍creatImportWindow:创建导入面板--打开窗体;creatImportWindow:function(myview){varme=this;varform=me.creatImportFormPanel(myview);
vargrid=me.creatImportGridPanel();me._progressBar=newExt.ProgressBar({renderTo:Ext.getBody(),width:585}); varwin=Ext.create("Ext.window.Window",{title:"导入Excel".t(),//标题
draggable:false,height:485,width:"60%",//宽度
modal:true,//是否模态窗口,默认为falseresizable:true,frame:true,items:[form,grid,me._progressBar]});me._progressBar.hide();returnwin;},创建一个表单面板创建一个网格列表面板创建工具栏,宽度为585创建Window弹出窗体,高度为485,宽度为页面宽度的60%,控件包括表单面板,列表面板和工具栏隐藏工具栏返回window窗体导入命令框架方法实现逻辑介绍方法实现逻辑介绍creatImportFormPanel:创建导入面板--表单;creatImportFormPanel:function(myview){varme=this;
varuploadBtn=Ext.create('Ext.button.Button',{text:'导入'.t(),itemId:'btnOK',iconCls:'iconfonticon-Upload',formBind:true,//onlyenabledoncetheformisvaliddisabled:true,handler:function(){}});vardownTempleBtn=Ext.create('Ext.button.Button',{text:'下载模板'.t(),itemId:'templatebutton',iconCls:'iconfonticon-Download',handler:function(){ }});varform=newExt.form.FormPanel({});returnform;},创建上传按钮上传按钮的逻辑处理创建下载模板按钮下载模板按钮的逻辑处理创建表单面板返回创建好的表单面板导入命令框架方法实现逻辑介绍方法实现逻辑介绍creatImportFormPanel方法导入按钮的执行逻辑;handler:function(){varfield=Ext.getCmp('filefield');varnewValue=field.getValue();
varfile=field.fileInputEl.dom.files.item(0);varfileReader=newFileReader('file://'+newValue);fileReader.readAsDataURL(file);fileReader.onload=function(e){ me._progressBar.show();me._progressBar.wait({interval:100,duration:36000000,text:'数据正在导入中,请稍候...'.t(),increment:10,scope:this,fn:function(){}});varparent=myview.getParent()!=null&&myview.getParent().getCurrent()!=null?myview.getParent().getCurrent().data:null;创建文件上传组件获取文件读取文件执行导入操作时,显示等待进度条导入命令框架方法实现逻辑介绍方法实现逻辑介绍creatImportFormPanel方法导入按钮的执行逻辑;myview.execute({data:{BehaviorName:'ImportData',Type:myview.model,SelectedParent:parent!=null?Ext.encode(parent):null,SelectedParentId:parent!=null?parent.Id:0,Data:e.target.result,ViewGroup:myview.viewGroup},success:function(res){//导入模板成功后处理数据
me._importExcelCallback(res,myview);me._progressBar.hide();SIE.Msg.showMessage(res.Result.ImportMsg);}});} }向后端请求数据,执行导入的逻辑传到后端的参数导入成功后处理数据,隐藏等待进度条,显示提示信息导入命令框架方法实现逻辑介绍方法实现逻辑介绍creatImportFormPanel方法下载按钮的执行逻辑vardownTempleBtn=Ext.create('Ext.button.Button',{text:'下载模板'.t(),itemId:'templatebutton',iconCls:'iconfonticon-Download',handler:function(){myview.execute({data:{BehaviorName:me.BehaviorName,Type:myview.model},success:function(res){me.downloadTemplateSuccess(res);}});}});下载模板向后端请求数据,执行下载逻辑传到后端的参数下载模板成功之后的处理逻辑导入命令框架方法实现逻辑介绍方法实现逻辑介绍creatImportFormPanel方法创建表单的处理逻辑;varform=newExt.form.FormPanel({bodyStyle:'padding:5px5px0',frame:true,border:true,layout:'anchor',width:"100%",buttons:[uploadBtn,downTempleBtn],items:[{xtype:'filefield',id:'filefield',name:'fileUpload',fieldLabel:'请选择导入文件'.t(),reference:'basicFile',autoWidth:'true',msgTarget:'side',allowBlank:false,anchor:'99%',buttonText:'浏览'.t(),regex:/^.*\.(xls|xlsx)$/i,//正则表达式,用来检验文件格式
regexText:'请选择Excel对应格式(*.xls|*.xlsx)文件!'.t(),},{xtype:'textfield',id:'msgtextfield',fieldLabel:'导入处理的消息'.t(),readOnly:true,anchor:'99%'}]});表单的按钮:上传、下载文件上传的控件文本控件,显示导入处理的消息导入命令框架方法实现逻辑介绍方法实现逻辑介绍creatImportGridPanel:创建导入面板--Grid;creatImportGridPanel:function(){varme=this;//动态Jsonstore格式
varjsonText='{\"total\":\"0\",\"data\":[{\"index\":\"\"}],\"columnModle\":[{\"text\":\"No\",\"dataIndex\":\"index\"}],\"fieldsNames\":[{\"name\":\"index\"}]}';varjson=Ext.util.JSON.decode(jsonText);//创建strore对象
varstore=newExt.data.Store({proxy:newExt.data.MemoryProxy(null),fields:json.fieldsNames,data:json.data,totalProperty:json.total,pageSize:10});对动态json数据格式进行转码创建Store数据总的数据行每页显示10笔数据导入命令框架方法实现逻辑介绍方法实现逻辑介绍creatImportGridPanel:创建导入面板--Grid;//创建动态JsonStore表格
varimportColumns=json.columnModle;varbbar=newExt.PagingToolbar({id:'failedtoolbar',xtype:'pagingtoolbar',store:store,//数据
displayInfo:true,//是否显示数据信息
displayMsg:'显示{0}-{1}条记录,共{2}条'.t(),//只有displayInfo:true时才有效,用来显示有数据的提示信息。
emptyMsg:"没有记录",//没有数据显示的信息,items:[{xtype:'combobox',itemId:'pageSizeItem',store:Ext.create('Ext.data.Store',{fields:['value'],data:[{"value":10},{"value":20},{"value":50},{"value":100},{"value":500},]}),创建表格分页工具栏分页下拉框控件设置导入命令框架方法实现逻辑介绍方法实现逻辑介绍creatImportGridPanel:创建导入面板--Grid;listeners:{change:function(clt,newValue,oldValue,eOpts){vararrtydata=[];vartoolbar=Ext.getCmp('failedtoolbar');toolbar.store.setPageSize(newValue);varpageData=toolbar.getPageData();for(vari=pageData.fromRecord-1;i<=pageData.toRecord-1;i++){arrtydata.push(toolbar.store.data.items[i]);}Ext.getCmp('failedGrid').store.setData(arrtydata);}},value:me._pageSize,width:72,minValue:0,maxValue:5000,queryMode:'local',displayField:'value',valueField:'value',}],分页下拉列表值变更事件的监听,设置页码分页值为变更的值,进行表格数据的加载。导入命令框架方法实现逻辑介绍方法实现逻辑介绍creatImportGridPanel:创建导入面板--Grid;listeners:{change:{fn:function(clt,newValue,oldValue,eOpts){vararrtydata=[];for(vari=this.getPageData().fromRecord-1;i<=this.getPageData().toRecord-1;i++){arrtydata.push(this.store.data.items[i]);}Ext.getCmp('failedGrid').store.setData(arrtydata);}}}});分页工具栏变更事件的监听给表格设置数据导入命令框架方法实现逻辑介绍方法实现逻辑介绍creatImportGridPanel:创建导入面板--Grid;vargrid=Ext.create("Ext.grid.Panel",{id:'failedGrid',name:'failedGrid',title:'导入失败数据'.t(),xtype:'grid-filtering',//类型为锁定表格
columns:importColumns,bodyStyle:'overflow-x:hidden;overflow-y:hidden',store:store,height:280,layout:"fit",width:'100%',loadMask:true,autoScroll:true,tbar:[{xtype:'button',id:'Importbutton',text:'导出Excel'.t(),handler:function(){vargrid=Ext.getCmp('failedGrid’); },}],bbar:bbar,});returngrid;},创建表格面板表格列,列为失败行号、失败原因和动态读取的下载模板的列头组成工具栏,加了一个导出Excel按钮导入命令框架方法实现逻辑介绍方法实现逻辑介绍creatImportGridPanel:创建导入面板--Grid;handler:function(){vargrid=Ext.getCmp('failedGrid');if(grid.store.config.totalProperty==='0'){SIE.Msg.showMessage('没有出错数据!'.t());return;}//varme=this;varfieldNames=[];grid.getStore().config.fields.forEach(function(item){varfieldName={};fieldName.key=;fieldName.header===='_Index'?'失败行号'.t():.t();fieldNames.push(fieldName);});varrecordData=[];导出Excel按钮数据逻辑处理导入命令框架方法实现逻辑介绍方法实现逻辑介绍creatImportGridPanel:创建导入面板--Grid;Ext.each(grid.getStore().getRange(),function(record){recordData.push(record.data);});varexportJsonData=[];recordData.forEach(function(row){varfieldData='';fieldNames.forEach(function(fieldName){varexportValue=row[fieldName.key];fieldData+='\"'+fieldName.key+'\":\"'+(exportValue===null?'':exportValue)+'\",';});varfieldDataStr='{'+fieldData.substr(0,fieldData.length-1)+'}';exportJsonData.push(JSON.parse(fieldDataStr.replace(/\n/g,"\\n").replace(/\r/g,"\\r")));});varexportJsonHeaders=[];fieldNames.forEach(function(value){exportJsonHeaders.push(value.header==='_MessageTip'?'失败原因'.t():value.header.t())});me.jSONToExcelConvertor(exportJsonData,myview.label+Ext.util.Format.date(newDate(),'Ymdhis'),exportJsonHeaders);},思考题从导入命令框架实现逻辑可以看出,BehaviorName的值包括哪些?Download、DownloadCustom和ImportData。导入命令框架方法实现逻辑介绍ImportCommandBase类方法实现逻辑介绍Excute:导入数据;///<paramname="importViewArgs">导入视图参数</param>///<paramname="scope">使用范围</param>///<returns>执行结果</returns>protectedoverrideobjectExcute(ImportViewArgsimportViewArgs,stringscope){//获取实体数据varmeta=ClientEntities.Find(importViewArgs.Type);if(scope!=meta.EntityType.GetQualifiedName())thrownewSystem.Security.SecurityException("参数type[{0}]与令牌不一致".FormatArgs(importViewArgs.Type));ImportHandleimportHandle=newImportHandle();switch(importViewArgs.BehaviorName){case"Download":returnimportHandle.DownloadTemplate(meta,GetImportTempleData());case"DownloadCustom":returnimportHandle.DownloadCustomTemplate(meta,GetImportHandleType(),GetImportTempleData());default:returnImportData(importViewArgs);}}下载模板按钮,非自定义模板执行的逻辑下载模板按钮,自定义模板执行的逻辑导入按钮执行的逻辑导入命令框架方法实现逻辑介绍ImportCommandBase类方法实现逻辑介绍GetImportHandleType和GetImportCompleted方法;
//
//摘要:
//获取导入类型
protected
abstractTypeGetImportHandleType();
//
//摘要:
//获取导入完成处理逻辑
protected
abstractImportCompletedGetImportCompleted();虚方法,继承ImportCommandBase必须实现虚方法,继承ImportCommandBase必须实现导入命令框架实现介绍导入命令框架实现介绍导入命令框架实现详情参考。JS源码CS源码思考题重写导入命令后端继承?需要实现哪两个方法?后端继承ImportCommandBase,需要实现GetImportCompleted和GetImportHandleType方法。03导入命令开发示例-使用框架导入模板思考题导入列模板使用框架的,处理导入逻辑时,需要做数据关联校验,该如何实现?导入命令业务需求在读者管理中添加导入命令,导入下载列模板使用框架的方法进行配置,数据校验如下:1、类别号要在类别管理中存在的数据,才能导入成功,否则提示异常;2、状态只能是可用或者是禁用才能导入成功;3、已借书数量不能大于可借书数量,且大于等于0;4、单位要验证在快码中是否存在;5、读者编号,姓名不能为空,且编号和姓名联合验证唯一。业务需求自定义导入命令开发步骤在客户端添加导入命令的js文件,继承SIE.Web.Common.Import.Commands.ImportCommandBase,js文件嵌入到资源。开发步骤自定义导入命令开发步骤添加导入命令的CS文件,继承ImportCommandBase,实现抽象类。开发步骤自定义导入命令开发步骤GetImportCompleted方法的处理,导入完成时返回成功和失败的数据。
return(DataRow[]drSuccess,DataRow[]drFailed)=>
{
};开发步骤自定义导入命令开发步骤在服务端添加导入的数据处理的handle类,实现接口IDisposable,IBusinessImport。开发步骤自定义导入命令开发步骤导入handle类方法和属性说明。开发步骤自定义导入命令开发步骤导入列头名属性ColumnNameList的处理。开发步骤自定义导入命令开发步骤创建列验证的方法CreaetColumnValid处理。开发步骤自定义导入命令开发步骤数据逻辑的处理。开发步骤
public
voidProcessBusinessDataHandle(DataRow[]drs)
{
varreaderMans=newEntityList<ReaderMan>();drs.ForEach(p=>
{
try
{
varreaderMan=newReaderMan();readerMan.ReaderNo=p[ColIndex(ColumnNameList[0])].ToString();readerMan.Name=p[ColIndex(ColumnNameList[1])].ToString();readerMan.ReaderCatId=Convert.ToDouble(p[ColIndex(ColumnNameList[2])].ToString());readerMan.BrowQty=Convert.ToInt32(p[ColIndex(ColumnNameList[3])].ToString());readerMan.Unit=p[ColIndex(ColumnNameList[4])].ToString();readerMan.State=LabelToEnum<State>(p[ColIndex(ColumnNameList[5])].ToString());readerMan.Phone=p[ColIndex(ColumnNameList[6])].ToString();readerMan.WeChat=p[ColIndex(ColumnNameList[7])].ToString();readerMan.CreateBy=RT.IdentityId;readerMan.CreateDate=DateTime.Now;readerMan.UpdateBy=RT.IdentityId;readerMan.UpdateDate=DateTime.Now;InvOrgIdExtension.SetInvOrgId(readerMan,RT.InvOrg);PhantomEntityExtension.SetIsPhantom(readerMan,false);readerMans.Add(readerMan);
}
catch(Exceptionex)
{
//设置失败信息到失败列,用于统计及显示p[ImportDataHandle.MessageColumnName]=ex.Message;
}
});
//BulkSaver.Save(readerMans);BulkSaver.SetBatchEntityId(readerMans);RF.BatchInsert(readerMans);
}自定义导入命令开发步骤导入命令cs文件的获取导入类型GetImportHandleType方法的返回值设置为导入的handle类。开发步骤自定义导入命令开发步骤配置下载模板。开发步骤自定义导入命令开发步骤使用命令。开发步骤自定义导入命令开发步骤效果,可以正常下载模板和导入数据,数据验证不符合要求的,原因会展示在导入失败数据中。开发步骤04导入命令开发示例-自定义导入模板思考题做导入功能时,下载的模板是提前配置好的,点击导入时,也需要做数据的关联校验,该如何实现?导入命令业务需求在读者管理中添加导入命令,导入模板使用自定义模板,数据校验如下:1、类别号要在类别管理中存在的数据,才能导入成功,否则提示异常;2、状态只能是可用或者是禁用才能导入成功;3、已借书数量不能大于可借书数量,且大于等于0;4、单位要验证在快码中是否存在;5、读者编号,姓名不能为空,且编号和姓名联合验证唯一。业务需求自定义下载模板导入命令开发步骤这里的需求和“03导入命令实现示例-使用框架导入模板”的业务需求除了下载模板部分存在差异外,其他的需求都是一致,这里只对查询部分实现步骤进行说明,其他的实现参考“03导入命令实现示例-使用框架导入模板”的实现
。将写好excel下载模板放到WebClient工程中的wwwroot的Templates中。开发步骤自定义下载模板导入命令开发步骤右键“读者管理导入模板”--属性,设置复制到输出目录为“如果较新则复制”。开发步骤自定义下载模板导入命令开发步骤添加导入命令的js文件,将BehaviorName设置为DownloadCustom,重写downloadTemplateSuccess方法。开发步骤SIE.defineCommand('SIE.Web.LibMan.ReaderMans.Commands.ReaderManCustomImportCommand',{extend:'SIE.Web.Common.Import.Commands.ImportCommandBase',meta:{text:"自定义下载模板导入",group:"business",iconCls:"icon-Downloadicon-blue"},executeIntervalMode:SIE.cmd.IntervalMode.Debounce.value,BehaviorName:"DownloadCustom",
/***请求下载模板成功后处理*@param
{any}
res*/downloadTemplateSuccess:function(res){
//利用服务端返回的数据创建模板文件并实现下载
varbstr=atob(res.Result),n=bstr.length,u8arr=newUint8Array(n);
while(n--){
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45107-2024表土剥离及其再利用技术要求
- 福建省宁德市中考语文模拟试卷三套【附参考答案】
- 2024年精简版:高端装备零部件采购与技术支援合同
- 2024年度艺术品抵押贷款艺术品展览展示合同3篇
- 2024殡仪馆殡葬服务协议书
- 个人信贷简易协议样式 2024年规范版
- 精神科重大意外伤害事故护理急救工作规定
- 福建省南平市武夷山第二中学高二物理下学期期末试题含解析
- 福建省南平市文化武术学校2021年高一数学文期末试卷含解析
- 福建省南平市外屯中学高二物理测试题含解析
- 《低压电工技术》课程标准
- 22G101系列图集常用点全解读
- (国家基本公共卫生服务项目第三版)7高血压患者健康管理服务规范
- 12 富起来到强起来 精神文明新风尚(说课稿)-部编版道德与法治五年级下册
- (43)-7.2羊肚菌高效栽培
- 中级消防维保理论考试试题题库及答案
- 读书会熵减华为活力之源
- 竣工图绘制规范及标准
- 二年级上学期数学
- GB/T 37433-2019低功率燃油燃烧器通用技术要求
- GB/T 3098.5-2000紧固件机械性能自攻螺钉
评论
0/150
提交评论