二开案例.表单插件.修改文件下载链接的链接地址和标题

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

二开案例.表单插件.修改文件下载链接的链接地址和标题

【应用场景】需要接管系统生成的下载链接,经过二次加工后,产生新的下载链接重新输出到下载界面

【案例演示】采购订单列表,按列表引出数据,在弹出的文件下载界面,通过表单插件修改下载地址和下载链接的标题。

注意】此文所用方案涉及到重写标准产品的插件,存在一定的兼容性风险,请务必知悉并认真评估此风险项。

【实现步骤】

<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

二开案例.表单插件.修改文件下载链接的链接地址和标题

【应用场景】需要接管系统生成的下载链接,经过二次加工后,产生新的下载链接重新输出到下载界面【案例演示】采购订单列表,按列表引出数据...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息