PLM二开·创建物料支持暂存功能

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

PLM二开·创建物料支持暂存功能

【应用场景】

增加【暂存】功能,创建PLM物料进行【暂存】时不校验必填字段是否填写,点击【保存】时才校验必填字段是否填写。


【注意事项】

  1. 需要增加【暂存】生命周期阶段,操作配置仅开启【保存】,【检出】,【检入】等操作,不允许暂存物料进行其他业务操作。

  2. 业务类型授权允许【修改】。

  3. 暂存状态物料,点击保存成功后,需将物料生命周期改为【提交】,才可进行后续的业务操作。


【案例演示】

增加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二开·创建物料支持暂存功能

【应用场景】增加【暂存】功能,创建PLM物料进行【暂存】时不校验必填字段是否填写,点击【保存】时才校验必填字段是否填写。【注意事项】...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息