K3Cloud+BOS+插件开发百问百答 联系客服

发布时间 : 星期一 文章K3Cloud+BOS+插件开发百问百答更新完毕开始阅读d0d82d649e3143323868933e

中的组件,与代码不匹配,需要重新编译并重启IIS;

2. 进阶篇

2.1. 插件代码,如何自行调用单据操作服务 2.1.1. 如何加载(Load)单据

2.1.1.1. 运行在Web层的插件,如何加载单据?

? 运行在Web层的插件,包括动态表单插件、单据编辑插件、基础资料编辑插件、列表

插件等,控制着交互界面; ? 实现思路

? 调用Kingdee.BOS.ServiceHelper.dll的BusinessDataServiceHelper类提供的Load方法 ? 插件准备

? 插件工程引用Kingdee.BOS.ServiceHelper.dll组件

? 类文件引用BusinessDataServiceHelper类所在的命名空间Kingdee.BOS.ServiceHelper ? BusinessDataServiceHelper.Load方法介绍

BusinessDataServiceHelper提供了4个Load方法,分别介绍如下

? publicstaticDynamicObject[] Load(Context ctx, BusinessInfo businessInfo,

List selector, OQLFilter ofilter).

构建过滤条件OQLFilter,检索某些字段片段信息(List)的目标数据集合

? publicstaticDynamicObject[] Load(Context ctx, DynamicObjectType type,

QueryBuilderParemeter queryParemeter)

构建过滤条件QueryBuilderParemeter,检索满足条件的目标数据集合 ? publicstaticDynamicObject[]

DynamicObjectType type)

Load(Context

ctx,

Object[]

pkArray,

指定目标数据id集合

根据数据id集合,动态对象类型,检索满足条件的目标数据集合 ? publicstaticDynamicObject[]

Load(Context

ctx,

string

formid,

List selector, OQLFilter ofilter)

指定单据模型唯一标示,感兴趣的字段片段信息(也就是说,只取部分字段出来,不会把这个模型的所有字段数据都取出来),构建过滤条件OQLFilter

? 方法参数介绍 名称 ctx businessInfo 类型 Context BusinessInfo 说明 系统上下文信息 待检索数据的模型元数据信息 selector ofilter type queryParemeter pkArray formid List OQLFilter DynamicObjectType QueryBuilderParemeter Object[] string 字段片段信息 快速过滤条件对象 动态实体类型 查询过滤对象 目标实体数据id集合 待查询模型唯一标示

? 示例代码 C#

using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.SqlBuilder; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using System;

using System.Collections.Generic; using System.Linq; using System.Text;

using System.Threading.Tasks;

namespace MyDynamicFormPlugIn {

publicclassClass7 : AbstractDynamicFormPlugIn {

publicoverridevoid ButtonClick(ButtonClickEventArgs e) {

//加载id为10001的物料数据 //获取物料元数据

FormMetadata materialMetada =

MetaDataServiceHelper.Load(this.Context, \) asFormMetadata;

//构建过滤条件

QueryBuilderParemeter queryParameter = newQueryBuilderParemeter(); queryParameter.BusinessInfo = materialMetada.BusinessInfo; queryParameter.FilterClauseWihtKey = \;

//构建快捷过滤条件

OQLFilter filter = newOQLFilter();

filter.Add(newOQLFilterHeadEntityItem() { FilterString = \= 10001\ });

//构建关心的字段片段信息

List lstSelectorItemInfos = newList(); //物料属性

lstSelectorItemInfos.Add(newSelectorItemInfo(\)); //使用组织

lstSelectorItemInfos.Add(newSelectorItemInfo(\));

//方法1:

DynamicObject[] objs = BusinessDataServiceHelper.Load( this.Context,

materialMetada.BusinessInfo.GetDynamicObjectType(), queryParameter); //方法2:

objs = BusinessDataServiceHelper.Load( this.Context,

newobject[] { 10001 },

materialMetada.BusinessInfo.GetDynamicObjectType()); //方法3:根据过滤条件获取满足条件的目标数据的部分字段信息 objs = BusinessDataServiceHelper.Load( this.Context,

materialMetada.BusinessInfo, lstSelectorItemInfos, filter);

//方法4:根据过滤条件获取满足条件的目标数据的部分字段信息 objs = BusinessDataServiceHelper.Load( this.Context, \,

lstSelectorItemInfos, filter); } } }

2.1.1.2. 运行在App服务层的插件,如何加载单据?

? 运行在App层的插件,包括操作插件、单据转换插件、反写插件、账表取数插件等,

此类插件掌控着某种特定服务的执行过程,与交互界面无关; ? 实现思路

? 通过Kingdee.BOS.App.dll的ServiceHelper类获取ViewService服务,调用此服务提

供的Load方法

? 插件准备

? 插件工程引用Kingdee.BOS.App.dll、Kingdee.BOS.Contracts.dll、

Kingdee.BOS.DataEntity.dll ? 类文件引用相关命名空间,详见示例代码 ? IViewService接口介绍

? 同web层插件方法介绍

? 示例代码 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.Core.SqlBuilder; using Kingdee.BOS.Orm.DataEntity; using System;

using System.Collections.Generic; using System.Linq; using System.Text;

using System.Threading.Tasks;

namespace MyOperaionServicePlugIn {

publicclassClass6 : AbstractOperationServicePlugIn {

publicoverridevoid BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e) {

//加载id为10001的物料数据 //获取ViewService

IViewService viewService =

Kingdee.BOS.App.ServiceHelper.GetService(); //获取元数据服务

IMetaDataService metadataService =

Kingdee.BOS.App.ServiceHelper.GetService();

//获取物料元数据

FormMetadata materialMetada =

metadataService.Load(this.Context, \) asFormMetadata;

//构建过滤条件

QueryBuilderParemeter queryParameter = newQueryBuilderParemeter(); queryParameter.BusinessInfo = materialMetada.BusinessInfo; queryParameter.FilterClauseWihtKey = \;

//构建快捷过滤条件

OQLFilter filter = newOQLFilter();

filter.Add(newOQLFilterHeadEntityItem() { FilterString = \= 10001\ });

//构建关心的字段片段信息

List lstSelectorItemInfos = newList();