背景:
一、目前附件管理上传的附件,选中多份下载的话是会生成一个压缩包,然后下载后会在原文件名称后面加上文件内码或者时间戳之类的,其实附件下载名称是可以干预的。
二、实现方法:
需要编写列表插件,扩展“附件明细”业务对象,取消标准附件列表插件,改用二开插件。二开插件继承自标准的附件列表插件,如下,
重写 FileNameFormat 方法
即可:Kingdee.BOS.Business.PlugIn.Attachment.AttachmentListPlugIn, Kingdee.BOS.Business.PlugIn
三、实例案例:
把原来的附件下载名称由文件名+内码改为直接下载就是文件名。例如截图:
示例代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Kingdee.BOS.Business.PlugIn.Attachment;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using System.ComponentModel;
namespace Running.Sample.PlugIn.BusinessPlugIn.DynamicForm
{
[Description("批量下载自定义文件名"), HotUpdate]
public class P20200918FileNameDynPlugIn : Kingdee.BOS.Business.PlugIn.Attachment.AttachmentListPlugIn
{
/// <summary>
/// 传入附件信息的实体数据包,对文件名进行格式化,返回格式化后的文件名,包含文件后缀。
/// </summary>
/// <param name="dyn">附件信息的实体数据包。</param>
/// <returns>返回格式化后的文件名,包含文件后缀。</returns>
protected override string FileNameFormat(DynamicObject dyn)
{
string fileName = dyn["AttachmentName"].GetString();
string fileNameWithoutExt = Path.GetFileNameWithoutExtension(fileName);
string ext = Path.GetExtension(fileName);
return string.Format("{0}{1}", fileNameWithoutExt, ext);
}
}
}
1、把生成的DLL文件拷贝到website的bin目录下。
2、然后打开BOS平台查询找到附件明细,并进行扩展
3、找到列表插件,然后取消掉自带的,然后注册刚编译好的新插件。
4、最后重启IIS,登录星空系统,查看效果。
最后看效果,只显示文件名称了,去除了文件名称后缀。目前附件管理上传附件未做重复校验,跟总部有沟通后续会优化此相关功能。
您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!
请选择打赏金币数 *