本文概述了通过操作库实现业务类型对象的统一控制过程,包括编写并上传操作插件、在操作库中进行操作定义、将操作绑定到业务类型、以及使用操作的具体步骤。详细描述了如何在Visual Studio中创建扩展组件项目、编译并上传插件,以及如何在系统中定义和绑定操作,最终实现不同类型业务对象的功能管理。示例代码展示了操作插件的基本实现逻辑。
要点:
通过操作库实现统一的操作管理;有于业务类型对象的统一控制。
场景:
不同的业务类型,有不同的操作(功能),如化工类型可以进行化学特性分析;电子类型可进行电特性分析等。
步骤:
1:编写并上传操作插件
2:在操作库中进行操作定义
3:在业务类型绑定操作
4:使用操作
1、编写并上传操作插件
安装Visual Studio:您可以通过搜索获取相关的的官方安装包进行安装。
a)打开Visual Studio,新建扩展组件项目
请遵循相关规范:
名称,如: EP.EX.PLM.Operations
EP:表示二开组织的唯一标识;
EX:表示扩展组件;
PLM:表示用于PLM系统;
Operations:可以根据相关的业务要求进行定义
b)添加相关的引用,
如:
Kingdee.K3.PLM.Common.Core.dll 通用的核心组件
Kingdee.K3.PLM.App.Core.dll 通用的应用服务核级件
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
d)点击生成,编译构件生成组件,如:EP.EX.PLM.Operations.dll
e)将组件上传(复制)到安装的站点的bin目录中:如:C:\Program Files(x86)\Kingdee\K3Cloud\WebSite\bin
(注意:此过程可能导致运行环境重启,请在非使用时段操作)
通过 右键 另存为 方式 来下载该文件 [ 右键另存为code.zip 试试]
内含示例代码(若要修改编译请删除引用的相关产品组件,重新引用您安装位置中的组件);
如果,还不行,就参考最后面贴入的代码段。
2:在操作库中进行操作定义
a)打开操作库,可以新增操作
b)新建操作,并引用上面定义好的组件
c) 将组件绑定到业务类型 :主控台菜单->PLM->系统建模->业务类型配置,选择相应的业务类型;如图示方法绑定操作,并在业务类型操作配置界面上点击保存。
4:使用操作:这样就可以在物料库中或对应类型对象上使用该操作了。
a)授权
注:目前支持,各阶段可分开授权
b)列表中使用
c)使用该操作:在对应业务类型对象上方就会显示这个操作
d)流程中绑定该操作
这样就可以在流程中使用该操作了。
----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-----
推荐阅读
PLM云 -- 基于配置系统的二次开发扩展( …
- 文章
4,149
PLM云 -- 基于配置系统的二次开发扩展( …
- 文章
2,679
PLM云 -- 基于配置系统的二次开发扩展( …
- 文章
1,161