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

判断单据是否存在预留关系校验器

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

判断单据是否存在预留关系校验器


系统标准的销售订单、预测单、计划订单、生产订单、委外订单、组织间需求单上都有是否已MRP运算标识,这个标识为true时表示该单曾经参与过运算并产生了预留关系。但预留关系是动态变化的,如果要实时校验某单据是否存在预留关系,则可参照本帖实现。

通常单据反审核或删除时需要校验是否存在预留关系,基于该业务场景需求,本贴以预测单反审核为例,展示了示例校验器实现及调用。


具体步骤如下:


一、实现校验器:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Kingdee.K3.Core.MFG.EnumConst;

using Kingdee.BOS.App.Data;

using Kingdee.BOS;

using Kingdee.BOS.Util;

using Kingdee.BOS.Core;

using Kingdee.BOS.Core.Validation;

using Kingdee.K3.MFG.App.ServiceValidator;

using Kingdee.K3.Core.MFG.EntityHelper;

using Kingdee.BOS.Orm.DataEntity;


namespace NY.CusSch.App.Business.PlugIn

{

    /// <summary>

    /// 检查是否有预留关系校验器

    /// </summary>

    public class Cust_IsHasRLValiator : AbstractValidator

    {

        /// <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 (dataEntities.IsEmpty()) return;


            List<long> pkIds = new List<long>();

            foreach (var dataEntity in dataEntities)

            {

                DynamicObject billData = dataEntity.DataEntity;

                long pkId = billData.GetDynamicValue<long>("Id");

                pkIds.Add(pkId);

            }

            if (pkIds.IsEmpty()) return;


            //以下SQL查询预测单预留关系,若要校验别的单据,则把PLN_FORECAST改成对应的单据标识。

            //若需从供应单据角度查预留关系,则相应的SQL形如:SELECT FSUPPLYINTERID FROM T_PLN_RESERVELINKENTRY WHERE FSUPPLYFORMID='PUR_PurchaseOrder'

            string sql = @" SELECT FSRCINTERID, FPARENTINTERID, FDEMANDINTERID FROM T_PLN_RESERVELINK WHERE (FSRCFORMID='PLN_FORECAST' OR FPARENTFORMID='PLN_FORECAST' OR FDEMANDFORMID='PLN_FORECAST') ";

            List<long> rlInterIds = new List<long>();

            long rlInterId = 0;

            DynamicObjectCollection infos = DBUtils.ExecuteDynamicObject(ctx, sql);

            foreach (DynamicObject info in infos)

            {

                string srcInterIdStr = info.GetDynamicValue<string>("FSRCINTERID");

                if (!srcInterIdStr.IsNullOrEmptyOrWhiteSpace())

                {

                    if (long.TryParse(srcInterIdStr, out rlInterId) && rlInterId > 0)

                    {

                        rlInterIds.Add(rlInterId);

                        continue;

                    }

                }


                string parentInterIdStr = info.GetDynamicValue<string>("FPARENTINTERID");

                if (!parentInterIdStr.IsNullOrEmptyOrWhiteSpace())

                {

                    if (long.TryParse(parentInterIdStr, out rlInterId) && rlInterId > 0)

                    {

                        rlInterIds.Add(rlInterId);

                        continue;

                    }

                }


                string demandInterStr = info.GetDynamicValue<string>("FDEMANDINTERID");

                if (!demandInterStr.IsNullOrEmptyOrWhiteSpace())

                {

                    if (long.TryParse(demandInterStr, out rlInterId) && rlInterId > 0)

                    {

                        rlInterIds.Add(rlInterId);

                        continue;

                    }

                }

            }

            if (rlInterIds.IsEmpty()) return;


           

判断单据是否存在预留关系校验器

系统标准的销售订单、预测单、计划订单、生产订单、委外订单、组织间需求单上都有是否已MRP运算标识,这个标识为true时表示该单曾经参与过...
点击下载文档文档为doc格式

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

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