发布时间 : 星期一 文章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
构建过滤条件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
指定单据模型唯一标示,感兴趣的字段片段信息(也就是说,只取部分字段出来,不会把这个模型的所有字段数据都取出来),构建过滤条件OQLFilter
? 方法参数介绍 名称 ctx businessInfo 类型 Context BusinessInfo 说明 系统上下文信息 待检索数据的模型元数据信息 selector ofilter type queryParemeter pkArray formid List
? 示例代码 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.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