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检入成功后业务处理案例
本文2024-09-23 03:04:28发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-156532.html