如何实现在物料反查的结果加入BOM关系属性字段

【应用场景】
根据业务需要,物料反查需要显示对应BOM关系属性字段,如BOM用量。
【注意事项】
1.扩展【物料BOM关系反查】单据,单据体上新增自定义字段来表示关系属性,演示内容以FBomNumber(BOM用量)为例,其他关系属性逻辑类似。
2.关系属性表:T_PLM_CFG_RELATION。
【案例演示】
物料反查显示出对应BOM的用量。
【实现步骤】
<1>编写表单插件和服务插件,代码如下。
using Kingdee.BOS;
using Kingdee.BOS.App.Core.Utils;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using Kingdee.K3.PLM.Business.PlugIn;
using Kingdee.K3.PLM.CFG.Common.BusinessEntity.Base;
using Kingdee.K3.PLM.CFG.Common.BusinessEntity.Entity;
using Kingdee.K3.PLM.CFG.Common.BusinessEntity.Manager;
using Kingdee.K3.PLM.Common.Core.BOSBridge;
using Kingdee.K3.PLM.Common.Core.Common;
using Kingdee.K3.PLM.Common.Core.ServiceHelper;
using Kingdee.K3.PLM.Common.Core.Utility;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
namespace Kingdee.K3.PLM.STD.Business.PlugIn
{
[HotUpdate]
[Description("物料反查BOM用量插件")]
public class MatReverseNumberForm : AbstractPLMDynamicFormPlugIn
{
/// <summary>
/// 当前物料id
/// </summary>
long _currentId = 0;
/// <summary>
/// 当前物料业务类型
/// </summary>
long _categoryId = 0;
/// <summary>
/// BOM业务类型
/// </summary>
List<long> bomcategory = new List<long>();
/// <summary>
/// 是否初始化
/// </summary>
bool _init = false;
public override void PreOpenForm(PreOpenFormEventArgs e)
{
_currentId = Convert.ToInt64(e.OpenParameter.GetCustomParameter("plm_param_SourceObjectId"));
base.PreOpenForm(e);
}
public override void OnLoad(EventArgs e)
{
var d = DomainObjectManager.Instance(PLMContext, (long)StandardCategoryType.Material).Get(PLMContext, _currentId);
if (d != null)
{
_categoryId = Convert.ToInt64(d["CategoryId_Id"]);
}
if (CategoryContract.Instance.IsMaterialCategory(_categoryId))
{
bomcategory.Add((long)StandardCategoryType.BOM);//支持反查bom所有业务类型
bomcategory.Add((long)StandardCategoryType.DBOM);
}
else if (CategoryContract.Instance.IsVirtualMaterialCategory(_categoryId))
{
bomcategory.Add((long)StandardCategoryType.DBOM);
}
_init = true;
}
public override void CustomEvents(CustomEventsArgs e)
{
if (_init)
{
Dictionary<string, decimal> dicRelationBomNumbers = GetRelationBomNumberBySlaveId(PLMContext, bomcategory, _currentId);
if (dicRelationBomNumbers.Count > 0)
{
var dicKeys = dicRelationBomNumbers.Keys;
var relationDatas = this.View.Model.DataObject["RelationsOperationLogs"].GetAsType<DynamicObjectCollection>();
int rowIndex = 0;
foreach (var relation in relationDatas)
{
var bomCode = relation.GetDynamicObjectItemValue<string>("RelationObjectCode");
if (!string.IsNullOrWhiteSpace(bomCode) && dicKeys.Contains(bomCode))
{
relation["BomNumber"] = dicRelationBomNumbers[bomCode];//BOM用量
}
this.View.UpdateView("FBomNumber", rowIndex);
rowIndex++;
}
}
}
_init = false;
base.CustomEvents(e);
}
/// <summary>
/// 根据物料或者对应的BOM编码、用量
/// </summary>
/// <param name="ctx"></param>
/// <param name="categoryId">BOM业务类型</param>
/// <param name="slaveId">物料id</param>
/// <returns></returns>
public Dictionary<string, decimal> GetRelationBomNumberBySlaveId(PLMContext ctx, List<long> categoryId, long slaveId)
{
string filter = stri如何实现在物料反查的结果加入BOM关系属性字段
【应用场景】根据业务需要,物料反查需要显示对应BOM关系属性字段,如BOM用量。【注意事项】1.扩展【物料BOM关系反查】单据,单据体上新增...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



