MES开发与应用 课件 3.6 工业管理软件开发基础-附件功能的开发实现_第1页
MES开发与应用 课件 3.6 工业管理软件开发基础-附件功能的开发实现_第2页
MES开发与应用 课件 3.6 工业管理软件开发基础-附件功能的开发实现_第3页
MES开发与应用 课件 3.6 工业管理软件开发基础-附件功能的开发实现_第4页
MES开发与应用 课件 3.6 工业管理软件开发基础-附件功能的开发实现_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

3.6附件功能的开发实现深圳市信息职业技术学院目

录附件开发示例01附件开发注意事项02上传按钮框架实现介绍03下载按钮框架实现介绍04知识回顾平台打印模板设置介绍;单据打印开发示例;标签打印开发示例;单据和标签打印开发注意事项。学习目标通过本节学习可以:掌握附件功能的开发实现;掌握附件功能的异常定位并能够修复异常;了解框架上传按钮的实现逻辑;了解框架下载按钮的实现逻辑。01附件开发示例附件使用介绍附件使用介绍平台附件功能的实现是作为子列表实现。平台所有附件名称、大小、路径等都是存在表BD_ATTACHMENT中,不同功能的附件数据通过所属父IDOWNER_ID和鉴别器DISCRIMINATOR进行过滤数据的。平台附件文件是存放到对应服务器中的,所以使用附件功能需要配置附件方式。附件功能的属性和界面配置框架有做通用实现,所以在做附件功能开发时,实体继承框架的附件实体类去实现,如果未增加属性,框架实现的操作按钮也能满足要求,重写的附件不需要做界面配置,使用框架通用的配置即可。思考题在读者管理功能中添加一个附件子列表,附件子列表包含上传、下载和删除命令,能正常上传、下载文件和删除数据,如何实现?附件开发示例开发步骤在服务端工程添加附件子实体,继承Attachment,关联读者管理的实体类。附件开发示例开发步骤添加附件仓库,以附件实体类名+Repository进行命名,继承AttachmentRepository,标记仓库使用的数据提供者,因为要关联数据提供者类,所以使用附件的工程必须要添加数据提供者类。附件开发示例开发步骤添加附件实体配置类,继承AttachmentEntityConfig,重写配置元数据的方法ConfigMeta,在ConfigMeta方法中设置启用鉴别器,通过Meta.EnableDiscriminator(“名称唯一”)设置。附件开发示例开发步骤在读者管理实体中添加附件的列表属性。附件开发示例开发步骤在配置文件中,配置上传和下载信息,支持ftp和ntfs,如下是ntfs配置,上传和下载路径支持本地路径配置。附件开发示例开发步骤效果,能够正常上传、下载和删除文件。知识扩展知识扩展如果读者的附件只有下载权限,如何实现?知识扩展知识扩展可以将子属性的视图配置的分组设置为readonly,如ViewGroup="Readonly"?思考题文件路径为空,文件上传失败,无法下载,可能的原因是?附件仓库未按规范命名,附件仓库的命名规范:附件实体类名+Repository。02附件开发注意事项附件开发注意事项注意事项开发附件功能的服务端工程必须要有数据提供者。附件功能必须要有数据仓库,且数据仓库必须是“附件的实体名+Repository”命名。附件的实体配置要启用鉴别器,且鉴别器配置的字符串不能跟其他功能的附件的鉴别器冲突,否则数据有可能会冲突。平台开发的附件功能只能做为子列表来展示。使用附件必须配置附件方式。附件默认有上传、删除、下载的权限,如果要设置只有下载的权限,可以给附件子列表设置分组为Readonly。 View.ChildrenProperty(p=>p.ReaderAttachment).ViewGroup="Readonly";03上传按钮框架实现介绍思考题框架上传按钮上传的文件大小是否有限制?如果有,最大能上传多大的文件?上传按钮框架前端实现前端实现canExecute和execute方法逻辑。

/***是否可以执行*@param{*}view*@returns总是可以执行,*子类可以根据具体情况覆写*/canExecute:function(view){if(view.getParent().getCurrent()==null)returnfalse;returntrue;},/***执行方法**@param{*}listView*@param{*}source*/execute:function(listView,source){varbtnFile=Ext.create('Ext.form.field.FileButton',{renderTo:Ext.getBody(),hidden:true});btnFile.on("change",this.buttonChange,this);btnFile.fileInputEl.dom.click();},父的当前操作行为null,上传按钮不允许操作创建ext的文件按钮监听文件按钮的变更事件,即用户选择文件时,会执行到buttonChange方法的逻辑文件按钮的点击事件上传按钮框架前端实现前端实现buttonChange方法逻辑。buttonChange:function(field,newValue){varme=this;varfile=field.fileInputEl.dom.files.item(0);varfileSize=file.size;varentity=me.view.getParent().getCurrent().data;varfileName=;varvalidateResult=me.validateFile(fileSize,fileName,file,entity);if(!validateResult){return;}varfileExt=fileName.substring(fileName.lastIndexOf(".")).toLowerCase();varfileReader=newFileReader('file://'+newValue);fileReader.readAsDataURL(file);获取文件获取文件大小获取父当前操作行数据获取文件名称调用文件校验,校验不通过,直接返回将文件的扩展名转为小写读取文件上传按钮框架前端实现前端实现buttonChange方法逻辑。fileReader.onload=function(e){if(me.view){if(entity){SIE.Msg.wait("提示框","正在上传,请稍等.....".t());me.view.execute({data:{Attachment:{OwnerId:entity.Id,Content:e.target.result,FileSize:fileSize,FileExtesion:fileExt,FileName:fileName},Entity:entity},success:function(res){

me.view.reloadData();

me.afterSave(me.view);SIE.Msg.close();Ext.Msg.alert('提示'.t(),res.Result);}});}}}}上传文件操作执行后端逻辑传到后端的参数重新加载数据调用保存后方法,该方法是空方法,用于扩展逻辑关闭等待提示框上传成功后的提示消息上传按钮框架前端实现前端实现validateFile方法逻辑。validateFile:function(fileSize,fileName,file,entity){if(Ext.isEmpty(fileName)){Ext.MessageBox.alert("提示","上传的文件名不能为空。".t());returnfalse;}varsize=fileSize/1024;if(size>20000){Ext.MessageBox.alert("提示","附件不能大于20M。".t());returnfalse;}returntrue;},文件名称的校验文件大小的校验上传按钮框架后端实现后端实现全局变量的属性定义。 ///<summary>///附件保存前验证事件,子类可以根据需要扩展,比如验证附件中的内容

///</summary>publiceventFunc<Stream,string>ValidatingFileStream;///<summary>///附件保存前事件,子类可以根据需要扩展

///</summary>publiceventFunc<UploadAttachmentViewArgs,string>SavingAttachement;///<summary>///附件保存后事件,子类可以根据需要扩展,比如保存实体相关的内容

///</summary>publiceventFunc<UploadAttachmentViewArgs,string>SavedAttachement;上传按钮框架后端实现后端实现执行方法逻辑。protectedoverrideobjectExcute(ViewArgsargs,stringscope){varmeta=ClientEntities.Find(args.Type);if(scope!=meta.EntityType.GetQualifiedName())thrownewSystem.Security.SecurityException("参数type[{0}]与令牌不一致".FormatArgs(args.Type));varviewArgs=this.DeserializeData(args.Data);varentityType=meta.EntityType;viewArgs.Attachment.OwnerType=entityType;varsm=this.GetAttachement(viewArgs);

varvalidateMsg=this.OnValidateFileStream(sm);if(!string.IsNullOrEmpty(validateMsg)){returnvalidateMsg;}

this.OnSavingAttachement(viewArgs);

this.SaveAttachement(viewArgs,entityType);

this.OnSavedAttachement(viewArgs);return"上传成功。".L10N();}从前端json数据反序列化获取流对象验证事件,保存附件前的验证调用保存前事件执行保存附件逻辑保存附件后的处理逻辑上传按钮框架后端实现后端实现上传按钮后端其他方法逻辑实现参考。04下载按钮框架实现介绍思考题做导入功能时,下载的模板是提前配置好的,点击导入时,也需要做数据的关联校验,该如何实现?下载按钮的前端实现前端实现SIE.defineCommand('SIE.Web.Common.Attachments.Commands.FtpDownloadCommand',{extend:'SIE.cmd.ExportCommandBase',meta:{text:"下载",group:"edit",iconCls:"icon-Downloadicon-blue"},canExecute:function(view){varitem=view.getCurrent();if(item!=null){returntrue;}returnfalse;},execute:function(listView,source){varitem=listView.getCurrent();this.doSubmit({Name:listView.getSourceCmd().command,Token:listView.getToken(),Data:SIE.data.Utils.seriaizeRequest({Data:SIE.data.Utils.seriaizeRequest({FileName:item.data.FileName,FilePath:item.data.FilePath,})})});}});下载按钮框架后端实现后端实现publicclassFtpDownloadCommand:ViewCommand{///附件配置地址,从web.config中的节点client.PathAttachment获取 ///<returns>文件流</returns>protectedoverrideobjectExcute(ViewArgsargs,stringscope){try{vardata=args.Data.ToJsonObject<AttachmentArgs>();varfileBytes=RT.Service.Resolve<AttachmentController>().FileDownload(data.FilePath,data.FileName);//byte到内存流输出

varfileStreamResult=newFileStreamResult(newMemoryStream(fileBytes),"application/octet-stream");fileStreamResult.FileDownloadName=data.FileName;returnfileStreamResult;

温馨提示

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

评论

0/150

提交评论