PLM.二开方案.关联业务对象支持变更

【应用场景】
使用PLM平台扩展方案关联了另一业务对象后(在业务对象中关联另一类业务对象的方法 (kingdee.com)),同时支持变更修改。
【注意事项】
该方案可能存在性能损耗,如果存在大数据量变更的场景,请考虑使用业务对象扩展单据体实现,而非使用对象平台扩展的方式。
本示例不再演示业务对象关联与接口插件规范,具体请参考原帖。
在业务对象中关联另一类业务对象的方法 (kingdee.com)
【案例演示】
物料平台扩展相关客户单据体。

发起变更进行修改。

变更生效结果。

【原理介绍】
使用对象平台关联的方式实际上使用单据体主键关联PDM对象。由于设计变更会生成一个新版对象,新版对象没有关联至原有的扩展单据。
所以此二开的基本原理就是在产生新版对象的时候复制一套单据体信息给新版对象,并在生效时覆盖至原版对象。
【实现步骤】
<1>新增一个组件,继承PLM标准状态转换接口IControlStageSwitcher(注意组件命名规范,详情参考二次开发扩展程序开发之插件模式 (kingdee.com); ,指定业务类型为变更,生命周期为审核。 即审核生成新版对象后,执行复制单据体信息逻辑。
你可能需要引用以下组件

编写以下代码
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using Kingdee.K3.PLM.CFG.Common.Interface.CategoryStatus;
using Kingdee.K3.PLM.CFG.Common.Interface.EventArgument;
using Kingdee.K3.PLM.CFG.Common.Interface.Switchers;
using Kingdee.K3.PLM.Common.Core.BOSBridge;
using Kingdee.K3.PLM.Common.Core.ServiceHelper;
using Kingdee.K3.PLM.Common.Core.Utility;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Kingdee.K3.PLM.Industry.ECNDemo.Common.BusinessEntity
{
/// <summary>
/// ECN审核状态转换控制(标签说明:CategoryId1 受控的业务类型ID,Stage 对应控制的生命周期阶段)
/// </summary>
[StageSwitcherAttribute(CategoryId1 = (long)StandardCategoryType.ECN, Stage = ControlStage.Audit)]
public class ECNAuditImplement : IControlStageSwitcher
{
//批量获取原对象客户信息
//由于接口调用时数据库还未提交,所以得使用变更对象单据的版本号关联
private const string GetCustoms = @"SELECT EC.FREFVERSIONID AS FREFVERSIONID,C.* FROM T_PLM_STD_EC_ITEM EC
INNER JOIN T_PLM_CFG_VERLIST V ON EC.FREFVERSIONID = V.FVERSIONID
INNER JOIN PLM_T_CUST_RELATEDCUSTOM C ON V.FPDMBASE = C.FID
WHERE EC.FID = {0}
";
//插入新客户信息脚本
private const string InsertCustoms = @"INSERT INTO PLM_T_CUST_RELATEDCUSTOM(FID,FENTRYID,FCUSTOM) VALUES({0},{1},{2})";
public void AfterEnterStatus(PLMContext ctx, DynamicObject obj, ControlStageChangeEventArgs e)
{
if (obj.Contains("ChangeObjectEntity"))
{
var changeObject = (DynamicObjectCollection)obj["ChangeObjectEntity"];
var relatedCustom = PLMDBUtils.Instance.ExecuteDynamicObject(ctx, string.Format(GetCustoms, obj["Id"]));
if (relatedCustom.Count() <= 0) return;
var sqlArrary = new List<SqlObject>();
var entryIds = PLMDBUtils.Instance.GetSequenceInt64(ctx, "PLM_T_CUST_RELATEDCUSTOM", relatedCustom.Count()).ToArray();
for (int i = 0; i < relatedCustom.Count(); i++)
{
//此时单据体中FBASEOBJECT字段已经记录了新版对象ID,通过脚本获取的源版本ID(不会变)进行对应;
var item = changeObject.FirstOrDefault(x => Convert.ToInt64(x["REFVERSIONID"]) == Convert.ToInt64(relatedCustom[i]["FREFVERSIONID"]));
if (item != null)
{
sqlArrary.Add(new SqlObject(string.Format(InsertCustoms, item["BASEOBJECT"], entryIds[i], relatedCPLM.二开方案.关联业务对象支持变更
【应用场景】使用PLM平台扩展方案关联了另一业务对象后(在业务对象中关联另一类业务对象的方法 (kingdee.com)),同时支持变更修改。【注...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



