二开案例.表单插件.文件上传

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

二开案例.表单插件.文件上传

【注意】最新版中,本文中的文件上传控件已更名为附件控件。


【应用场景】使用文件上传控件上传文件到应用服务器。

【案例演示】创建动态表单,使用文件上传控件,将文件上传到应用服务器。


【实现步骤】

<1>编写表单插件,代码如下。

using Kingdee.BOS.Core.DynamicForm.PlugIn;

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

using Kingdee.BOS.JSON;

using Kingdee.BOS.Util;

using System.Collections.Generic;

using System.ComponentModel;


namespace Jac.XkDemo.BOS.Business.PlugIn

{

    /// <summary>

    /// 【表单插件】文件上传

    /// </summary>

    [Description("【表单插件】文件上传"), HotUpdate]

    public class FileUploadFormPlugIn : AbstractDynamicFormPlugIn

    {

        /// <summary>

        /// 文件上传指定目录(应用服务器)

        /// </summary>

        const string FileUploadServicesDir= "FileUploadServices/UploadFiles";


        /// <summary>

        /// 文件上传过程中会多次触发自定义事件

        /// </summary>

        /// <param name="e"></param>

        public override void CustomEvents(CustomEventsArgs e)

        {

            base.CustomEvents(e);

            if (e.Key.EqualsIgnoreCase("F_Jac_FileUpload"))

            {

                // 设置上传控件参数

                this.View.GetControl("F_Jac_FileUpload").SetCustomPropertyValue("NeedCallback", true);

                this.View.GetControl("F_Jac_FileUpload").SetCustomPropertyValue("IsRequesting", false);

                if (e.EventName.EqualsIgnoreCase("FileChanged"))

                {

                    // 文件上传完毕

                    var postData = KDObjectConverter.DeserializeObject<JSONObject>(e.EventArgs);

                    if (postData != null)

                    {

                        var uploadInfo = new JSONArray(postData["NewValue"].ToString());

                        if (uploadInfo.Count > 0)

                        {

                            // 取上传的文件名

                            var fileInfo = uploadInfo[0] as Dictionary<string, object>;

                            if (fileInfo != null)

                            {

                                var fileName = fileInfo["ServerFileName"].ToString();

                                var physicalPath = PathUtils.GetPhysicalPath(FileUploadServicesDir, fileName);

                                this.View.ShowMessage("文件上传成功,存放路径:" + physicalPath);

                            }

                        }

                    }

                }

            }

        }

    }

}


<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。


<3>BOSIDE新建动态表单【文件上传[Jac_FileUpload]】(见文末附件),主要元素如下图所示,注册表单插件,保存元数据。


<4>发布动态表单到主控台,开发完毕。

-- 发布菜单

DELETE T_META_CONSOLEDETAIL WHERE FDetailFuncId='5fbdc5ed59e235' 

INSERT INTO T_META_CONSOLEDETAIL(FDETAILFUNCID,FSUBFUNCID,FNUMBER,FOBJECTID,FTYPE,FSTATUS,FPERMISSIONITEMID,FSEQ,FPARAM,FCUSTOMPARAMS,FTHUMB,FLEVEL,FVISIBLE,FFUNCTIONGROUP,FAUTHPMOBJECTTYPEID,FHTMLSTATUS,FEXCELSTATUS,FH5OBJECTID) VALUES ('5fbdc5ed59e235','068cff00618e48f4b22623a826bca1ba',N'WJSC','Jac_FileUpload','0','1',' ',4,N'{"FormId":"Jac_FileUpload","ShowType":"1","formType":"bill"}',N' ',' ',null,29,0,' ','1','0',null)  

DELETE T_META_CONSOLEDETAIL_L WHERE FDetailFuncId = '5fbdc5ed59e235' AND FLOCALEID =2052  

INSERT INTO T_META_CONSOLEDETAIL_L(FPKID,FDETAILFUNCID,FLOCALEID,FNAME,FDESCRIPTION) VALUES ('5fbdc5ed59e236','5fbdc5ed59e235',2052,N'文件上传',N' ')  



现在可以登录业务站点,打开菜单【文件上传】,检验一下文件上传功能啦。



【知识点】

<1>文件上传控件通过FileUpload.ashx传输文件到服务端。

POST /K3Cloud/FileUpLoadServices/FileUpload.ashx?filename=db9b48d1-047f-40e0-af78-231062e44e9d%206.xlsx&startposition=0&complete=true&token=36421150-0a61-4e85-84c0-b30dcba721e2 HTTP/1.1

<2>文件上传控件只负责把文件从客户端上传到应用服务器的指定目录下(FileUploadServices/UploadFiles),不会对该文件再做任何其它处理,后端可通过表单插件的CustomEvents事件对上传文件进行干预。

<3>文件上传控件执行一次文件上传动作,前端累计触发四次CustomEvents事件,具体可通过Http数据监控窗口来观察。

<4>文件上传控件支持设置上传文件类型和文件大小。
















【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696

元数据.rar

二开案例.表单插件.文件上传

【注意】最新版中,本文中的文件上传控件已更名为附件控件。【应用场景】使用文件上传控件上传文件到应用服务器。【案例演示】创建动态表单...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息