PLM.二开案例.对象平台二开方案(物料平台/文档平台)

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

PLM.二开案例.对象平台二开方案(物料平台/文档平台)

【应用场景】

PLM的物料、文档等平台框架添加自定义页签,并展示自定义内容。


【实现说明】

目前PLM物料、文档等对象打开时,在对象基础信息基础外套用了一个PLM平台框架,里面包含了其他相关信息的页签(相关对象、相关过程等);

在PLM平台框架下,通过表单参数传递了相关的业务信息,如需二开需要通过表单参数获取必要的对象信息,以便开发;

本案例主要说明相关参数的内容以及使用;


元数据标识

物料平台 PLM_CFG_MATERIALPLATFORM

文档平台 PLM_CFG_DOCPLATFORM


【案例演示】

物料平台添加一个页签,用于展示物料对应的替代方案信息。


【实现步骤】

本文主要提供PLM平台框架的二次开发方案说明以及代码示例,关于BOS扩展等其他操作请参考文末资料;

方案一:自定义解析表单参数

主表单参数说明:

参数标识类型(C#)说明
plm_param_Platform_TempObjectIdlong

页签组id。如果对象没有BOM(获文档组),id为对象本身,否则为BOM的id;如果是BOM Id需要再自行获取父项Id

plm_param_IsHistorybool是否为历史;在查看历史信息时为true
plm_param_HistoryVersionInfoKingdee.BOS.Orm.DataEntity.DynamicObject

历史版本履历信息;如果是查看历史,此处会有相关的历史版本信

息(版本介绍参考https://vip.kingdee.com/article/470236028695887104

plm_param_IsFlowbool是否流程操作;用于表明是否从PLM审核流程中查看对象
plm_param_IsChangeObjectbool是否为新版对象;用于表明是否为从变更单中查看的新版对象

参考组件:

代码示例:

using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.List;
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.Manager;
using System;
using System.ComponentModel;

namespace ISV.PlatformDemo.Common.BusinessEntity
{
    [Description("物料平台开发演示"), HotUpdate]
    public class MaterialPlatformEx : AbstractPLMDynamicFormPlugIn
    {
        long objectId = 0;

        public override void PreOpenForm(PreOpenFormEventArgs e)
        {
            objectId = long.Parse(e.OpenParameter.GetCustomParameter("plm_param_Platform_TempObjectId").ToString());
            base.PreOpenForm(e);
        }

        public override void OnLoad(EventArgs e)
        {
            var currentObj = DomainObjectManager.InstanceByObjectId(PLMContext, objectId).Get(PLMContext, objectId);
            long matId;
            if (CategoryContract.Instance.IsRelationCategory(PLMContext, Convert.ToInt64(currentObj["CategoryId_Id"]))) //是否为关系类型
            {
                DynamicObject dyn = BaseObjectManager.Instance(PLMContext).GetMainRelation(PLMContext, objectId);
                matId = long.Parse(dyn["FMAINRELATION"].ToString());
            }
            else
            {
                matId = objectId;
            }
            ShowSubList(matId);
            base.OnLoad(e);
        }

        private void ShowSubList(long objId)
        {
            var listShowParameter = new ListShowParameter();
            listShowParameter.FormId = "PLM_STD_BOM_SUB";
            listShowParameter.PageId = Guid.NewGuid().ToString();
            listShowParameter.ParentPageId = this.View.PageId;
            listShowParameter.OpenStyle.ShowType = ShowType.InContainer;
            listShowParameter.OpenStyle.TagetKey = "FPanel_SubList"; //自定义的面板标识
            listShowParameter.HideListMenu = true;
            listShowParameter.IsShowQuickFilter = false;
            listShowParameter.MultiSelect = false;
            listShowParameter.CustomParams.Add("IsSelectPLM", "1"); //PLM替代方案列表需要此参数
            listShowParameter.IsShowUsed = false;
            listShowParameter.IsShowApproved = false;
            // 给列表设置固定过滤条件
            listShowParameter.ListFilterParameter.Filter = string.Format("FMATERIALID='{0}'", objId);

            this.View.ShowForm(listShowParameter);
        }
    }
}


方案二:继承PLM抽象插件AbstractPlatformBill

针对此类平台框架,PLM有抽象了一个平台表单插件,里面预处理了常用的业务数据,可以直接调用相关的属性。

参考组件:

参考代码:

using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.Util;
using Kingdee.K3.PLM.CFG.Business.PlugIn.Common;
using System;
using System.ComponentModel;

namespace ISV.PlatformDemo.Common.BusinessEntity
{
    [Description("物料平台开发演示"), HotUpdate]
    public class MaterialPlatformEx : AbstractPlatformBill
    {

        /*
         * 主要插件属性说明
         *  MatOrDocObjectId: 物料或文档Id
         *  BomId: Bom或者文档组Id
         *  IsHistory: 是否为历史信息
         *  HistoryVersionInfo:历史版本信息
         *  IsFlowOperation: 是否流程操作
         *  IsChangeObject: 是否为变更新版对象
         */

        public override void AfterBindData(EventArgs e)
        {   
            ShowSubList(MatOrDocObjectId);
            base.AfterBindData(e);
        }

        private void ShowSubList(long objId)
        {
            var listShowParameter = new ListShowParameter();
            listShowParameter.FormId = "PLM_STD_BOM_SUB";
            listShowParameter.PageId = Guid.NewGuid().ToString();
            listShowParameter.ParentPageId = this.View.PageId;
            listShowParameter.OpenStyle.ShowType = ShowType.InContainer;
            listShowParameter.OpenStyle.TagetKey = "FPanel_SubList"; //自定义的面板标识
            listShowParameter.HideListMenu = true;
            listShowParameter.IsShowQuickFilter = false;
            listShowParameter.MultiSelect = false;
            listShowParameter.CustomParams.Add("IsSelectPLM", "1"); //PLM替代方案列表需要此参数
            listShowParameter.IsShowUsed = false;
            listShowParameter.IsShowApproved = false;
            // 给列表设置固定过滤条件
            listShowParameter.ListFilterParameter.Filter = string.Format("FMATERIALID='{0}'", objId);

            this.View.ShowForm(listShowParameter);
        }

        public override void SetDifferenceForm(long id, long category, long bomid, long bomcategoryid)
        {
            //插件预置的页签处理,也可以在这里面写
            //ShowSubList(id);
        }

        public override void SetTabVisible()
        {
            //缺省
        }
    }
}



【功能验证】


【参考资料】

二开案例.表单插件.面板中嵌入窗体 (kingdee.com)

PLM星空相关数据表结构--二开 (kingdee.com)

【汇总】星空PLM二开指南(持续更新) (kingdee.com)

金蝶云星空BOS二次开发案例演示 (kingdee.com)



PLM.二开案例.对象平台二开方案(物料平台/文档平台)

【应用场景】PLM的物料、文档等平台框架添加自定义页签,并展示自定义内容。【实现说明】目前PLM物料、文档等对象打开时,在对象基础信息基...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息