Ø 运行在App层的插件
包括操作插件、单据转换插件、反写插件、账表取数插件等,此类插件掌控着某种特定服务的执行过程,与交互界面无关;
Ø 实现思路
通过Kingdee.BOS.App.dll组件提供的ServiceHelper类,调用GetService泛型方法,获取SaveService服务,调用SaveService提供的Save方法
Ø 插件准备
插件工程引用Kingdee.BOS.App.dll、Kingdee.BOS.Contracts.dll、Kingdee.BOS.DataEntity.dll
类文件引用相关命名空间,详见示例代码
Ø ISaveService.Save接口介绍
ISaveService提供4个Save方法,看上去差不多,其实本质有区别,可以将这4个方法区分为2类方法
直接调用Orm把数据保存到数据库
public DynamicObject Save(Context ctx, DynamicObject dataObject)
public DynamicObject[] Save(Context ctx, DynamicObject[] dataObject)
模拟保存操作服务端完整过程,调用填充主键、生成单据编号,执行校验器,调用服务端服务与服务端插件,最后调用Orm把数据保存到数据库
public DynamicObject[] Save(Context ctx, BusinessInfo businessInfo, DynamicObject[] dataObject, string operationNumber)
public IOperationResult Save(Context ctx, BusinessInfo businessInfo, DynamicObject dataObject, OperateOption option = null, string operationNumber = "")
Ø Save方法参数介绍
名称 | 类型 | 说明 |
ctx | Context | 系统全局信息,这里主要使用全局信息中的数据库连接信息 |
dataObject | DynamicObject | 待保存的数据对象 |
businessInfo | BusinessInfo | 待保存数据对象的元数据信息 |
option | OperateOption | 自定义额外参数对象,服务端服务和服务端插件都能持有此对象 |
operationNumber | string | 当前操作的操作码 |
Ø 示例代码
C# | |
using Kingdee.BOS.Contracts; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Orm.DataEntity; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace MyOperaionServicePlugIn { [System.ComponentModel.Description("区分当前类应用在哪个操作上")] public class Class1 : AbstractOperationServicePlugIn { public override void BeforeExecuteOperationTransaction( BeforeExecuteOperationTransaction e) { //例如:保存id为10001的物料 //获取元数据服务 IMetaDataService metadataService = Kingdee.BOS.App.ServiceHelper.GetService<IMetaDataService>(); //获取保存服务 ISaveService saveService = Kingdee.BOS.App.ServiceHelper.GetService<ISaveService>(); //获取加载数据服务 IViewService viewService = Kingdee.BOS.App.ServiceHelper.GetService<IViewService>();
//获取物料元数据 FormMetadata materialMetadata = metadataService.Load(this.Context,"BD_Material") as FormMetadata; //获取id为10001的物料数据 DynamicObject[] objs = viewService.Load( this.Context, new object[] { 10001 }, materialMetadata.BusinessInfo.GetDynamicObjectType()); //保存id为10001的物料 saveService.Save(this.Context, objs); saveService.Save(this.Context, materialMetadata.BusinessInfo, objs); } } } |
本文转载自:《K/3 Cloud BOS 插件开发百问百答》
作者:张晋博、丁振华
原文链接:https://open.kingdee.com/K3Cloud/Wenku/DocumentView.aspx?docId=117527
推荐阅读