二开案例.表单插件.表单插件运行机制

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

二开案例.表单插件.表单插件运行机制

【生命周期】

开始->

----------------------------------------------------------设计时----------------------------------------------------------

程序猿编写插件代码->

编译插件工程获得组件->

BOSIDE给单据注册插件,生成元数据XML->

----------------------------------------------------------运行时----------------------------------------------------------

用户登录星空->

用户打开单据,元数据XML被合成为运行时元数据实例FormMetadata(BusinessInfo+LayoutInfo)->

BOS平台生成单据的View和Model,此时表单插件被实例化后放入EventsProxy->

BOS平台使用EventsProxy有序触发插件的各种事件->

用户关闭单据>

插件实例销毁回收->

结束



【运行层级】

View层、Model层。



【案例演示】

下面将以采购订单的菜单点击事件为例,详细介绍表单插件的运行机制。


<1>编写表单插件,代码如下,编译后将组件放入应用服务器WebSite\bin目录下,重启IIS。

using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Util;
using System;
using System.ComponentModel;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
    /// <summary>
    /// 【表单插件】Test
    /// </summary>
    [Description("【表单插件】Test"), HotUpdate]
    public class TestFormPlugIn : AbstractDynamicFormPlugIn
    {
        public override void BarItemClick(BarItemClickEventArgs e)
        {
            base.BarItemClick(e);
            if (e.BarItemKey.Equals("test", StringComparison.OrdinalIgnoreCase))
            {
                // TODO
            }
        }
    }
}


<2>登录BOSIDE,扩展采购订单,注册表单插件。

保存后,获得增量元数据XML如下。

采购订单标准插件如下图。

采购订单标准插件XML如下图。

此时,设计时的插件有9个。


<3>用户demo登录金蝶云星空,打开采购订单。

界面打开前,BOS平台会构建采购订单的运行时元数据实例FormMetadata(BusinessInfo+LayoutInfo),其中包含了设计时注册的9个插件,可使用VS2022调试插件(https://vip.kingdee.com/article/117230406226751232),观察变量View.BillBusinessInfo.GetForm().FormPlugins获取插件信息,如下图。

此时的插件集合,只是插件类的定义描述,尚未实例化。


<4>采购订单的运行时元数据实例构建完后,BOS平台会继续构建单据的View和Model,同时会将表单插件实例化,并存放到View和Model的EventsProxy属性的PlugIns集合中,使用VS2022调试调试插件,观察变量View.EventsProxy获取运行时的插件实例信息,如下图。

此时的插件集合,已经完成了实例化和初始化,随时等待被BOS平台调用。

注意:此时的插件数量是12个,比设计时多了3个。因为运行时平台会动态注入插件,用户也可以二开动态注入插件。

插件实例化过程由Form的CreateFormPlugIn方法实现:

BillView.EventsProxy定义如下:

BillModel.EventsProxy定义如下:


<5>用户点击采购订单主菜单上的菜单test,BOS平台通过采购订单的View的EventsProxy的FireBarItemClick方法触发菜单点击事件BarItemClick,所有表单插件的BarItemClick事件都会被触发。

DynamicFormViewPlugInProxy.FireBarItemClick方法定义如下:

核心逻辑:遍历插件实例集合,逐个调用插件的BarItemClick方法。

BarItemClick事件触发位置:


<6>用户关闭采购订单,View被销毁,表单插件实例也随之被销毁回收。

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













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

二开案例.表单插件.表单插件运行机制

【生命周期】开始->----------------------------------------------------------设计时------------------------------------------------...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息