电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

文件服务.二开案例.二开插件方式从币别单据上传、下载附件

来源:金蝶云社区作者:金蝶2024-09-236

文件服务.二开案例.二开插件方式从币别单据上传、下载附件

本案例将演示应用服务器上如何通过二开插件,往币别单据上上传下载附件。

1、上传:

1.1、封装分块文件流,通过调用文件上传接口将文件流上传至当前启用的文件服务实例,返回FileId文件编码等信息。

1.2、遍历文件流,不断读取上传,直到文件流分块上传完毕。

1.3、传入FileId文件编辑及相关文件信息,通过保存接口,保存附件与单据的关联信息进到附件信息表格。

1.4、注意:通过此方式上传附件并不会更新附件数,需自行更新,单据无附件数字段可忽略此提醒。

2、下载附件至应用服务器本地:

2.1、传入文件编码、应用服务器保存文件的路径及登录上下文环境,调用文件下载接口,将文件下载到应用服务器本地。

3、 弹出附件下载窗体:

3.1、封装文件下载地址,发送指令给前端提示弹出文件下载窗体。

4、 示例代码如下:

using System;
using System.ComponentModel;
using System.IO;
using System.Web;
using Kingdee.BOS.Core;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.Const;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.FileServer.Core;
using Kingdee.BOS.FileServer.Core.Object;
using Kingdee.BOS.JSON;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.ServiceHelper.FileServer;
using Kingdee.BOS.Util;
 
namespace Running.Sample.PlugIn.BusinessPlugIn.Bill
{
    [Description("附件上传下载的表单插件示例。"), HotUpdate]
    public class P20200427FileServiceEdit : AbstractBillPlugIn
    {
        public override void ButtonClick(ButtonClickEventArgs e)
        {
            //上传附件,并保存于单据关联关系。
            if (e.Key.EqualsIgnoreCase("Upload"))
            {
                Upload();
            }
            //下载文件至应用服务器本地。
            if (e.Key.EqualsIgnoreCase("Download"))
            {
                Download();
            }
            //弹出下载提示窗,下载文件至客户端本地。
            if (e.Key.EqualsIgnoreCase("ShowDownload"))
            {
                ShowDownload();
            }
        }
 
        /// <summary>
        /// 上传附件,并保存于单据关联关系。
        /// </summary>
        public void Upload()
        {
            //上传附件至当前启用的文件服务实例。
            string filePath = @"D:\123.txt"; //测试用附件地址。
            FileUploadResult uploadResult = UploadAttachment(filePath);
 
            //保存与单据的关联关系,此处以币别为例。
            SaveAttachmentData(uploadResult);
        }
 
        /// <summary>
        /// 上传附件,返回上传结果。
        /// </summary>
        /// <param name="filePath">应用服务器下测试文件路径。</param>
        /// <returns>返回上传结果。</returns>
        private FileUploadResult UploadAttachment(string filePath)
        {
            FileUploadResult uploadResult = new FileUploadResult();
            long blockSize = 1024 * 1024; //分块上传大小。
            string fileName = Path.GetFileName(filePath);

            //获取上传下载服务。
            IUpDownloadService service = FileServiceContainer.GetUpDownloadService();
            TFileInfo tFile = new TFileInfo()
            {
                FileId = string.Empty, //文件编码。
                FileName = fileName, //文件名。
                CTX = this.Context, //登录上下文环境。
            };
            using (FileStream fsRead = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            {
                if (fsRead.Length <= 0)
                {
                    return uploadResult;
                }
                int block = Convert.ToInt32(Math.Ceiling((fsRead.Length * 1.0) / blockSize));
                for (int i = 0; i < block; i++)
                {
                    byte[] content = new byte[blockSize];
                    int size = fsRead.Read(content, 0, content.Length);
                    if (size == 0)
                    {
                        break;
                    }

                    tFile.Last = i == block - 1;
                    tFile.Stream = new MemoryStream(content, 0, size);
                    uploadResult = service.UploadAttachment(tFile);
                    _fileId = tFile.FileId = uploadResult.FileId;
                    if (!uploadResult.Success || tFile.Last)
                    {
                        break;
                    }
                }
            }
            return uploadResult;
        }
 
        private void SaveAttachmentData(FileUploadResult uploadResult)
        {
            //构建附件明细实体数据包。
            FormMetadata meta = FormMetaDataCache.GetCachedFormMetaData(this.Context, FormIdConst.BOS_Attachment);
            DynamicObject dynObj = new DynamicObject(meta.BusinessInfo.GetDynamicObjectType());
            dynObj["BillType"] = "BD_Currency"; //业务单据唯一标识:此处关联币别。
            dynObj["InterID"] = 1; //业务单据内码:此处上传至人民币,内码为1。
            dynObj["BillNo"] = "PRE001"; //业务单据编码:此处上传

文件服务.二开案例.二开插件方式从币别单据上传、下载附件

本案例将演示应用服务器上如何通过二开插件,往币别单据上上传下载附件。1、上传:1.1、封装分块文件流,通过调用文件上传接口将文件流上传...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信