MRP运算时校验运算组织和物料范围等信息

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

MRP运算时校验运算组织和物料范围等信息

【应用场景】

对于分组织,或分物料运算的应用场景,系统标准的校验函数是否正在计划运算可能不甚满足,本贴力求以最简便的二开方式达到该需求目标。



【注意事项】

本方案基于补丁PT-146930(发布时间:2022/11/10)实现,因此要利用本方案前提是将星空环境升级到该版本或更新。



【案例演示】

1、编写二开校验器,以下是出厂示例的预测单反审核插件调用的校验器:


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Kingdee.BOS;

using Kingdee.BOS.Util;

using Kingdee.BOS.Core;

using Kingdee.BOS.Orm.DataEntity;

using Kingdee.BOS.Core.Validation;

using Kingdee.K3.Core.MFG.EntityHelper;

using Kingdee.K3.Core.MFG.PLN.ParamOption;

using Kingdee.K3.MFG.App;

using Kingdee.K3.MFG.Contracts.PLN;

using Kingdee.K3.Core.MFG;


namespace Kingdee.K3.MFG.PLN.App.ServicePlugIn.PlanForecast.Validator

{

    /// <summary>

    /// 是否正在MRP运算校验,调用本校验器的单据操作插件须加载组织,单据编号和单据类型字段

    /// </summary>

    public class IsMrpCalingValidator : AbstractValidator

    {

        public override void Validate(ExtendedDataEntity[] dataEntities, ValidateContext validateContext, Context ctx)

        {

            if (dataEntities.IsEmpty()) return;


            //AppServiceContext在引用组件Kingdee.K3.MFG.App.dll后可用

            //如发现下面一句获取的正在计划运算信息有误,则应清除运算冲突,路径:计划管理》运算日志查询》冲突冲突

            MrpCalculatingInfo mrpCalculatingInfo = AppServiceContext.GetService<IMrpLogExtService>().GetMrpCalculatingInfo(ctx);

            foreach (ExtendedDataEntity DataItem in dataEntities)

            {

                DynamicObject billData = DataItem.DataEntity;

                long orgId = billData.GetDynamicValue<long>("ForeOrgId_Id");

                if (mrpCalculatingInfo.DemandOrgIds.Contains(orgId))

                { //如果只校验组织,则这里已经可以判断预测单不能通过本校验器了

                    string billTypeId = billData.GetDynamicValue<string>("BillTypeID_Id");

                    HashSet<string> billTypeIds;

                    if (mrpCalculatingInfo.DemandFormIdBillTypeMaps.TryGetValue(MFGFormIdConst.SubSys_PLN.ForecastOrder, out billTypeIds)

                        && billTypeIds.Contains(billTypeId))

                    {//校验本单的单据类型是参与运算的,则不能通过本校验器 

                        string billNo = billData.GetDynamicValue<string>("BillNo");

                        string errMsg = string.Format("MRP is calculating!", billNo);

                        validateContext.AddError(billData,

                            new ValidationErrorInfo("",

                                billData.GetDynamicValue<string>("Id"),

                                DataItem.DataEntityIndex,

                                DataItem.RowIndex,

                                "MrpCalingError",

                                errMsg,

                                "MRPCalculating"));

                    }

                }

            }

        }

    }

}


2、针对以上校验器代码示例,有必要详细说明的是,数据类MrpCalculatingInfo所包含的信息较丰富,上面示例有些并未用到,详见下图:





【实现步骤】

1、在想要使用该校验器的操作操作上调用该校验器:


2、BOSIDE扩展对应单据元数据,注册对应的操作插件,例如:




【功能验证】

1、登录业务站点,对预测单进行反审核,若预测组织正在计划运算,则会被校验不通过(具体提示信息可在二开的校验器上完善),下图只是将上面的示例校验器达到的效果截图:



MRP运算时校验运算组织和物料范围等信息

【应用场景】对于分组织,或分物料运算的应用场景,系统标准的校验函数是否正在计划运算可能不甚满足,本贴力求以最简便的二开方式达到该需...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息