二开案例- DataChanged事件 + 单据新增来源原创
金蝶云社区-墨白64
墨白64
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      

赞 1