单据列表点击超链接实现下载或预览多选附件(文件服务)附件
【应用场景】
单据列表点击超链接实现下载或预览多选附件(文件服务)附件
【注意事项】
PT-148001 [8.1.0.20230420] 版本开始支持
【案例演示】
多选附件(文件服务)字段在列表上显示对应文件名的超链接,点击后进行下载或预览
【实现步骤】
<1>编写表单插件和服务插件,代码如下。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.FileServer; using Kingdee.BOS.Core.List; using Kingdee.BOS.Core.List.PlugIn; using Kingdee.BOS.Core.List.PlugIn.Args; using Kingdee.BOS.JSON; using Kingdee.BOS.ServiceHelper.FileServer; using Kingdee.BOS.Util; using Kingdee.BOS.Web.DynamicForm; namespace DemoPlugin { [Description("单据列表点击预览多选附件-列表插件"), HotUpdate] public class BillListAttachmentsPreviewPlugin : AbstractListPlugIn { /// <summary> /// 这里换成自己实际的“多选附件(文件服务)的标识 /// </summary> private const string _attachmentsFieldKey = "FEntityAttachments"; public override void ListCreateColumns(ListCreateColumnsEventArgs e) { base.ListCreateColumns(e); var attachmentNameCol = e.Columns .Select(c => c as JSONObject) .FirstOrDefault(c => _attachmentsFieldKey.EqualsIgnoreCase(c["dataIndex"].GetString())); // 超链接 attachmentNameCol["xColDspCtrlType"] = "kdlinkbutton"; } public override void AfterBindData(EventArgs e) { base.AfterBindData(e); PraseLinkCommand(); } public override void EntryButtonCellClick(EntryButtonCellClickEventArgs e) { base.EntryButtonCellClick(e); if (e.FieldKey.EqualsIgnoreCase(_attachmentsFieldKey)) { var fileInfoJson = this.ListView.CurrentSelectedRowInfo.DataRow[_attachmentsFieldKey]; AttachmentsInfo[] fileInfo = JsonUtil.DeserializeObject<AttachmentsInfo[]>(fileInfoJson.GetString()); int clickIndex; if (fileInfo != null && e.ExtParameters.TryGetValue("clickChildIndex", -1, out clickIndex)) { if (clickIndex >= 0 && clickIndex < fileInfo.Length) { //DownloadFile(fileInfo, clickIndex); PreviewFile(fileInfo, clickIndex); } } } } private void PreviewFile(AttachmentsInfo[] fileInfo, int clickIndex) { var currentFile = fileInfo[clickIndex]; // v9以前版本 //var method = typeof(DynamicWebFormView).GetMethod("FilePreviewForAttachmentField", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); //method.Invoke(this.View, new object[] { currentFile.ServerFileName }); // v9版本 FileServerHelper.PreviewFile( new FilePreviewArgs() .SetArgs(this.View, 0), new List<FilePreviewInfo> { new FilePreviewInfo(FilePreviewType.FileId, currentFile.ServerFileName, currentFile.FileName) }); } private void DownloadFile(AttachmentsInfo[] fileInfo, int clickIndex) { var currentFile = fileInfo[clickIndex]; var method = typeof(DynamicWebFormView).GetMethod("FileDownloadForAttachmentField", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); method.Invoke(this.View, new object[] { this.View.BillBusinessInfo.GetField(_attachmentsFieldKey), currentFile.ServerFileName }); } private void PraseLinkCommand() { var data = new JSONObject(); var splitPattern = new JSONObject(); // 分割方式 0:左右分割;1:上下分割 splitPattern.Put("splitStyle", 0); // 分割字符 splitPattern.Put("splitChar", "|"); data.Put("splitPattern", splitPattern); data.Put("key", _attachmentsFieldKey.ToUpperInvariant()); data.Put("row", -1); this.View.GetControl("FLIST").InvokeControlMethod("UpdateFieldStates", data); } private class AttachmentsInfo { public string ServerFileName { get; set; } public string FileName { get; set; } public string FileLength { get; set; } public string FileBytesLength { get; set; } } } }
<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<3>BOSIDE扩展目标单据,注册列表插件,保存元数据,开发完毕。
【功能验证】
<1>登录业务站点,打开目标单据列表界面,点击超链接下载或预览附件
单据列表点击超链接实现下载或预览多选附件(文件服务)附件
【应用场景】单据列表点击超链接实现下载或预览多选附件(文件服务)附件【注意事项】PT-148001 [8.1.0.20230420] 版本开始支持【案例演...
点击下载文档
本文2024-09-23 03:43:45发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-160725.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章