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运算如何增加逻辑模型
本文2024-09-23 03:15:10发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-157670.html