【应用场景】
BOM变更中添加自定义字段,并显示自定义内容。
【案例演示】
BOM变更中,选择子物料后,能够显示该物料最近的一次变更单编码。
【实现步骤】
如果你刚接触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中,找到“BOM变更单”单据并扩展,在单据体中加入自定义的字段,并锁定。
* 字段标识请尽量避免与PDM关系扩展中的字段标识区分,例如使用FECN_XXX等,以避免可能存在的动态字段加载冲突
<2>编写表单插件,添加引用
<3>新增自定义类
继承标准插件AbstractPLMDynamicFormPlugIn。重写DataChanged事件,通过脚本获取物料的最新变更单编码。
示例代码:
using Kingdee.BOS;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.K3.PLM.Business.PlugIn;
using Kingdee.K3.PLM.Common.Core.Utility;
using System;
using System.Collections.Generic;
using System.ComponentModel;
namespace ISV.PLM.ECNDemo
{
[Kingdee.BOS.Util.HotUpdate]
[Description("BOM变更单自定义字段示例")]
public class BOMEChangePlugin : AbstractPLMDynamicFormPlugIn
{
private const string QueryScript =
@"SELECT TOP 1 BA.FID, BA.FCODE
FROM T_PLM_STD_EC_ITEM IT
INNER JOIN T_PLM_PDM_BASE BA ON IT.FID = BA.FID
AND BA.FCATEGORYID >= 1070200000000000000 AND BA.FCATEGORYID< 1070300000000000000 -- 过滤变更单
AND BA.FLIFECIRCLESTAGE = 'AI' -- 完成状态
WHERE FBASEOBJECT = @Id -- 变更对象内码
order by FID DESC
";
public override void DataChanged(DataChangedEventArgs e)
{
if (e.Field.Key.ToUpper() == "FSLAVEMAT")
{
var matId = Convert.ToInt64(e.NewValue);
var ecnCode = QueryLastestEcn(matId);
this.View.Model.SetValue("FMatEcnCode", ecnCode, e.Row);
}
base.DataChanged(e);
}
private string QueryLastestEcn(long id)
{
var ecnCode = string.Empty;
var lst = new List<SqlParam> { new SqlParam("@Id", KDDbType.Int64, id) };
using (var reader = PLMDBUtils.Instance.ExecuteReader(PLMContext, QueryScript, lst))
{
while (reader.Read())
{
ecnCode = reader["FCODE"].ToString();
}
}
return ecnCode;
}
}
}
<4>拷贝组件
拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS
<5>注册插件
打开BOSIDE,找到单据【BOM变更单】。 注册自定义插件
<6>保存后,清理一下站点元数据缓存