电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

二开案例-【C#】如何在生产订单下达操作上增加自定义的校验器?

来源:金蝶云社区作者:金蝶2024-09-231

二开案例-【C#】如何在生产订单下达操作上增加自定义的校验器?

       由于生产订单状态机(指生产订单订单上计划确认、下达、开工、完工、结案等状态转换)只是个空操作,它的作用只是承担状态发起的作用,添加的标准校验器不能干预到状态的逻辑,目前这些状态的转换校验是由内部状态机的校验来实现,通过标准的操作校验和前台表单插件无法生效,所以提供下面的方法供客户自定义添加校验器,以结案为例。

      1、打开【BOSIDE-生产制造-基础管理-普通基础资料】下的单据业务状态机发布到菜单(注意:发布类型为列表)如图:


1.webp

2.webp

2、开始编辑自定义的校验器,以【下达】为例,检验生产订单分录自定义基础资料客户下达时必录;

Snipaste_2022-04-27_15-54-50.webp

3、代码编写步骤

  1. 新加的类(Ext_Release.cs)继承结案的实现类(Release.cs),需要引用下Kingdee.K3.MFG.PRD.App.Core组件

  2. 重写GetValidator方法;

  3. 首先要执行下基类的base.GetValidator,然后添加自己的校验器(Ext_ReleaseValidator.cs);

  4. 注意:Confirm【计划确认】,Release【下达】,Start【开工】,Finish【完工】,Close【结案】,CloseAccount【结算】。

代码如下:

using Kingdee.BOS.Util;
using Kingdee.K3.Core.MFG.EnumConst;
using Kingdee.K3.MFG.App.BizEngine.Validator;
using Kingdee.K3.MFG.PRD.App.Core.MOBizState;
using Kingdee.K3.MFG.PRD.App.Core.Validate;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using Kingdee.K3.Core.MFG.EntityHelper;
using Kingdee.BOS.Orm.DataEntity;

namespace ITIBB.App.ServicePlugIn
{
    [Description("生产订单下达校验器")]
    public class Ext_Release : Release
    {
        /// <summary>
        /// 获取标准产品下达校验器,并注册二开校验器【注意需要执行base,以保证标准逻辑的执行】
        /// </summary>
        /// <returns></returns>
        public override AbstractBusinessStateValidator[] GetValidator()
        {
            //获取标准产品存在的校验器
            AbstractBusinessStateValidator[] validatorArr = base.GetValidator();
            //判断标准产品本身是否存在校验器,存在则直接转换类型,不存在则实例化
            List<AbstractBusinessStateValidator> validatorLst = validatorArr.IsEmpty() ? 
            new List<AbstractBusinessStateValidator>() : validatorArr.ToList();
            //添加二开的校验器
            validatorLst.Add(new Ext_ReleaseValidator());
            //返回校验器
            return validatorLst.ToArray();
        }
    }

    [Description("下达校验器逻辑")]
    public class Ext_ReleaseValidator : AbstractMoBusinessStateValidator
    {
        protected override void ValidateData()
        {
            //二开校验器逻辑主要写在该位置
            base.ValidateData();
            //例如:检验自定义客户字段是否填值
            this.ExtCheckCustomerMustInput();
        }

        /// <summary>
        /// 检查自定义字段下达时必录
        /// 生产订单分录数据包:this.BizStateContext.InputBizData
        /// </summary>
        private void ExtCheckCustomerMustInput()
        {
            //具体逻辑实现
            foreach (var data in this.BizStateContext

二开案例-【C#】如何在生产订单下达操作上增加自定义的校验器?

由于生产订单状态机(指生产订单订单上计划确认、下达、开工、完工、结案等状态转换)只是个空操作,它的作用只是承担状态发起的...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信