【应用场景】
变更单审核过程中,对于“标记完成”功能自定义校验逻辑。
【案例演示】
非变更单负责人无法执行标记完成功能。
【实现说明】
由于“标记完成”功能是通过EntryBarItemClick事件触发的,无法通过操作事件阻止。因此只能通过重写标准插件,拦截按钮事件实现。
【实现步骤】
如果你刚接触PLM二开,你可能需要参考:
如何编写二开插件配置等请参考:二次开发扩展程序开发之插件模式https://vip.kingdee.com/article/83591896433330944?productLineId=1
其他星空PLM开发指南也可以参考 【汇总】星空PLM二开指南(持续更新)https://vip.kingdee.com/article/329914697153905408?productLineId=1&isKnowledge=2
更多详细的金蝶云星空BOS二次开发指南:https://vip.kingdee.com/article/94751030918525696?productLineId=1&isKnowledge=2
<1>编写表单插件,添加引用:
<2>新增自定义类,继承PLM标准功能插件ECNBill。 重写EntryBarItemClick事件,拦截对应的按钮点击事件。加入自定义校验逻辑,如果校验不通过则提示后返回,否则调用Base方法继续执行标准逻辑。
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.K3.PLM.STD.Business.PlugIn.EngineeringChange;
using System;
using System.ComponentModel;
namespace ISV.PLM.ECNDemo
{
[Description("ECN标记完成校验示例")]
public class ECNMarkFinishedValidator: ECNBill
{
public override void EntryBarItemClick(BarItemClickEventArgs e)
{
if (e.BarItemKey.ToUpper() == "TBMARKFINISH")
{
if (this.PLMContext.BOSContext.UserId != Convert.ToInt64(this.View.Model.GetValue("FCHARGEUSERID_ID")))
{
this.View.ShowErrMessage("非执行人!");
e.Cancel = true;
return; // 如果存在校验问题,则直接退出,不再执行后续逻辑
}
}
base.EntryBarItemClick(e); // 此处必须调用base,正常执行标准逻辑
}
}
}
<3>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS
<4>打开BOSIDE,找到单据【变更单】。 扩展并将标准插件替换成二开的插件
<5>保存后,PLM管理者账户登录站点。在PLM业务类型初始化中,更新变更单业务类型。更新完成后即可查看效果。