二开案例.表单插件.嵌入式窗体联动
【应用场景】同一个页面下的两个独立子窗体直接互相操控。
【案例演示】创建动态表单,表单中放置一个分割容器将页面分成上下两个部分,上面的容器加载采购申请单,下面的容器加载采购订单,且两个子窗体可以相互操控。
【实现步骤】
<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
二开案例.表单插件.嵌入式窗体联动
本文2024-09-23 04:19:47发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-164610.html