MRP如何二开数据模型策略实现类

【应用场景】
MRP数据模型方便的配实现字段映射携带,及增加一些过滤条件。但对于更复杂的应用场景中,可能需要获取MRP运行时数据再对对应的供需数据进行干预,则适合参照本贴实现。
【注意事项】
对于能配置实现的,尽可能在MRP数据模型中配置实现,或变通设置实现,重载MRP数据模型策略实现类是最后选择。
【案例演示】
本示例是根据销售订单,如果运算方案编码是MRPSCH01,则销售组织编码需要是10开头的数据才获取。
【实现步骤】
<1>编写数据策略实现类,代码如下。
using Kingdee.BOS.Util;
using Kingdee.BOS.Core.Metadata.QueryElement;
using Kingdee.BOS.Core.SqlBuilder;
using Kingdee.BOS.Orm.DataEntity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CustMrpModel_23231206
{
public class Cust_MyMrpDataPolicy : Kingdee.K3.MFG.PLN.App.MrpModel.PolicyImpl.Demand.SODataPolicy
{
/// <summary>
/// 策略执行前事件
/// </summary>
/// <returns></returns>
protected override bool BeforeExecuteDataPolicy()
{
//本策略返回一个值,决定本数据模型要不要在本次运算中取数。
//注意返回值为真则取消,假为不取消,默认是不取消。
bool isCancel = base.BeforeExecuteDataPolicy();
//这里可对isCancel根据特定业务规则进行修改
return isCancel;
}
/// <summary>
/// 准备查询对象,该事件核心功能就是干预查询对象的过滤条件
/// </summary>
/// <param name="queryObj"></param>
/// <param name="queryInfo"></param>
protected override void OnPrepareQueryObject(QueryObject queryObj, QueryInfo queryInfo)
{
base.OnPrepareQueryObject(queryObj, queryInfo);
//注意在这里写的自定义过滤条件,一般能在对应的MRP数据模型的过滤条件中配置。
//写在这里须注意增加表关联,然后再增加条件,如增加物料可销售条件如下:
string joinSql = string.Format(" inner join T_BD_MATERIALBASE tmbs11 on tmbs11.fmaterialid={0}.fmaterialid ",
this.MrpGlobalDataContext.T_MRP_MATERIALDATA);
string whereSql = string.Format(" and tmbs11.FISSALE='1' ");
queryObj.SQLFrom += "\r\n" + joinSql;
queryObj.SQLWhere += "\r\n" + whereSql;
}
/// <summary>
/// 处理内存数据。
/// 若有些场景是需要根据计划方案来筛选数据,而无无法通过拼接SQL过滤条件解决时,适合重载该方法
/// </summary>
/// <param name="processObjects"></param>
protected override void BeforeProcessDataEntities(IEnumerable<DynamicObject> processObjects)
MRP如何二开数据模型策略实现类
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



