K3Cloud+BOS+插件开发百问百答.docx

上传人:b****8 文档编号:10518780 上传时间:2023-02-17 格式:DOCX 页数:101 大小:752.21KB
下载 相关 举报
K3Cloud+BOS+插件开发百问百答.docx_第1页
第1页 / 共101页
K3Cloud+BOS+插件开发百问百答.docx_第2页
第2页 / 共101页
K3Cloud+BOS+插件开发百问百答.docx_第3页
第3页 / 共101页
K3Cloud+BOS+插件开发百问百答.docx_第4页
第4页 / 共101页
K3Cloud+BOS+插件开发百问百答.docx_第5页
第5页 / 共101页
点击查看更多>>
下载资源
资源描述

K3Cloud+BOS+插件开发百问百答.docx

《K3Cloud+BOS+插件开发百问百答.docx》由会员分享,可在线阅读,更多相关《K3Cloud+BOS+插件开发百问百答.docx(101页珍藏版)》请在冰豆网上搜索。

K3Cloud+BOS+插件开发百问百答.docx

K3Cloud+BOS+插件开发百问百答

K/3CloudBOS插件开发百问百答

修订记录

Ver.No

日期

编制\修订

校对

批准

修改的章节号

V1.0

20150428

张晋博

丁振华

赖碧云

初始版本,共39个问题

问题和意见

如果你对文档有任何意见、问题或想法,或者你的问题未在此文档中找到答案,请通过电子邮件联系我们

jinbo_zhang@

目录

K/3CloudBOS插件开发百问百答1

1.入门篇4

1.1.如何创建并启用各类插件4

1.1.1.如何创建并启用动态表单插件4

1.1.2.如何创建并启用单据编辑插件8

1.1.3.如何创建并启用基础资料编辑插件9

1.1.4.如何创建并启用列表插件10

1.1.5.如何创建并启用操作插件11

1.1.6.如何创建并启用账表取数插件15

1.1.7.如何创建并启用单据转换插件18

1.1.8.如何创建并启用反写插件18

1.2.为何插件不起作用,如何排查20

2.进阶篇21

2.1.插件代码,如何自行调用单据操作服务21

2.1.1.如何加载(Load)单据21

2.1.2.如何调用保存(Save)操作25

2.1.3.如何调用提交(Submit)操作28

2.1.4.如何调用审核/反审核(Audit/UnAudit)操作31

2.1.5.如何调用禁用(Disabled)操作34

2.1.6.如何删除(Delete)单据37

2.2.调用单据操作后,如何判断结果,并处理交互提示40

2.3.插件给字段赋值后,为什么不执行字段”值更新属性”上配置的表单服务44

2.4.在动态表单插件中,如何修改界面数据47

2.4.1.如何新增单据体行47

2.4.2.如何删除单据体行49

2.4.3.如何给普通字段赋值50

2.4.4.如何给基础资料字段赋值51

2.4.5.如何动态设置下拉列表字段的可选项52

2.5.字段标识(Key)、字段名(FieldName)、属性名(PropertyName)的差别53

2.6.在动态表单中,如何实现文件下载54

2.7.如何支持用户把本地文件上传到服务器58

2.8.以实例说明如何为动态表单取数、填充59

2.9.如何为预置账表,添加字段60

2.10.如何获取基础资料的属性值61

2.11.保存前,如何为新建的单据数据包、单据体行,填写主键62

2.12.在动态表单插件中,如何显示指定界面63

2.13.如何为收款单,往来单位类型,添加新的基础资料65

2.14.如何创建、调试自定义执行计划67

2.15.如何通过按钮实现F8选择返回效果68

2.16.如何在操作插件中,自定义操作校验器并启用69

2.17.如何实现超链接,打开外部URL地址74

2.18.如何获取基础资料字段的类别(FormId)75

3.高级篇76

3.1.如何给单据体表格,增加自定义过滤行76

1.入门篇

1.1.如何创建并启用各类插件

1.1.1.如何创建并启用动态表单插件

创建插件工程

Ø动态表单插件,运行在K/3Cloud的Web服务层,需要建立一个独立的工程管理动态表单插件类;

Ø动态表单插件工程,建议命名格式为[开发商][.K3][.业务领域][.子系统].Business.PlugIn;如JD.K3.SCM.PUR.Business.PlugIn;

Ø创建工程过程:

VisualStudio→New→Project

ØVisualC#→ClassLibrary→选择工程文件存放位置→OK

Ø工程References右键,添加工程引用,所添加组件都来自Cloud网站的website\bin路径

Ø修改插件工程输出路径为Cloud网站路径website\bin:

选中插件工程→右键→Property(属性)→Build页签→OutputPath(输出路径)

Ø修改当前类(Class1)的继承对象为AbstractDynamicFormPlugIn

Ø类文件引用基类(AbstractDynamicFormPlugIn)所在命名空间

C#

 

usingKingdee.BOS.Core.DynamicForm.PlugIn;

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceMyDynamicFormPlugIn

{

[System.ComponentModel.Description("区分当前类应用在哪个模型上")]

publicclassClass1:

AbstractDynamicFormPlugIn

{

}

}

注册并启用插件

Ø插件编写完毕,编译工程,输出类库*.dll文件到WebSite\Bin目录;

Ø打开BOSIDE,定位到动态表单模型整体属性,配置表单插件属性

Ø点开表单插件属性,注册编译生成的插件工程组件,从website\bin路径下找到插件工程组件,选择插件工程组件下的插件类,一般在插件类上使用微软元数据描述,在注册插件时区分不同的类,选择注册插件后,注意勾选“启用”复选框

1.1.2.如何创建并启用单据编辑插件

创建单据编辑插件

Ø单据编辑插件,运行在K/3Cloud的Web服务层,重用动态表单插件工程;

Ø创建插件类的过程,与创建动态表单插件几乎一样,唯一区别是单据编辑插件继承的基类是AbstractBillPlugIn

Ø插件类引用基类所在命名空间

C#

 

usingKingdee.BOS.Core.Bill.PlugIn;

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceMyDynamicFormPlugIn

{

[System.ComponentModel.Description("区分当前类应用在哪个模型上")]

publicclassClass2:

AbstractBillPlugIn

{

//TODO

}

}

启用单据编辑插件

Ø与启用动态表单插件一样

1.1.3.如何创建并启用基础资料编辑插件

如何创建基础资料编辑插件

Ø基础资料编辑插件,运行在K/3Cloud的Web服务层,重用动态表单插件工程;

Ø与创建单据编辑插件一样,唯一区别是基础资料编辑插件继承的基类是AbstractBasePlugIn,目前AbstractBasePlugIn与AbstractBillPlugIn完全一样,但不论从模型分类角度或从未来发展趋势看,还是请大家严格遵守插件体系,即:

从AbstractBasePlugIn继承

C#

 

usingKingdee.BOS.Core.Base.PlugIn;

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceMyDynamicFormPlugIn

{

[System.ComponentModel.Description("区分当前类应用在哪个模型上")]

publicclassClass3:

AbstractBasePlugIn

{

//TODO

}

}

如何启用基础资料编辑插件

Ø与启用动态表单插件一样

1.1.4.如何创建并启用列表插件

如何创建列表插件

Ø列表插件,运行在K/3Cloud的Web服务层,重用动态表单插件工程;

Ø与创建表单插件一样,唯一区别是列表插件从AbstractListPlugIn继承出来

C#

 

usingKingdee.BOS.Core.List.PlugIn;

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceMyDynamicFormPlugIn

{

[System.ComponentModel.Description("区分当前类应用在哪个模型上")]

publicclassClass4:

AbstractListPlugIn

{

//TODO

}

}

如何启用列表插件

Ø与启用动态表单插件一样,唯一区别是注册列表插件的位置是模型的列表插件属性

1.1.5.如何创建并启用操作插件

如何创建操作插件

Ø操作插件,运行在K/3Cloud的App服务层,需要单独创建一个工程管理操作插件类;

Ø操作插件工程,命名规范:

[开发商][.K3][.业务领域][.子系统].App.ServicePlugIn,如JD.K3.SCM.PUR.App.ServicePlugIn

Ø操作插件工程类型也是Classlibrary,编译输出的路径同样是Website\bin;

Ø操作插件工程类型,因为运行层次不一样,与动态表单插件工程引用的类库*dll稍有不同:

Ø新建操作插件类的过程,与创建动态表单插件类似,区别在于操作插件继承的基类是AbstractOperationServicePlugIn

C#

 

usingKingdee.BOS.Core.DynamicForm.PlugIn;

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceMyOperaionServicePlugIn

{

[System.ComponentModel.Description("区分当前类应用在哪个操作上")]

publicclassClass1:

AbstractOperationServicePlugIn

{

}

}

如何启用操作插件

Ø打开BOSIDE,点开模型操作列表

Ø例如当前操作插件是应用在保存操作上,选择保存操作,点编辑

Ø其他控制页签,服务插件

1.1.6.如何创建并启用账表取数插件

如何创建账表取数插件

Ø账表取数插件,运行在K/3Cloud的App服务层,需单独创建一个工程(Classlibrary);

Ø账表取数插件工程,命名规范:

[开发商][.K3][.业务领域][.子系统].App.ReportPlugIn,如JD.K3.SCM.PUR.App.ReportPlugIn;

Ø插件工程引用组件(包括但不限于此,也可参考操作插件工程引用的组件):

Ø与创建动态表单插件类似,区别在于帐表服务器插件继承自SysReportBaseService

Ø插件类文件引用基类所在命名空间

C#

 

usingKingdee.BOS.Contracts.Report;

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceReportPlugInDemo

{

publicclassClass1:

SysReportBaseService

{

//TODO

}

}

如何启用账表服务器插件

Ø进入BOSIDE,打开账表模型,设置服务器插件属性

Ø注册编译好的账表服务器插件,并点击启用复选框

1.1.7.如何创建并启用单据转换插件

如何创建单据转换插件

Ø单据转换插件,运行在K/3Cloud的App服务层,重用操作插件工程;

Ø创建插件类,与创建动态表单插件类类似,继承基类是AbstractConvertPlugIn

Ø插件类文件引用基类所在命名空间

C#

 

usingKingdee.BOS.Core.Metadata.ConvertElement.PlugIn;

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceBusinessFlowPlugIn

{

publicclassClass1:

AbstractConvertPlugIn

{

//TODO

}

}

如何启用单据转换插件

Ø打开BOSIDE,打开单据转换设计界面,插件策略,注册编译生成的单据转换插件,并启用

1.1.8.如何创建并启用反写插件

如何创建反写插件

Ø反写插件,运行在K/3Cloud的App服务层,重用操作插件工程;

Ø创建插件类与创建动态表单插件类似,继承基类AbstractBusinessFlowServicePlugIn

Ø插件文件引用基类所在命名空间

C#

 

usingKingdee.BOS.Core.BusinessFlow.PlugIn;

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceBusinessFlowPlugIn

{

publicclassClass2:

AbstractBusinessFlowServicePlugIn

{

//TODO

}

}

如何启用反写规则插件

Ø打开BOSIDE,打开业务流程的下游单据模型(如采购申请单下推采购订单,则反写插件挂在采购订单上),选择单据关联配置属性

Ø反写插件,注册编译生成的反写插件工程组件对应的反写类,并启用

1.2.为何插件不起作用,如何排查

插件不起作用,按照如下步骤检查:

Ø插件工程编译后,是否输出到Cloud网站路径website\bin

Ø插件类是否注册到了当前表单上,并成功保存?

注册插件时,要找website\bin路径下的插件工程组件

Ø编译生成dll到指定网站目录后,是否重启过站点的IIS?

必须重启站点IIS,新组件才会被启用;

Ø调试代码,附加w3wp.exe程序后,插件代码是否能够命中?

如果不能命中,说明运行中的组件,与代码不匹配,需要重新编译并重启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(Contextctx,BusinessInfobusinessInfo,Listselector,OQLFilterofilter).

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

✧publicstaticDynamicObject[]Load(Contextctx,DynamicObjectTypetype,QueryBuilderParemeterqueryParemeter)

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

✧publicstaticDynamicObject[]Load(Contextctx,Object[]pkArray,DynamicObjectTypetype)

指定目标数据id集合

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

✧publicstaticDynamicObject[]Load(Contextctx,stringformid,Listselector,OQLFilterofilter)

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

Ø方法参数介绍

名称

类型

说明

ctx

Context

系统上下文信息

businessInfo

BusinessInfo

待检索数据的模型元数据信息

selector

List

字段片段信息

ofilter

OQLFilter

快速过滤条件对象

type

DynamicObjectType

动态实体类型

queryParemeter

QueryBuilderParemeter

查询过滤对象

pkArray

Object[]

目标实体数据id集合

formid

string

待查询模型唯一标示

Ø示例代码

C#

 

usingKingdee.BOS.Core.DynamicForm.PlugIn;

usingKingdee.BOS.Core.DynamicForm.PlugIn.Args;

usingKingdee.BOS.Core.Metadata;

usingKingdee.BOS.Core.SqlBuilder;

usingKingdee.BOS.Orm.DataEntity;

usingKingdee.BOS.ServiceHelper;

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceMyDynamicFormPlugIn

{

publicclassClass7:

AbstractDynamicFormPlugIn

{

publicoverridevoidButtonClick(ButtonClickEventArgse)

{

//加载id为10001的物料数据

//获取物料元数据

FormMetadatamaterialMetada=

MetaDataServiceHelper.Load(this.Context,"BD_Material")asFormMetadata;

//构建过滤条件

QueryBuilderParemeterqueryParameter=newQueryBuilderParemeter();

queryParameter.BusinessInfo=materialMetada.BusinessInfo;

queryParameter.FilterClauseWihtKey="FMaterailId=10001";

//构建快捷过滤条件

OQLFilterfilter=newOQLFilter();

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

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

ListlstSelectorItemInfos=newList();

//物料属性

lstSelectorItemInfos.Add(newSelectorItemInfo("FErpClsId"));

//使用组织

lstSelectorItemInfos.Add(newSelectorItemInfo("FUseOrgId"));

//方法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,

"BD_Material",

lstSelectorItemInfos,

f

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 财会金融考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1