二开案例.表单插件.修改文件下载链接的链接地址和标题
【应用场景】需要接管系统生成的下载链接,经过二次加工后,产生新的下载链接重新输出到下载界面
【案例演示】采购订单列表,按列表引出数据,在弹出的文件下载界面,通过表单插件修改下载地址和下载链接的标题。
【注意】此文所用方案涉及到重写标准产品的插件,存在一定的兼容性风险,请务必知悉并认真评估此风险项。
【实现步骤】
<1>编写表单插件,代码如下。
using Kingdee.BOS;
using Kingdee.BOS.Business.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
using Kingdee.BOS.Core.Metadata.ControlElement;
using Kingdee.BOS.JSON;
using Kingdee.BOS.ServiceHelper.FileServer;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Reflection;
using System.Web;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
/// <summary>
/// 【表单插件】修改文件下载链接的链接地址和标题
/// </summary>
[Description("【表单插件】修改文件下载链接的链接地址和标题"), HotUpdate]
public class SetDownloadLinkFormPlugIn : FileDownLoadPlugIn
{
public override void AfterBindData(EventArgs e)
{
if (FileServerHelper.GetIsFlowControlled(this.Context))
{
this.View.ShowErrMessage("流量存储已用尽,请联系销售人员进行购买。"); // 文件服务流量控制。
return;
}
if (this.View.OpenParameter.GetCustomParameters().ContainsKey("urls"))
{
// 多个下载链接
InitLinkList();
return;
}
// 单个下载链接
var url = this.View.OpenParameter.GetCustomParameter("url");
if (!url.IsNullOrEmptyOrWhiteSpace())
{
//var pathurl = HttpUtility.UrlPathEncode(GetDownLoadUrl(url.ToString()));
var pathurl = HttpUtility.UrlPathEncode(url.ToString());
pathurl = pathurl.Replace("+", "%20");
// TODO
// 可以在此处干预下载链接
pathurl = pathurl + "?code=abc";
// TODO
if (!KDConfiguration.Current.IsFileSaveAs)
{
//非强制点击链接另存模式时,继续走直接url打开模式
this.View.GetControl("FDownLoad").SetCustomPropertyValue("url", pathurl);
this.View.GetControl("FDownLoad").SetCustomPropertyValue("IsFileUrl", true);
this.View.GetControl("FDownLoad").InvokeControlMethod("UpdateRihgtMenu", null);
}
else
{
//直接点击调的另存的模式,强制下载
this.View.GetControl("FDownLoad").SetCustomPropertyValue("IsClickSave", true);
this.View.GetControl("FDownLoad").SetCustomPropertyValue("ClickSaveUrl", pathurl);
}
}
// TODO
// 设置下载链接标题
this.View.GetControl("FDownLoad").SetCustomPropertyValue("Text", "亲点我下载呀~~");
// TODO
}
/// <summary>
/// 设置多文件下载链接
/// </summary>
private void InitLinkList()
{
var btnArray = new JSONArray();
var filePaths = (List<string>)this.View.OpenParameter.GetCustomParameter("urls");
var linkLeft = 20;
var linkTop = 5;
for (var i = 0; i < filePaths.Count; i++)
{
// TODO
// 可以在此处干预下载链接
var url = GetDownLoadUrl(filePaths[i]);
// TODO
var newBtn = new LinkBtnAppearance();
newBtn.Key = "btnLink" + i.ToString();
newBtn.Caption = new LocaleValue(string.Format("part{0}", i + 1));
newBtn.URL = HttpUtility.UrlPathEncode(url).Replace("+", "%20");
newBtn.Width = new LocaleValue("50");
newBtn.Visible = 2147483647;
newBtn.Style = 0;
if (i > 0 && i % 5 == 0)
{
linkTop += 20;
linkLeft = 20;
}
newBtn.Top = new LocaleValue(linkTop.ToString());
newBtn.Left = new LocaleValue(linkLeft.ToString());
linkLeft += 55;
var json = newBtn.CreateControl();
json["isfileurl"] = true;
btnArray.Add(json);
}
var panel = new PanelAppearance("FPanelLinks");
panel.Dock = 5;
var jsonpanel = panel.CreateControl();
jsonpanel["items"] = btnArray;
this.View.GetControl<Panel>("FPanelLinks").ReplaceChildrenData(jsonpanel);
}
/// <summary>
/// 获取下载地址
/// </summary>
/// <param name="url">文件相对地址</param>
/// <returns></returns>
private string GetDownLoadUrl(string url)
{
var method = typeof(FileDownLoadPlugIn).GetMethod("GetDownLoadUrl", BindingFlags.Instance | BindingFlags.NonPublic);
return (string)method.Invoke(this, new object[] { url });
}
}
}
<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<3>扩展动态表单【文件下载】(BOS_FileDownLoad),停用标准产品的表单插件,注册步骤1编写的新的表单插件,保存元数据,开发完毕。
现在可以登录业务站点,打开采购订单列表,执行【按列表引出数据】操作,检验一下插件效果啦。
【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696
二开案例.表单插件.修改文件下载链接的链接地址和标题
本文2024-09-23 04:21:12发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-164755.html