PLM.影响评估二开案例.自定义显示ERP单据字段指南

【应用场景】
变更影响评估中,新增ERP单据的单据字段,并在返回数据时显示在变更对象列表中。
【案例演示】
变更影响评估中,生产订单显示生产组织,并在返回时显示在变更对象列表中。


【设计思路】
在影响评估时,根据评估信息动态获取所需的单据信息并赋值在影响评估单据体上。并将此部分信息整合后,通过表单传值传回ECN单据中。
影响评估返回信息时,根据评估单据传递的信息,再动态赋值至变更对象单据体中,以此达到信息的一致性,也可以避免重复获值。
【实现步骤】
如果你刚接触PLM二开,你可能需要参考:
如何编写二开插件配置等请参考:二次开发扩展程序开发之插件模式https://vip.kingdee.com/article/83591896433330944?productLineId=1
其他星空PLM开发指南也可以参考 【汇总】星空PLM二开指南(持续更新)https://vip.kingdee.com/article/329914697153905408?productLineId=1&isKnowledge=2
更多详细的金蝶云星空BOS二次开发指南:https://vip.kingdee.com/article/94751030918525696?productLineId=1&isKnowledge=2
<1>变更单添加自定义字段
在BOSIDE中,找到“变更单”单据并扩展,在变更对象单据体中加入自定义的字段,并锁定。

<2>非PLM影响评估添加自定义字段
设计变更模块中,找到动态表单“非PLM影响评估分析”并扩展,加入自定义字段并锁定
* 注意评估有子项父项的区别(结构变更时会评估子项)
* 注意表头名称中会通过&分层

<3>编写表单插件,添加引用

<4>新增影响评估插件
继承标准插件AbstractDynamicFormPlugIn。重写BeforeBindData事件,在标准插件初始化数据时,根据评估的单据类型赋值需要的信息;并将需要的信息包装后返回ECN单据。
示例代码:
using Kingdee.BOS;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using Kingdee.K3.PLM.STD.Common.BusinessEntity.EngineeringChange.Relevancy;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
namespace ISV.PLM.ECNDemo
{
[HotUpdate]
[Description("影响评估二开示例")]
public class ERPRefevancyFormExtend : AbstractDynamicFormPlugIn
{
/// <summary>
/// 评估类型,1:制造 , 2:供应链
/// </summary>
private int RefevancyType = 0;
public override void OnLoad(EventArgs e)
{
base.OnLoad(e);
//标准插件中的评估模型参数,用于判断评估类型
var models = this.View.OpenParameter.GetCustomParameter("plm_param_relevancyModel") as List<ERPRelevancyModel>;
if (models != null && models.Count > 0)
{
RefevancyType = models[0].RelevancyType;
}
}
public override void BeforeBindData(EventArgs e)
{
//评估单据赋值需在BeforeBindData事件中实现,且插件顺序必须在标准插件之后
if (this.View.ParentFormView != null && this.View.ParentFormView.ParentFormView != null)
{
var ecnView = this.View.ParentFormView.ParentFormView; //通过获取ECN表单的视图,向其传递查询信息,可以避免重复获值;
var objectEntityF = this.Model.DataObject["EntityF"] as DynamicObjectCollection; //此为父项单据体,如果是结构变更,请考虑子项影响的场景;
Dictionary<string, string> prd_mappings = new Dictionary<string, string>();
foreach (var fObject in objectEntityF)
{
if (fObject["BillTypeId_Id"].ToString().ToUpper() == "PRD_MO") //评估的单据标识
{
var billNo = fObject["BILLNO"].ToString();
var preOrg = GetPreOrg(billNo);
if (!string.IsNullOrWhiteSpace(preOrg))
{
this.Model.SetValue("FPrdOrg", preOrg, objectEntityF.IndexOf(fObject));
prd_mappings[billNo] = preOrg;
}
}
}
if (prd_mappings.Count > 0)
{
if (RefevancyType == 1)
{
ecnView.Session["ERPRefevancyMFG"] = prd_mappings;
}
else
{
ecnView.Session["ERPRefevancyDSC"] = prd_mappings;
}
}
}
}
private string GetPreOrg(string billCode)
{
//此方法仅用于示例,请根据实际业务场景设计值获取逻辑。注意循环的性能影响。
//本示例只简单演示获
PLM.影响评估二开案例.自定义显示ERP单据字段指南
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



