二开服务插件,提交校验,不通过的数据无法提交原创
金蝶云社区-Lii_Ji
Lii_Ji
3人赞赏了该文章 114次浏览 未经作者许可,禁止转载编辑于2024年09月05日 15:16:22

[HotUpdate]

    [Description("计划订单,物料提交校验")]

    public class Submit : AbstractOperationServicePlugIn

    {

        public override void OnPreparePropertys(PreparePropertysEventArgs e)

        {

            base.OnPreparePropertys(e);

            // 添加字段,因为可能又能字段在服务插件里不显示,我们可以在这边手动添加

            e.FieldKeys.Add("F_XQDJWL");

            e.FieldKeys.Add("FDemandType");

            e.FieldKeys.Add("FSaleOrderNo");

            e.FieldKeys.Add("FSaleOrderEntrySeq");

        }


        public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e)

        {

            base.BeforeExecuteOperationTransaction(e);


            int i = 0;

            

            // 通过成功的校验

            var newObjs = new List<DynamicObject>();


            // 因为是服务插件,可能会在列表中使用,所以需要遍历,看看是一张单据还是多张单据

            foreach (var bill in e.SelectedRows)

            {

                i++;


                e.CancelMessage = "提示:";


                var djt = bill.DataEntity;


                var xqly = djt["DemandType"];


                if (xqly.IsNullOrEmptyOrWhiteSpace() || Convert.ToInt32(xqly) != 1)

                {

                    newObjs.Add(djt);

                    continue;

                }


                var xqdjbh = Convert.ToString(djt["SaleOrderNo"]);

                var xqdjhh = Convert.ToInt32(djt["SaleOrderEntrySeq"]);


                var xqdjwl = djt["F_XQDJWL_Id"];


                string sql = string.Format(@"SELECT A2.FMATERIALID FROM T_SAL_ORDER A1 INNER JOIN T_SAL_ORDERENTRY A2 ON  A1.FID = A2.FID 

                                                WHERE A1.FDOCUMENTSTATUS = 'C' AND A1.FCANCELSTATUS = 'A' AND A1.FCLOSESTATUS = 'A' AND A1.FBILLNO = @FBILLNO

                                                AND A2.FSEQ = @FSEQ");



                var a1 = DBUtils.ExecuteDynamicObject(Context, sql, null, null, System.Data.CommandType.Text, new SqlParam[] {

                new SqlParam("@FBILLNO", KDDbType.String, xqdjbh),

                new SqlParam("@FSEQ", KDDbType.Int32, xqdjhh)});


                // 数据异常的校验,在前台会显示错误信息

                if (a1.Count <= 0 || xqdjwl.IsNullOrEmptyOrWhiteSpace())

                {

                  

                    var bm = djt["BillNo"];


                    var error = new ValidationErrorInfo(


                        "", // 出错的字段Key,可以空


                        Convert.ToString(djt), // 数据包内码,必填,后续操作会据此内码避开此数据包


                        i, // 出错的数据包在全部数据包中的顺序


                        i, // 出错的数据行在全部数据行中的顺序,如果校验基于单据头,此为0


                        "E1", // 错误编码,可以任意设定一个字符,主要用于追查错误来源


                        string.Format("单据编号【{0}】数据异常,当前单据的操作取消!", bm), // 错误的详细提示信息


                        "单据合法性检查", // 错误的简明提示信息


                        ErrorLevel.FatalError // 错误级别:警告、错误


                    );


                    this.OperationResult.ValidationErrors.Add(error);


                    continue;

                }

            

                      

                if (!Convert.ToString(a1[0]["FMATERIALID"]).Equals(Convert.ToString(xqdjwl)))

                {

                    var bm = djt["BillNo"];


                    var error = new ValidationErrorInfo(


                         "", // 出错的字段Key,可以空


                         Convert.ToString(djt), // 数据包内码,必填,后续操作会据此内码避开此数据包


                         i, // 出错的数据包在全部数据包中的顺序


                         i, // 出错的数据行在全部数据行中的顺序,如果校验基于单据头,此为0


                         "E1", // 错误编码,可以任意设定一个字符,主要用于追查错误来源


                         string.Format("单据编号【{0}】数据异常,当前单据的操作取消!", bm), // 错误的详细提示信息


                         "单据合法性检查", // 错误的简明提示信息


                         ErrorLevel.FatalError // 错误级别:警告、错误


                     );


                    this.OperationResult.ValidationErrors.Add(error);


                    continue;

                }


                newObjs.Add(djt);

              

            }


            e.DataEntitys = newObjs.ToArray();

            

        }


    }

          

图标赞 3
3人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!