文件服务.二开案例.批量下载如何修改下载至本地的附件名称

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:2

文件服务.二开案例.批量下载如何修改下载至本地的附件名称

1、应用场景:

    单据详情或者单据列表上批量下载附件时,下载压缩包至本地,希望能修改压缩包内各个附件的附件名称命名规则

 

2、现状分析:

    如下图所示,目前压缩包内附件的命名规则是:单据编号_附件内码_原始附件名

    为什么这样子设计呢,Windows操作系统要求同级目录下不允许存有同名文件,而星空同一单据允许上传同名文件,所以我们的命名规则必须保证文件名唯一

    那么可不可以通过判断文件夹底下有没有同名文件然后为文件名加一呢,也不行,原因是此处为并发下载,简单判断文件名相同会有并发冲突,加锁的话会影响系统性能。

    但是如果用户希望改用自己的命名规则,也可以实现,但是需要保证新的命名规则不会有同名冲突的问题

 

3、案例演示:

    本案例将演示如何将附件批量下载的文件命名规则由系统预制的“单据编号_附件内码_原始附件名”改为“原始附件名_时间戳”。下图为实现后的效果:

 

4、实现步骤:

1)编写动态表单插件,继承AttachmentDownloadsPlugIn批量下载插件,重写FileNameFormat方法,修改命名规则,下图为示例代码:

using System;
using System.ComponentModel;
using System.IO;
using Kingdee.BOS.Business.PlugIn.Attachment;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
 
namespace Running.Sample.PlugIn.BusinessPlugIn.DynamicForm
{
    [Description("批量下载自定义文件名"), HotUpdate]
    public class P20200918FileNameDynPlugIn : AttachmentDownloadsPlugIn
    {
        /// <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}{2}", fileNameWithoutExt, DateTime.Now.Ticks, ext);
        }
    }
}

 

2)查找批量下载附件的动态表单。

 

3)拓展“批量下载附件”动态表单,取消系统预置插件,改用二开插件:

 

4)拷贝组件至WebSite/Bin目录下重启IIS,查看效果:


文件服务.二开案例.批量下载如何修改下载至本地的附件名称

1、应用场景: 单据详情或者单据列表上批量下载附件时,下载压缩包至本地,希望能修改压缩包内各个附件的附件名称命名规则。 2、现状分...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息