校验器类基本结构原创
5次浏览
编辑于2024年09月30日 15:04:33
【应用场景】数据校验,操作交互。 【案例演示】单据保存操作,挂载校验器。 【实现步骤】 <1>编写校验器。 /// <summary> /// 演示校验器 /// </summary> public class DemoValidator : AbstractValidator { /// <summary> /// 校验器初始化 /// </summary> /// <param name="validateContext"></param> /// <param name="ctx"></param> public override void InitializeConfiguration(ValidateContext validateContext, Context ctx) { base.InitializeConfiguration(validateContext, ctx); if (validateContext.BusinessInfo != null) { EntityKey = validateContext.BusinessInfo.GetEntity(0).Key; } } /// <summary> /// 校验器主体逻辑 /// </summary> /// <param name="dataEntities"></param> /// <param name="validateContext"></param> /// <param name="ctx"></param> public override void Validate(ExtendedDataEntity[] dataEntities, ValidateContext validateContext, Context ctx) { if (validateContext.IgnoreWarning) { return; // 警告已经被用户忽略,就不需要再次执行了 } if (dataEntities == null || dataEntities.Length <= 0) { return;// 传入数据包为空 } // 循环校验每一个数据包(一个数据包对应一张单据) foreach (var et in dataEntities) { var hasError = false; // TODO // 进行数据校验 hasError = true; // TODO // 如果校验不通过,抛出校验异常 if (hasError) { validateContext.AddError(et, new ValidationErrorInfo( "", // 出错的字段Key,可以空 Convert.ToString(et.DataEntity[0]), // 数据包内码,必填,后续操作会据此内码避开此数据包 et.DataEntityIndex, // 出错的数据包在全部数据包中的顺序 et.RowIndex, // 出错的数据行在全部数据行中的顺序,如果校验基于单据头,此为0 "E1", // 错误编码,可以任意设定一个字符,主要用于追查错误来源 "数据校验未通过,不能继续往下操作了哦。。", // 错误的详细提示信息 "单据合法性检查", // 错误的简明提示信息 ErrorLevel.FatalError // 错误级别:警告、错误 )); } } } } <2>编写服务插件。 using System; using System.ComponentModel; using Kingdee.BOS; using Kingdee.BOS.Core; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.Validation; using Kingdee.BOS.Util; namespace Jac.XkDemo.BOS.App.PlugIn { /// <summary> /// 操作服务插件校验器功能演示 /// </summary> [HotUpdate] [Description("操作服务插件校验器功能演示")] public class DemoOperationServicePlugIn : AbstractOperationServicePlugIn { /// <summary> /// 添加插件需要用到的字段引用 /// </summary> /// <param name="e"></param> public override void OnPreparePropertys(PreparePropertysEventArgs e) { base.OnPreparePropertys(e); //e.FieldKeys.Add("FQty"); // TODO } // <summary> /// 添加校验器 /// </summary> /// <param name="e"></param> public override void OnAddValidators(AddValidatorsEventArgs e) { base.OnAddValidators(e); // 添加校验器 var demoValidator = new DemoValidator(); e.Validators.Add(demoValidator); // 继续添加其他校验器 // TODO } } }