移动附件V 7.5_下载篇

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

移动附件V 7.5_下载篇

一、概述: 

为清楚讲解移动附件的相关功能,这里将分为:控件介绍篇、上传篇、V7.5下载篇、V7.5删除篇、V7.5控制篇等5个篇幅。

本篇将详细介绍如下内容:

1. 附件控件、附件字段如何加载数据

2. 附件控件、附件字段如何下载附件

3. 通过指令下载指定的文件


二、适用版本:

适用于V 7.5及以上


三、移动附件下载的开发介绍 

3.1. V7.5前的版本,请参考:

https://vip.kingdee.com/article/150753


3.2. V7.5及以上版本的下载开发讲解:

3.2.1. 附件为PC端单据列表-》选项-》附件中的数据(包括单据头和单据体),可通过加载附件时给定FileId,就可以点击对应附件直接下载(注:不用像V6.X那样在加载页面时在临时目录中创建下载文件)

这里结合上一篇《移动附件_上传篇》,进行附件的加载和下载的插件开发。


涉及到的知识点包括:

(1)如何根据单据获取附件数据。

//获取附件数据,

// formId关联单据的formid

// interId关联单据的主键ID

// entryKey 关联的单据体标识,如果是关联单据头则为“ ”

// entryInterId 关联的单据体主键ID,如果是单据头则为 -1;

var condition = string.Format("FBILLTYPE = '{0}' AND FINTERID = '{1}' AND FENTRYKEY='{2}' AND FENTRYINTERID='{3}'",formId, interId, entryKey, entryInterId);

var filter = OQLFilter.CreateHeadEntityFilter(condition);

var attachments = BusinessDataServiceHelper.Load(this.Context, Kingdee.BOS.Core.FormIdConst.BOS_Attachment, null, filter); 


(2)如何组装数据。

var fileList = new List<Kingdee.BOS.Mobile.Metadata.ControlDataEntity.File>(); 

foreach (var dyn in attachments)

{

    var file = new Kingdee.BOS.Mobile.Metadata.ControlDataEntity.File()

    {

        FileID = dyn["Id"].ToString(),//下载的关键依据

        Name = dyn["AttachmentName"].ToString(),

        Type = dyn["ExtName"].ToString()

    };

    fileList.Add(file);

}

var imgData = new AccessoryData()

{

    FormId = formId,

    BillId = interId,

    Data = fileList

}; 

this.View.GetControl("F_PAEZ_FileUpdate").SetValue(imgData.ToJsonString());

//如果是附件字段,可以如下赋值

//this.View.Model.SetValue(“附件字段标识”,imgData.ToJsonString());


完整代码如下,供大家参考:

using System;

using System.Linq;

using System.Collections.Generic;

using Kingdee.BOS.Mobile.Metadata.ControlDataEntity;

using Kingdee.BOS.Util;

using Kingdee.BOS.Mobile.PlugIn.Args;

using Kingdee.BOS.Mobile.PlugIn.ControlModel;

using System.Web;

using Kingdee.BOS.Core.Metadata;

using Kingdee.BOS.ServiceHelper;

using Kingdee.BOS.Core;

using Kingdee.BOS.Orm.DataEntity;

using Kingdee.BOS.FileServer.Core;

using Kingdee.BOS.FileServer.ProxyService;

using Kingdee.BOS.FileServer.Core.Object;

using Kingdee.BOS.Mobile.Metadata;

using Kingdee.BOS.Orm;

using Kingdee.BOS.Core.DynamicForm;

using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;

using Kingdee.BOS.Mobile.PlugIn;


namespace BOS.Debug.MobilePlugIn

{

    //

    /// <summary>

    /// 移动表单继承:AbstractMobilePlugin, 移动单据继承:AbstractMobileBillPlugin

    /// </summary>

    [System.ComponentModel.Description("移动单据表单插件--附件相关功能DEMO")]

    public class MobileBillPlugIn_AttachDemo : AbstractMobileBillPlugin

    { 

        public override void AfterBindData(EventArgs e)

        {

            LoadAttachments();

        }


         /// <summary>

        /// 加载附件

        /// </summary>

        private void LoadAttachments()

        {

            var formId = this.View.GetFormId(); //关联单据的formid

            var interId = this.View.BillModel.GetPKValue() as string;//关联单据的主键ID

            var entryKey = " ";//关联的单据体标识,如果是关联单据头则为“ ”

            var entryInterId = -1; //关联的单据体主键ID,如果是单据头则为 -1;


            //获取附件

            var condition = string.Format("FBILLTYPE = '{0}' AND FINTERID = '{1}' AND FENTRYKEY='{2}' AND FENTRYINTERID='{3}'",

                formId, interId, entryKey, entryInterId);

            var filter = OQLFilter.CreateHeadEntityFilter(condition);


            var attachments = BusinessDataServiceHelper.Load(this.Context, Kingdee.BOS.Core.FormIdConst.BOS_Attachment, null, filter);

            var fileList = new List<Kingdee.BOS.Mobile.Metadata.ControlDataEntity.File>(); 

            foreach (var dyn in attachments)

            {

                var file = new Kingdee.BOS.Mobile.Metadata.ControlDataEntity.File()

                {

                    FileID = dyn["Id"].ToString(),

                    Name = dyn["AttachmentName"].ToString(),

                    Type = dyn["ExtName"].ToString(),

                    IsEdit = true

                };

                fileList.Add(file);

            }


            var imgData = new AccessoryData()

            {

                FormId = formId,

                BillId = interId,

                Data = fileList

            };

            this.View.GetControl("F_PAEZ_FileUpdate").SetValue(imgData.ToJsonString());

        }

    }

}


3.2.2. 附件不是PC端单据列表-》选项-》附件中的数据,可以使用V7.5前版本的方式处理(FileId不用赋值)请参考:

https://vip.kingdee.com/article/150753


3.2.3. 通过this.View.DownLoadFile下载文件 

如果允许URL直接访问文件,可以如下:

string fileUrl = "../" + KeyConst.TEMPFILEPATH + "/" + 带扩展名的文件名;  

如果使用文件流下载,而且会在云之家中使用,可以如下(注:下载需要上下文的,建议先将附件下载到临时目录,然后fileUrl增加携带真实文件的token参数,下载页面解析token,在临时目录中按文件名查找并下载

fileUrl = "../xxx?attAliasName=" + 带扩展名的文件名 + "&attSize=" + 文件大小(单位:B); 

this.View.DownLoadFile(fileUrl, "扩展名(如:doc)");


移动附件V 7.5_下载篇

一、概述: 为清楚讲解移动附件的相关功能,这里将分为:控件介绍篇、上传篇、V7.5下载篇、V7.5删除篇、V7.5控制篇等5个篇幅。本篇将详细介...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息