二开案例.表单插件.嵌入式窗体联动

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

二开案例.表单插件.嵌入式窗体联动

【应用场景】同一个页面下的两个独立子窗体直接互相操控。

【案例演示】创建动态表单,表单中放置一个分割容器将页面分成上下两个部分,上面的容器加载采购申请单,下面的容器加载采购订单,且两个子窗体可以相互操控。

【实现步骤】

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

using Kingdee.BOS.Core.Bill;

using Kingdee.BOS.Core.DynamicForm;

using Kingdee.BOS.Core.DynamicForm.PlugIn;

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

using Kingdee.BOS.Core.Metadata;

using Kingdee.BOS.Util;

using System;

using System.ComponentModel;


namespace Jac.XkDemo.BOS.Business.PlugIn

{

    /// <summary>

    /// 【表单插件】嵌入式窗体联动

    /// </summary>

    [Description("【表单插件】嵌入式窗体联动"), HotUpdate]

    public class EmbeddedFormLinkPlugIn : AbstractDynamicFormPlugIn

    {

        public override void AfterBindData(EventArgs e)

        {

            base.AfterBindData(e);

            // 将两个嵌入式窗体通过PageId关联起来

            var pageIds = new[] { Guid.NewGuid().ToString(), Guid.NewGuid().ToString() };

            LoadForm("F_Jac_Panel1", "PUR_Requisition", pageIds[0], pageIds[1]);

            LoadForm("F_Jac_Panel2", "PUR_PurchaseOrder", pageIds[1], pageIds[0]);

            this.View.GetView("");

        }


        private void LoadForm(string containerKey, string formId, string pageId, string linkPageId)

        {

            var billShowParameter = new BillShowParameter();

            billShowParameter.FormId = formId;

            billShowParameter.Status = OperationStatus.ADDNEW;

            billShowParameter.PageId = pageId;

            billShowParameter.ParentPageId = this.View.PageId;

            // 设置窗体显示方式为嵌入容器中

            billShowParameter.OpenStyle.ShowType = ShowType.InContainer;

            // 设置要包裹窗体的容器的Id

            billShowParameter.OpenStyle.TagetKey = containerKey;

            billShowParameter.CustomParams.Add("LinkPageId", linkPageId);

            this.View.ShowForm(billShowParameter);

        }

    }


    /// <summary>

    /// 【表单插件】嵌入式窗体1触发嵌入式窗体2的值更新事件

    /// </summary>

    [Description("【表单插件】嵌入式窗体1触发嵌入式窗体2的值更新事件"), HotUpdate]

    public class EmbeddedFormActionPlugIn : AbstractDynamicFormPlugIn

    {

        public override void BarItemClick(BarItemClickEventArgs e)

        {

            base.BarItemClick(e);

            if (e.BarItemKey.EqualsIgnoreCase("tbAction"))

            {

                var linkPageId = (string)this.View.OpenParameter.GetCustomParameter("LinkPageId");

                var linkView = this.View.GetView(linkPageId);

                if (linkView != null)

                {

                    // 修改单据编号为当前业务对象名称

                    var formName = linkView.BillBusinessInfo.GetForm().Name.ToString();

                    linkView.Model.SetValue("FBillNo", formName);

                    linkView.UpdateView("FBillNo");

                    linkView.ShowMessage(formName + "已刷新!");

                    this.View.SendDynamicFormAction(linkView);

                }

            }

        }

    }

}


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


<3>BOSIDE新建动态表单【嵌入式窗体联动[Jac_EmbeddedFormLink]】,用于容器窗体,注册表单插件,保存元数据,并发布动态表单到主控台,如下图所示。



<4>BOSIDE扩展采购申请单,菜单集合添加菜单项,注册表单插件,保存元数据。


<5>BOSIDE扩展采购订单,菜单集合添加菜单项,注册表单插件,保存元数据。

至此,开发完毕。



【功能验证】

<1>登录业务站点,打开嵌入式窗体联动菜单,点击采购申请单上的菜单,可更新采购订单。

<2>点击采购订单上的菜单,可更新采购申请单。

---------------------------------------------------------------------------------------------------------













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

【表单插件】嵌入式窗体联动.rar

二开案例.表单插件.嵌入式窗体联动

【应用场景】同一个页面下的两个独立子窗体直接互相操控。【案例演示】创建动态表单,表单中放置一个分割容器将页面分成上下两个部分,上面...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息