PLM.二开案例.变更单生效后归档附件

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

PLM.二开案例.变更单生效后归档附件

【应用场景】

本文以归档附件为例,演示如何干预变更单生效操作


【注意事项】

变更单生效基于性能考虑,区别于标准的平台操作插件事件,无法操作事务内或者事务外。只能通过继承重写标准插件的方式,将自定义业务集成进标准业务操作中。


【案例演示】

PLM变更单,生效后归档附件


【实现步骤】

<1>编写服务插件,继承标变更单生效插件,

引用如下:

代码如下:

using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.K3.PLM.CFG.Common.BusinessEntity.Manager;
using Kingdee.K3.PLM.CFG.Common.BusinessEntity.Operation;
using Kingdee.K3.PLM.Common.Core.BOSBridge;
using Kingdee.K3.PLM.Common.Core.Common;
using Kingdee.K3.PLM.STD.App.ServicePlugIn.EngineeringChange;
using System;
using System.Collections.Generic;
using System.Linq;

namespace ISV.EcnSetEffective.Common.BusinessEntity
{
    public class EcnSetEffectiveService : EffectChangeService
    {
        protected override Func<PLMContext, ProgressTrace, List<IOperationResult>> operationFunction
        {
            get
            {
                return new Func<PLMContext, ProgressTrace, List<IOperationResult>>((ctx, progressTrace) =>
                {
                    var results = base.operationFunction(ctx, progressTrace); //先执行标准生效
                    if (!results.Exists(m => m.IsSuccess == false))
                    {
                        List<long> attObjIds = new List<long>();
                        foreach (var ecn in this.Models)
                        {
                            var attEntity = (DynamicObjectCollection)ecn["EntityAtt"]; //附件单据体
                            if (attEntity != null)
                            {
                                attObjIds.AddRange(attEntity.Select(x => Convert.ToInt64(x["AttachObject_Id"])));
                            }
                        }
                        if (attObjIds.Any())
                        {
                            var attObjs = DomainObjectManager.AutoLoad(ctx, attObjIds.ToArray());
                            if (attObjs.Any())
                            {
                                List<StageConvertItem> stageConvertItems = new List<StageConvertItem>();
                                foreach (var item in attObjs)
                                {
                                    stageConvertItems.Add(new StageConvertItem()
                                    {
                                        Object = item,
                                        TargetStage = "AC"  //目标状态。值参考生命周期列表
                                    });
                                }
                                var statusConvertResults = StageConvertMananger.Instance.SwitchStage(ctx, stageConvertItems, progressTrace.Zooming(100, 80, 20), IsFlow, null, null, false, false);
                                //TODO: 自行处理结果
                            }
                        }
                    }
                    return results;
                });
            } 
        }
    }
}


<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。

<3>BOSIDE扩展变更单,替换变更单生效操作插件,保存元数据,开发完毕。

<4>更新变更单业务类型模型后,去前台验证


【功能验证】


【参考资料】

【汇总】星空PLM二开指南(持续更新) (kingdee.com)


PLM.二开案例.变更单生效后归档附件

【应用场景】本文以归档附件为例,演示如何干预变更单生效操作【注意事项】变更单生效基于性能考虑,区别于标准的平台操作插件事件,无法操...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息