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;
MRP运算时校验运算组织和物料范围等信息
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



