判断单据是否存在预留关系校验器

系统标准的销售订单、预测单、计划订单、生产订单、委外订单、组织间需求单上都有是否已MRP运算标识,这个标识为true时表示该单曾经参与过运算并产生了预留关系。但预留关系是动态变化的,如果要实时校验某单据是否存在预留关系,则可参照本帖实现。
通常单据反审核或删除时需要校验是否存在预留关系,基于该业务场景需求,本贴以预测单反审核为例,展示了示例校验器实现及调用。
具体步骤如下:
一、实现校验器:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kingdee.K3.Core.MFG.EnumConst;
using Kingdee.BOS.App.Data;
using Kingdee.BOS;
using Kingdee.BOS.Util;
using Kingdee.BOS.Core;
using Kingdee.BOS.Core.Validation;
using Kingdee.K3.MFG.App.ServiceValidator;
using Kingdee.K3.Core.MFG.EntityHelper;
using Kingdee.BOS.Orm.DataEntity;
namespace NY.CusSch.App.Business.PlugIn
{
/// <summary>
/// 检查是否有预留关系校验器
/// </summary>
public class Cust_IsHasRLValiator : AbstractValidator
{
/// <summary>
/// 校验实现
/// </summary>
/// <param name="dataEntities"></param>
/// <param name="validateContext"></param>
/// <param name="ctx"></param>
public override void Validate(ExtendedDataEntity[] dataEntities, ValidateContext validateContext, Context ctx)
{
if (dataEntities.IsEmpty()) return;
List<long> pkIds = new List<long>();
foreach (var dataEntity in dataEntities)
{
DynamicObject billData = dataEntity.DataEntity;
long pkId = billData.GetDynamicValue<long>("Id");
pkIds.Add(pkId);
}
if (pkIds.IsEmpty()) return;
//以下SQL查询预测单预留关系,若要校验别的单据,则把PLN_FORECAST改成对应的单据标识。
//若需从供应单据角度查预留关系,则相应的SQL形如:SELECT FSUPPLYINTERID FROM T_PLN_RESERVELINKENTRY WHERE FSUPPLYFORMID='PUR_PurchaseOrder'
string sql = @" SELECT FSRCINTERID, FPARENTINTERID, FDEMANDINTERID FROM T_PLN_RESERVELINK WHERE (FSRCFORMID='PLN_FORECAST' OR FPARENTFORMID='PLN_FORECAST' OR FDEMANDFORMID='PLN_FORECAST') ";
List<long> rlInterIds = new List<long>();
long rlInterId = 0;
DynamicObjectCollection infos = DBUtils.ExecuteDynamicObject(ctx, sql);
foreach (DynamicObject info in infos)
{
string srcInterIdStr = info.GetDynamicValue<string>("FSRCINTERID");
if (!srcInterIdStr.IsNullOrEmptyOrWhiteSpace())
{
if (long.TryParse(srcInterIdStr, out rlInterId) && rlInterId > 0)
{
rlInterIds.Add(rlInterId);
continue;
}
}
string parentInterIdStr = info.GetDynamicValue<string>("FPARENTINTERID");
if (!parentInterIdStr.IsNullOrEmptyOrWhiteSpace())
{
if (long.TryParse(parentInterIdStr, out rlInterId) && rlInterId > 0)
{
rlInterIds.Add(rlInterId);
continue;
}
}
string demandInterStr = info.GetDynamicValue<string>("FDEMANDINTERID");
if (!demandInterStr.IsNullOrEmptyOrWhiteSpace())
{
if (long.TryParse(demandInterStr, out rlInterId) && rlInterId > 0)
{
rlInterIds.Add(rlInterId);
continue;
}
}
}
if (rlInterIds.IsEmpty()) return;
判断单据是否存在预留关系校验器
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



