PLM二开·创建物料支持暂存功能
【应用场景】
增加【暂存】功能,创建PLM物料进行【暂存】时不校验必填字段是否填写,点击【保存】时才校验必填字段是否填写。
【注意事项】
需要增加【暂存】生命周期阶段,操作配置仅开启【保存】,【检出】,【检入】等操作,不允许暂存物料进行其他业务操作。
业务类型授权允许【修改】。
暂存状态物料,点击保存成功后,需将物料生命周期改为【提交】,才可进行后续的业务操作。
【案例演示】
增加PLM物料暂存功能
【实现步骤】
<1>新增【暂存】生命周期阶段
<2>物料生命周期模板新增【暂存】阶段,且设为第一个阶段。
<3>业务类型操作配置,修改操作按钮,可参考如下配置
<4>业务类型授权,勾选【修改】、【查看】权限
<5>BOS IDE扩展研发物料,增加【暂存】按钮
<6>继承标准的物料基础对象插件(MaterailBaseObjectBill),编写表单插件,参考代码如下。
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Resource;
using Kingdee.BOS.Util;
using Kingdee.K3.PLM.Business.PlugIn;
using Kingdee.K3.PLM.CFG.Common.BusinessEntity.Entity;
using Kingdee.K3.PLM.CFG.Common.BusinessEntity.Manager;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
namespace Kingdee.K3.PLM.STD.Business.PlugIn.BaseObjectPlugin
{
[HotUpdate]
[Description("物料暂存功能插件")]
public class TemporarySaveBill : MaterailBaseObjectBill
{
public override void BarItemClick(BarItemClickEventArgs e)
{
if (OperationRefused(e)) return;
switch (e.BarItemKey.ToUpper())
{
case "TBTEMPORARYSAVE":
if (Convert.ToInt64(this.Model.DataObject["Id"]) == 0)
{
string code = (this.Model.DataObject["Code"] ?? "").ToString();
if (string.IsNullOrWhiteSpace(code) || code == "auto")
{
CodeRuleManager.Instance.GenerateCode(this.PLMContext, new DynamicObject[] { this.Model.DataObject });
code = (string)this.Model.DataObject["Code"];
}
if (!string.IsNullOrWhiteSpace(code))
{
if (CodeRuleModel.Instance.IsCodeExists(this.PLMContext, code, Convert.ToInt64(this.Model.DataObject["CategoryID_Id"])))
{
this.View.ShowWarnningMessage(string.Format(ResManager.LoadKDString("编码'{0}'已经存在!{1}", "120007000000168", SubSystemType.PLM), code, Convert.ToInt64(this.Model.DataObject["CategoryID_Id"])));
e.Cancel = true;
}
}
}
DomainObjectManager.Instance(PLMContext, Convert.ToInt64(this.Model.DataObject["CategoryID_Id"])).Save(PLMContext, this.Model.DataObject);
break;
}
base.BarItemClick(e);
}
public override void AfterBindData(EventArgs e)
{
var items = this.View.LayoutInfo.GetFormAppearance().Menu.BarItems.Skip(1).ToList();
foreach (var barItem in items)
{
if (barItem.Key == "tbTemporarySave")
{
this.View.GetMainBarItem("tbTemporarySave").Visible = true;
this.View.GetMainBarItem("tbTemporarySave").Enabled = true;
}
}
base.AfterBindData(e);
}
public override void AfterBarItemClick(AfterBarItemClickEventArgs e)
{
if (e.BarItemKey.ToUpper() == "TBTEMPORARYSAVE")
{
this.View.UpdateView();
}
base.AfterBarItemClick(e);
}
}
}
<7>编写接口类,实现保存成功后,物料生命周期改成【提交】状态。相关知识帖:二次开发扩展程序开发之插件模式中的相关扩展接口说明 (kingdee.com),参考代码如下:
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.K3.PLM.Common.Core.BOSBridge;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kingdee.K3.PLM.CFG.Common.Interface.Base;
using Kingdee.K3.PLM.CFG.Common.BusinessEntity.Manager;
using Kingdee.K3.PLM.Common.Core.ServiceHelper;
namespace ISV.K3.PLM.STD.Common.BusinessEntity.Material
{
[OperationAttribute(Description = "物料保存操作", CategoryId1 = (long)StandardCategoryType.Material)]
public class ISVMaterialSaveOperation : IDirectSaveOperation
{
public void AfterSave(PLMContext ctx, DynamicObject obj, CFG.Common.Interface.EventArgument.OperationEventArgs e, bool isMustValidate = true)
{
long categoryId = Convert.ToInt64(obj["CategoryID_Id"]);
if (obj["LifeCircleStage"].ToString() == "AZ")//【暂存】生命周期阶段
{
obj["LifeCircleStage"] = "AJ";//保存成功后,将暂存生命周期转为提交状态
DomainObjectManager.Instance(ctx, categoryId).Save(ctx, obj);
}
}
public void BeforeSave(PLMContext ctx, DynamicObject obj, CFG.Common.Interface.EventArgument.OperationEventArgs e, bool isMustValidate = true)
{
}
public bool Validate(PLMContext ctx, DynamicObject obj, CFG.Common.Interface.EventArgument.OperationEventArgs e)
{
return true;
}
}
}
<8>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<9>BOSIDE扩展研发物料,注册表单插件,保存元数据,开发完毕。
【功能验证】
<1>登录业务站点,更新业务类型模型后,能够根据系统物料编码规则新建了一个暂存物料,如图1;
暂存物料支持检出检入保存操作,如图2;
暂存物料保存后,可以看到物料变成【提交】状态,如图3。
【参考资料】
【汇总】星空PLM二开指南(持续更新)https://vip.kingdee.com/article/329914697153905408?productLineId=1&isKnowledge=2
【合辑】金蝶云.星空 PLM知识合辑(持续更新) https://vip.kingdee.com/article/329662872047302912?productLineId=1&isKnowledge=2
二次开发扩展程序开发之插件模式 https://vip.kingdee.com/article/83591896433330944?productLineId=1
PLM云 -- 基于BOS平台的二次开发扩展 https://vip.kingdee.com/article/10875?productLineId=1
PLM云 -- 基于配置系统的二次开发扩展(对象属性扩展)https://vip.kingdee.com/article/10887?productLineId=1
PLM云 -- 基于标准业务系统的二次开发扩展 https://vip.kingdee.com/article/10901?productLineId=1
金蝶云星空BOS二次开发指南 https://vip.kingdee.com/article/94751030918525696?productLineId=1&isKnowledge=2
金蝶云星空数据字典V7.6 https://open.kingdee.com/K3Cloud/WenKu/DocumentView.aspx?docId=102613
PLM二开·创建物料支持暂存功能
本文2024-09-23 03:03:11发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-156358.html