PLM.执行操作完成后业务处理的二开.EBOM检入成功后业务处理案例

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

PLM.执行操作完成后业务处理的二开.EBOM检入成功后业务处理案例

【应用场景】

在EBOM检入完成之后执行对应插件,处理对应业务。


【案例演示】

加入自定义业务处理,成功执行对应的处理逻辑。


【实现说明】

由于"操作"执行完成后触发AfterDoOperation事件,重写AfterDoOperation事件,自定义对应业务处理逻辑即可。


【实现步骤】

如果你刚接触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>编写表单插件和服务插件,添加引用。 

<1>新增自定义类,继承PLM标准功能插件AbstractPLMBillPlugIn。 重写AfterDoOperation事件,加入自定义业务处理逻辑,代码案例如下。

using Kingdee.BOS.Core.Const;

using Kingdee.BOS.Core.DynamicForm;

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.BusinessEntity.View;

using Kingdee.K3.PLM.Common.Core;

using Kingdee.K3.PLM.Common.Core.Common;

using Kingdee.K3.PLM.Common.Core.Operation;

using Kingdee.K3.PLM.Common.Core.ServiceHelper;

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Linq;

using System.Text;


namespace Kingdee.K3.PLM.STD.Business.PlugIn.BaseObjectPlugin

{

    [Description("操作完成后的相关业务处理案例")]

    public class AfterDoOperationDemo : AbstractPLMBillPlugIn

    {

        public override void AfterDoOperation(AfterDoOperationEventArgs e)

        {

            //判断对应操作是否执行成功

            if (e.Operation.Operation.EqualsIgnoreCase("OpCheckIn") && e.OperationResult.IsSuccess)

            {

                //获取操作成功的对象集,实现相应的业务处理

                List<DynamicObject> dynamicObjects = (List<DynamicObject>)e.OperationResult.SuccessDataEnity;

                foreach (var ebomdyn in dynamicObjects)

                {

                    //获取BOM父物料Id

                    var mainMatId = Convert.ToInt64(ebomdyn["MainRelation_Id"]);

                    //通过父物料Id获取对应的BOM对象集

                    var dynCollection = BaseObjectModel.Instance.GetBomIdByMainRelation(this.PLMContext, mainMatId);

                    foreach (var dyn in dynCollection)

                    {

                        long bomId = Convert.ToInt64(dyn["FID"]);

                        //获取对应BOM的模型

                        DynamicObject pbomdyn = DomainObjectManager.Instance(this.PLMContext, (long)StandardCategoryType.PBOM).Get(this.PLMContext, bomId);

                        //判断BOM是否存在,是否是PBOM,且没有被检出

                        if (pbomdyn != null && CategoryContract.Instance.IsPBOMCategory(Convert.ToInt64(pbomdyn["CategoryID_Id"])) && !(bool)pbomdyn["ischeckout"])

                        {

                            //获取一个相当于打开单据界面

                            using (CommonViewProxy proxy = new CommonViewProxy(this.PLMContext, CategoryManager.Instance.GetFormIdByCategory(this.PLMContext, (long)StandardCategoryType.PBOM), false))

                            {

                                //获取对应对象单据界面

                                var view = proxy.GetEditView(bomId);

                                //调用对应的操作,实现需要的业务

                                view.InvokeFormOperation("PLMOP_1054_AJ");

                                view.InvokeFormOperation("OpCheckOut");

                                view.Model.DeleteEntryData(proxy.BusinessInfo.Entrys[1].Key);

                                DynamicObjectCollection slaves = ebomdyn["SlaveRelationEntry"].GetAsType<DynamicObjectCollection>();

                                foreach (var slave in slaves)

                                {

                                    view.Model.CreateNewEntryRow(proxy.BusinessInfo.Entrys[1].Key);

                                    var row = view.Model.GetEntryCurrentRowIndex(proxy.BusinessInfo.Entrys[1].Key);

                                    view.Model.SetValue("FSlaveRelation_Id", slave["SlaveRelation_Id"], row);

                                    view.Model.SetValue("FSlaveRelation", slave["SlaveRelation"], row);

                                }

                                view.InvokeFormOperation("OpCheckIn");

                            }

                        }


                    }

                }

            }

        }

    }

}



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

<4>打开BOSIDE扩展EBOM业务类型单据,注册表单插件,保存元数据,开发完毕。


【功能验证】

<1>登录业务站点,打开EBOM界面,点击检入,即可通过VS调试或者日志文件观察到最新的服务插件执行顺序,验证功能是否完成。


PLM.执行操作完成后业务处理的二开.EBOM检入成功后业务处理案例

【应用场景】在EBOM检入完成之后执行对应插件,处理对应业务。【案例演示】加入自定义业务处理,成功执行对应的处理逻辑。【实现说明】由于...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息