移动附件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_下载篇
本文2024-09-23 04:15:50发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-164185.html