附件管理批量下载时干预附件下载生成名称
背景:
一、目前附件管理上传的附件,选中多份下载的话是会生成一个压缩包,然后下载后会在原文件名称后面加上文件内码或者时间戳之类的,其实附件下载名称是可以干预的。
二、实现方法:
需要编写列表插件,扩展“附件明细”业务对象,取消标准附件列表插件,改用二开插件。二开插件继承自标准的附件列表插件,如下,
重写 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,登录星空系统,查看效果。
最后看效果,只显示文件名称了,去除了文件名称后缀。目前附件管理上传附件未做重复校验,跟总部有沟通后续会优化此相关功能。
大佬看看我的问题呗
附件管理批量下载时干预附件下载生成名称
本文2024-09-16 18:10:51发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-20469.html