王 垚
2022-09-05 89e9e87324656eb6ff2bc70c731ee676eeac9111
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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);
        }
        /// <summary>
        /// 保存单据头校验器
        /// </summary>
        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<string>(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<string>(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//// 错误级别:警告、错误...
));
                }
            }
        }
    }
}