using Demo.BillView.PRD; using Kingdee.BOS; using Kingdee.BOS.App.Data; 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.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.Util; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Demo.BillView.PRD { [Description("[日计划工单-删除校验器] 服务插件"), HotUpdate] public class Pro_DayPlanDeleteVal : AbstractOperationServicePlugIn { public override void OnPreparePropertys(PreparePropertysEventArgs e) { base.OnPreparePropertys(e); e.FieldKeys.Add("FMoEntryId"); e.FieldKeys.Add("FMoBillNo"); e.FieldKeys.Add("FPRDMOENTYID"); } //自定义校验器 public override void OnAddValidators(AddValidatorsEventArgs e) { base.OnAddValidators(e); TestValidator validator = new TestValidator(); validator.AlwaysValidate = true; validator.EntityKey = "FBillHead"; e.Validators.Add(validator); } /// /// 保存单据头校验器 /// private class TestValidator : AbstractValidator { public override void Validate(ExtendedDataEntity[] dataEntities, ValidateContext validateContext, Context ctx) { foreach (var data in dataEntities) { DynamicObject item = data.DataEntity; //LogService.Write(item); var FId = Convert.ToInt32(item["Id"].ToString()); var FBillNo = item["BillNo"].ToString(); var FMoEntryId = Convert.ToInt32(item["FMoEntryId"].ToString()); var FMoBillNo = item["FMoBillNo"].ToString(); var FPRDMOENTYID = Convert.ToInt32(item["FPRDMOENTYID"].ToString()); if (FMoEntryId == 0 || FMoEntryId == FPRDMOENTYID) continue; string sql = $"select FbillNo from T_PRD_MOCHANGE t1 join T_PRD_MOCHANGEENTRY t2 on t1.FID =T2.FID where t2.FDayPlanFid = {FId}"; var FMOChangeBillNo = DBServiceHelper.ExecuteScalar(Context, sql, ""); sql = $"select FbillNo from T_PRD_MO t1 join T_PRD_MOENTRY t2 on t1.FID =T2.FID where t2.FDayPlanFid = {FId}"; var FMONewBillNo = DBServiceHelper.ExecuteScalar(Context, sql, ""); if (FMOChangeBillNo == "" && FMONewBillNo == "") continue; validateContext.AddError(item, new ValidationErrorInfo ( "",// 出错的字段Key,可以空 item["Id"].ToString(),// 数据包内码,必填,后续操作会据此内码避开此数据包 data.DataEntityIndex, // 出错的数据包在全部数据包中的顺序 data.RowIndex,// 出错的数据行在全部数据行中的顺序,如果校验基于单据头,此为0 "001",// 错误编码,可以任意设定一个字符,主要用于追查错误来源 $"日计划工单已生成关联订单;生产订单号:{FMoBillNo},生产订单变更单:{FMOChangeBillNo}",// 错误的详细提示信息 "保存:" + data.BillNo,// 错误的简明提示信息 Kingdee.BOS.Core.Validation.ErrorLevel.Error//// 错误级别:警告、错误... )); } } } } }