计划运算向导检查并整理选单数据解决方案
【应用场景】
在计划运算向导界面,存在一些场景,需要对所选单据的数据完整性进行检查,对于不完整的数据给出提示,或移除不参与运算。
【注意事项】
该实现方案涉及到干预标准的运算的过滤策略,容易造成参与运算范围的误解,比如标准可以选到某个单据运算,因为本方案移除了,给后面分析运算结果增加一定难度。非最佳实践,非必要不推荐使用,仅限于特殊场景下的特殊应用。
【案例演示】
本方案演示的场景是所选单据若是自制件或委外件,但又不存在BOM时,将这类单据移除,不参与本次运算。
【实现步骤】
<1>编写表单插件,注意因为涉及更改标准逻辑,因此二开表单插件须继承标准插件,示例代码如下。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using Kingdee.BOS.Util; //引用Kingdee.BOS.dll
using Kingdee.BOS.Orm.DataEntity; //引用Kingdee.BOS.DataEntity.dll
using Kingdee.K3.MFG.BusinessCommon.BillPlugIn; //引用Kingdee.K3.MFG.BusinessCommon.dll
using Kingdee.K3.Core.MFG.EnumConst; //引用Kingdee.K3.Core.dll
using Kingdee.K3.Core.MFG.EntityHelper;
namespace MyMrpWizardPlugIn_240708
{
[Description("个性Mrp向导插件")]
public class MyMrpWizardPlugIn : Kingdee.K3.MFG.PLN.Business.PlugIn.DynamicForm.WizardForm.MrpComputeWizardPlugIn
{
public override void ButtonClick(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.ButtonClickEventArgs e)
{
//捕捉到点击了下一步或直接运算时,事先处理选单表体数据
if (e.Key.EqualsIgnoreCase("FNext") || e.Key.EqualsIgnoreCase("FBtnDireCalc"))
{
DynamicObjectCollection selEntrys = this.View.Model.DataObject.GetDynamicValue<DynamicObjectCollection>("SelBillData");
for (int i = selEntrys.Count - 1; i >= 0; i--)
{
long bomId = selEntrys[i].GetDynamicValue<long>("BomId_Id");
if (bomId > 0) continue;
DynamicObject mtrlObj = selEntrys[i].GetDynamicValue<DynamicObject>("MaterialId");
if (mtrlObj.IsNullOrEmpty()) continue;
//注意以下几行代码是读取计划运算向导需求范围选择表体的物料引用属性
DynamicObject mtrlBaseObj = (mtrlObj["MaterialBase"] as DynamicObjectCollection).FirstOrDefault();
if (mtrlBaseObj.IsNullOrEmpty()) continue;
//要事先在BOS中添加物料属性(自制委外等)引用属性
string erpClsId = mtrlBaseObj.GetDynamicValue<string>("ErpClsID");
if (erpClsId == "2" || erpClsId == "3")
{ //自制或委外物料,检查是否有BOM
long materialMasterId = mtrlObj.GetDynamicValue<long>("msterID");
long supplyOrgId = selEntrys[i].GetDynamicValue<long>("SupplyOrgId_Id");
long auxPropId = selEntrys[i].GetDynamicValue<long>("AuxPropID_Id");
List<long> bomIds = Kingdee.K3.MFG.ServiceHelper.ENG.BOMServiceHelper.GetApprovedBomIdByOrgId(this.Context, materialMasterId, supplyOrgId, auxPropId);
//无有效BOM则移除该行
if (!bomIds.Any(w => w > 0))
{
this.View.Model.DeleteEntryRow("FEntity", i);
}
}
}
}
//上面处理完个性逻辑后,再跑标准逻辑
base.ButtonClick(e);
}
}
}
<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<3>BOSIDE扩展生产制造》计划管理》动态表单》向导式动态表单》计划运算向导,注册表单插件,注意因为二开的表单插件已经继承标准表单插件,所以须取消标准插件并启用二开插件,避免逻辑处理重复。然后保存元数据,开发完毕。
【功能验证】
<1>登录业务站点,在计划运算向导,选择计划运算向导,点下一步或直接运算时,本插件将会把自制件或委外件且没BOM的数据移除不参与运算。
计划运算向导检查并整理选单数据解决方案
本文2024-09-23 03:13:16发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-157467.html