二开案例- DataChanged事件 + 单据新增来源原创
1人赞赏了该文章
275次浏览
未经作者许可,禁止转载编辑于2023年09月07日 09:34:45
DataChanged是当单据内字段值有发生改变时会触发的一个事件,同时DataChanged事件提供了字段操作之前的数据e.OldValue 以及字段变更值 e.NewValue,这两个属性可以方便我们做很多操作。同时,值得注意的是, DataChanged事件当中并不存在 e.Cancel 属性 无法直接通过DataChanged 事件阻止 值更新事件的 执行 。
想要校验变更前后值的合法性得通过BeforeUpdateValue事件当中去获取字段当前值和 e.value 当中的数据包进行判断,如果操作之后的数据包不符合规范,可以通过e.Cancel =True 终止当前值更新事件的执行,进而达到校验的目的。
单据的新增状态实际上区分为多种状态,那么该如何区分呢?,比如说我想做的插件仅希望单据通过复制新增的方式才生效。
最好的方式就是通过 this.View.OpenParameter.CreateFrom 属性来区分。
或者说 也可以通过AfterCopyData 和 AfterCreateNewData 来区分数据是通过复制新增还是正常新增。
using Kingdee.BOS.Core.Bill.PlugIn; 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 GetCreateFromBillPlugIn : AbstractBillPlugIn { public override void AfterBindData(EventArgs e) { base.AfterBindData(e); var msg = ""; switch (this.View.OpenParameter.CreateFrom) { case CreateFrom.Default: msg = "正常新增"; break; case CreateFrom.Copy: msg = "复制新增"; break; case CreateFrom.Draw: msg = "选单新增"; break; case CreateFrom.Push: msg = "下推新增"; break; } this.View.ShowMessage("新增界面来源:" + msg); } } }
具体代码参照 官方文档 https://vip.kingdee.com/article/377452105784652288?productLineId=1&isKnowledge=2
推荐阅读