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>编写接口类,实现保存成功后,物料生命周期改成【提交】状态。相关知识帖:二次开发扩展程序开发之插件模式中的相关扩展接口
PLM二开·创建物料支持暂存功能
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



