二开案例.表单插件.禁用插件

【应用场景】
运行时,通过插件,禁用其它的插件。
【案例演示】
采购订单,表单插件,B插件会在界面上显示消息,通过A插件禁用B插件。

【实现步骤】
<1>编写表单插件DisablePlugInTestFormPlugIn,用于禁用插件测试,该插件会在单据打开时输出一个信息,代码如下。
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata.FormElement;
using Kingdee.BOS.Util;
using System;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
/// <summary>
/// 【表单插件】禁用插件测试
/// </summary>
[Description("【表单插件】禁用插件测试"), HotUpdate]
public class DisablePlugInTestFormPlugIn : AbstractDynamicFormPlugIn
{
public override void AfterBindData(EventArgs e)
{
base.AfterBindData(e);
this.View.ShowMessage("哈哈哈!!!");
}
}
}<2>编写Python插件,用于禁用插件测试,该插件会在单据打开时输出一个信息,代码如下。

# 【Python】【表单插件】禁用插件测试
def AfterBindData(e):
this.View.ShowMessage("嘿嘿嘿!!!")<3>编写表单插件DisablePlugInFormPlugIn,用于禁用插件DisablePlugInFormPlugIn和Python插件,代码如下。
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata.FormElement;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
/// <summary>
/// 【表单插件】禁用插件
/// </summary>
[Description("【表单插件】禁用插件"), HotUpdate]
public class DisablePlugInFormPlugIn : AbstractDynamicFormPlugIn
{
public override void OnInitializeService(InitializeServiceEventArgs e)
{
base.OnInitializeService(e);
RemovePlugIn();
}
public override void OnSetBusinessInfo(SetBusinessInfoArgs e)
{
base.OnSetBusinessInfo(e);
//RemovePlugIn();
}
public override void OnInitialize(InitializeEventArgs e)
{
base.OnInitialize(e);
//RemovePlugIn();
}
public override void OnLoad(EventArgs e)
{
base.OnLoad(e);
//RemovePlugIn();
}
public override void AfterBindData(EventArgs e)
{
base.AfterBindData(e);
// 显示当前页面正在使用的表单插件
//var logs = new List<string>();
//var viewPlugInProxy = this.View.GetService<DynamicFormViewPlugInProxy>();
//logs.Add("插件数量:" + viewPlugInProxy.PlugIns.Count);
//logs.AddRange(viewPlugInProxy.PlugIns.Select(plugIn => plugIn.GetType().FullName));
//var msg = string.Join("\r\n", logs);
//this.View.ShowMessage(msg);
}
/// <summary>
/// 移除插件演示
/// 将此方法,放在合适的插件事件中,即可即时移除当前View下的指定的插件。
/// </summary>
private void RemovePlugIn()
{
var plugInClassFullName = typeof(DisablePlugInTestFormPlugIn).FullName;
RemoveCSharpPlugIn(plugInClassFullName);
RemovePythonPlugIn("嘿嘿嘿");
}
/// <summary>
/// 移除C#插件
/// </summary>
/// <param name="plugInClassFullName">插件类全名</param>
private void RemoveCSharpPlugIn(string plugInClassFullName)
{
if (this.View == null)
{
return;
}
#region ViewPlugInProxy
var viewPlugInProxy = this.View.GetService<DynamicFormViewPlugInProxy>();
if (viewPlugInProxy != null)
{
//viewPlugInProxy.PlugIns.RemoveAll(plugIn =>plugIn.GetType().FullName == plugInClassFullName);
var viewPlugIn = viewPlugInProxy.PlugIns.FirstOrDefault(o => o.GetType().FullName == plugInClassFullName);
if (viewPlugIn != null)
{
viewPlugInProxy.PlugIns.Remove(viewPlugIn);
}
}
#endregion
#region ModelPlugInProxy
var modelPlugInProxy = this.View.GetService<DynamicFormModelPlugInProxy>();
if (modelPlugInProxy != null)
{
//modelPlugInProxy.PlugIns.RemoveAll(plugIn => plugIn.GetType().FullName == plugInClassFullName);
var modelPlugIn = modelPlugInProxy.PlugIns.FirstOrDefault(o => o.GetType().FullName == plugInClassFullName);
if (modelPlugIn != null)
{
modelPlugInProxy.PlugIns.Remove(modelPlugIn);
}
}
#endregion
二开案例.表单插件.禁用插件
【应用场景】运行时,通过插件,禁用其它的插件。【案例演示】采购订单,表单插件,B插件会在界面上显示消息,通过A插件禁用B插件。【实现...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



