MRP运算如何增加逻辑模型

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

MRP运算如何增加逻辑模型

【应用场景】

MRP运算有特殊业务场景逻辑需要二开处理。


【注意事项】

MRP是运算一般涉及数据量较大,二开逻辑单元实现须特别注意性能,尽可能在内存中批量处理。


【案例演示】

示例实现的是在MRP收尾环节自动收集物料供需数据表,因此本逻辑单元须在MRP各标准逻辑单元之后执行


【实现步骤】

<1>编写逻辑实现类,代码如下。

using Kingdee.BOS.Util;

using Kingdee.BOS.Orm;

using Kingdee.BOS.Orm.DataEntity;

using Kingdee.BOS.Orm.Metadata.DataEntity;

using Kingdee.K3.Core.MFG.Common;

using Kingdee.K3.MFG.App;

using Kingdee.K3.MFG.Contracts.PLN;

using Kingdee.K3.MFG.PLN.App.MrpModel;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;


namespace MrpLogicUnitTest_20231120

{

    /// <summary>

    /// 自定义MRP逻辑单元实现类

    /// </summary>

    /// <retremarks>

    /// 须继承标准类AbstractMrpLogicUnit,引用Kingdee.K3.MFG.PLN.App.MrpModel.dll组件,并引入Kingdee.K3.MFG.PLN.App.MrpModel命名空间即可继承该类

    /// </retremarks>

    public class MyMrpCustLogicUnit1 : AbstractMrpLogicUnit

    {

        /// <summary>

        /// 逻辑单元描述,该属性必须实现,因基类中它是abstract性质

        /// </summary>

        public override string Description

        {

            get { return "这是自定义逻辑单元类"; }

        }


        /// <summary>

        /// 逻辑单元核心逻辑实现,自定义业务逻辑在此实现

        /// </summary>

        protected override void OnExecuteLogicUnit()

        {

            base.OnExecuteLogicUnit();


            //本示例实现在MRP收尾环节自动收集物料供需数据表,本逻辑单元须在MRP各标准逻辑单元之后执行

            OperateOption option = OperateOption.Create();

            option.SetVariableValue("ComputeId", this.MrpGlobalDataContext.ComputeId);

            TaskProxyItem taskProxyItem = new TaskProxyItem();

            option.SetVariableValue("TaskId", taskProxyItem.TaskId);

            AppServiceContext.GetMFGService<IMtrlDSDataSumCalcService>().Execute(this.Context, option);


            //MRP全局变量拥有丰富的信息,二开用户可依据需求从里面提取公共属性内容进行加工。

            //如以下示例是获取本次运算产生的计划订单信息,

            string sql = string.Format(" SELECT FID FROM T_PLN_PLANORDER WHERE FCOMPUTERNO='{0}' ", this.MrpGlobalDataContext.BillNo);

            DynamicObjectType plDt= this.MrpGlobalDataContext.MrpDynamicMetaContainer.PlanOrderMetadata.BusinessInfo.GetDynamicObjectType();

            IEnumerable<DynamicObject> plOrderDatas = MFGDataManagerUtil.LoadData(this.Context, plDt, sql).OfType<DynamicObject>();

            if (!plOrderDatas.IsEmpty())

            {

                foreach (DynamicObject plOrderData in plOrderDatas)

                {

                    //此处可对计划订单数据包进行更新

                }

                //更新完成后调保存

                MFGDataManagerUtil.SaveData(this.Context, plOrderDatas, plDt);

            }

        }

    }

}


<2>在系统前端新增一个MRP逻辑模型(路径:生产制造》计划管理》MRP建模》MRP逻辑模型),注意逻辑实现类文本框填对上一步插件的命名空间和类名,结构是(命名空间.类名,组件名),如图。


<3>将上一步创建的MRP逻辑单元注册到MRP标准算法模型(编号为STD_MRP_ALG的MRP算法模型)中(路径:生产制造》计划管理》MRP建模》MRP算法模型),注意序号设为最大表示最后执行,如图。


<4>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。



【功能验证】

<1>部署自定义插件后,再进行MRP运算,会发现运算完成后,对应的日志已经打上已收集数据标识。对于MRP逻辑模型的二开,有更多兴趣可跟帖讨论。


MRP运算如何增加逻辑模型

【应用场景】MRP运算有特殊业务场景逻辑需要二开处理。【注意事项】MRP是运算一般涉及数据量较大,二开逻辑单元实现须特别注意性能,尽可能...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息