封面

要点:

通过操作库实现统一的操作管理;有于业务类型对象的统一控制。


场景:

不同的业务类型,有不同的操作(功能),如化工类型可以进行化学特性分析;电子类型可进行电特性分析等。


步骤:

1:编写并上传操作插件

2:在操作库中进行操作定义

3:在业务类型绑定操作

4:使用操作


1、编写并上传操作插件

安装Visual Studio:您可以通过搜索获取相关的的官方安装包进行安装。

a)打开Visual Studio,新建扩展组件项目

请遵循相关规范:

名称,如: EP.EX.PLM.Operations  

EP:表示二开组织的唯一标识;

EX:表示扩展组件;

PLM:表示用于PLM系统;

Operations:可以根据相关的业务要求进行定义

image.png

b)添加相关的引用,

如:

Kingdee.K3.PLM.Common.Core.dll 通用的核心组件

Kingdee.K3.PLM.App.Core.dll 通用的应用服务核级件

image.png


c)引用相关组件,实现相关接口; 在不同的事件中定义处理逻辑

通常应该引用以下组件:

Kingdee.BOS.Core.dll

Kingdee.BOS.DataEntity.dll

Kingdee.K3.PLM.App.Core.dll

Kingdee.K3.PLM.Business.PlugIn.dll

Kingdee.K3.PLM.CFG.Common.BusinessEntity.dll

Kingdee.K3.PLM.Common.Core.dll


image.png

d)点击生成,编译构件生成组件,如:EP.EX.PLM.Operations.dll

image.png

e)将组件上传(复制)到安装的站点的bin目录中:如:C:\Program Files(x86)\Kingdee\K3Cloud\WebSite\bin


image.png

(注意:此过程可能导致运行环境重启,请在非使用时段操作)

    通过 右键 另存为  方式  来下载该文件 [ 右键另存为code.zip 试试] 

或者( EP.EX.PLM.Operations.zip.jpg),除掉.jpg后解压

内含示例代码(若要修改编译请删除引用的相关产品组件,重新引用您安装位置中的组件);

如果,还不行,就参考最后面贴入的代码段。


2:在操作库中进行操作定义

a)打开操作库,可以新增操作

image.png

b)新建操作,并引用上面定义好的组件

image.png

c) 将组件绑定到业务类型 :主控台菜单->PLM->系统建模->业务类型配置,选择相应的业务类型;如图示方法绑定操作,并在业务类型操作配置界面上点击保存。

image.png


4:使用操作:这样就可以在物料库中或对应类型对象上使用该操作了。


a)授权

image.png    注:目前支持,各阶段可分开授权


b)列表中使用

image.png


c)使用该操作:在对应业务类型对象上方就会显示这个操作

image.png


d)流程中绑定该操作

image.png


这样就可以在流程中使用该操作了。

image.png


----END--------



//----CODE BEGIN---



using System;

using System.ComponentModel;

using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;

using Kingdee.BOS.Orm.DataEntity;

using Kingdee.K3.PLM.App.Core;

using Kingdee.K3.PLM.Business.PlugIn;

using Kingdee.K3.PLM.CFG.Common.BusinessEntity.Manager;

using Kingdee.K3.PLM.Common.Core.BOSBridge;

using Kingdee.K3.PLM.Common.Core.Utility;


namespace EP.EX.PLM.Operations

{

    [Description("物料检查操作服务组件")]

    public class CheckMaterialOperation : AbstractPLMOperationServicePlugIn

    {

        /// <summary>

        /// 如果有界面交互的操作,在此定义逻辑;

        /// 该业务处理不能用流程,如果用于流程,请在BeforeExecuteOperationTransaction事件中进行定义

        /// </summary>

        /// <param name="plugin">参数</param>

        /// <param name="operationTranaction">参数</param>

        /// <param name="e">参数</param>

        public override void DoViewOperation(IPLMBusinessFormPlugIn plugin, BeforeExecuteOperationTransaction operationTranaction,ViewInvokeEventArgs e)

        {

            //var objects=operationTranaction.SelectedRows; //可获取操作的对象

            var plmView = plugin.PLMView;

            if (operationTranaction.Cancel==true) 

            {

                plmView.ShowNotificationMessage(result); //将通知消息提示到界面上

            }

            else

            {

                plmView.ShowNotificationMessage("检查没有问题!"); //将通知消息提示到界面上

            }

        }


        /// <summary>

        /// 如果没有用户界面交互的,在此定义逻辑 (如果操作绑定到流程上,不能进行界面交互)

        /// </summary>

        /// <param name="operationTranaction">参数</param>

        public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction operationTranaction)

        {            

            var plmContext = this.PLMContext; //可以直接获取上下文对象

            result = string.Empty; //重置通知消息

            base.BeforeExecuteOperationTransaction(operationTranaction);    

            

            foreach(var row in operationTranaction.SelectedRows) //操作支持多个对象

            {

                var obj=row.DataEntity;

                if(CheckMaterial(plmContext,obj) ==false)

                {

                    operationTranaction.Cancel = true;

                    operationTranaction.CancelMessage = result;

                    return;

                }

            }

        }

        /// <summary>

        /// 用于记录结果内容

        /// </summary>

        private string result = string.Empty;

        /// <summary>

        /// 检查业务的逻辑

        /// </summary>

        /// <param name="material">对象</param>

        /// <returns>是否OK</returns>

        protected bool CheckMaterial(PLMContext context,DynamicObject material)

        {

            // PLMDBUtils.Instance.ExecuteDynamicObject(plmContext,"KSQL:select * from ...") 可以访问PLMDBUtils.Instance组件的方法进行数据操作

            if (material.DynamicObjectType.Properties.ContainsKey("EP_EX_LimitMonth")==false) //判断有这个属性,以防异常

            {

                //如果没有该属性,可能是通过列表或流程选择,此时可能没有配置显示该属性,需要用ID重新加载出来

                long id= Convert.ToInt64(material["Id"]);


                //通过DomainObjectManager.InstanceByObjectId(context, id).Get,可以获取业务类型模型对象

                material = DomainObjectManager.InstanceByObjectId(context, id).Get(context,id) as DynamicObject;

                if (material==null || material.DynamicObjectType.Properties.ContainsKey("EP_EX_LimitMonth") == false)

                {

                    result += "该类型对象没有绑定属性:EP_EX_LimitMonth(保质期(月))\r\n"; //扩展绑定的字段

                }

                return false;

            }

            int months = Convert.ToInt32(material["EP_EX_LimitMonth"]);

            if(months<1)

            {

                result += "保质期(月)不能小于0";

                return false;

            }

            return true;

        }

    }


}


//-----CODE  END-----