云星空公共属性、方法、事件调用集合来源于文档中心2015年版本、论坛。目录插件开发环境说明................................................................................................51.插件开发环境.............................................................................................7开发环境配置要求....................................................................................7开发工具................................................................................................8开发环境搭建..........................................................................................8插件开发的步骤.......................................................................................92.动态表单插件...........................................................................................13动态表单视图........................................................................................15动态表单模型........................................................................................16动态表单插件........................................................................................17命名空间........................................................................................17继承体系........................................................................................18单据插件..............................................................................................18命名空间........................................................................................18继承体系........................................................................................18接口..............................................................................................19加载机制........................................................................................21初始化方法.....................................................................................22创建数据包.....................................................................................23数据绑定........................................................................................29加载和关闭.....................................................................................31单据操作........................................................................................343.服务插件..................................................................................................36命名空间..............................................................................................37继承体系........................................................................................37接口.....................................................................................................384.应用案例介绍...........................................................................................43常用.................................................................................................................521、简单帐表/动态表单几个主要事件...............................................................522.单据插件事件............................................................................................523.列表插件事件............................................................................................542015文档中心版本............................................................................................55操作插件.....................................................................................................55操作插件概要说明..................................................................................55如何创建一个操作插件.....................................................................55操作插件概览..................................................................................57如何启用操作插件...........................................................................61公共属性..............................................................................................64BusinessInfo.................................................................................64Context........................................................................................67FormOperation.............................................................................70OperationResult...........................................................................72Option..........................................................................................75基类虚方法,可捕获的事件.....................................................................77OnPrepareOperationServiceOption..............................................77OnPreparePropertys.....................................................................84OnAddValidators..........................................................................87BeforeExecuteOperationTransaction............................................92BeginOperationTransaction..........................................................96EndOperationTransaction.............................................................99AfterExecuteOperationTransaction.............................................102单据列表...................................................................................................106单据列表插件概要说明.........................................................................106公共属性............................................................................................106ListModel....................................................................................106ListView......................................................................................111事件...................................................................................................113BatchCopyData..........................................................................113AfterBatchCopyData...................................................................114BeforeButtonClick......................................................................114AfterButtonClick.........................................................................114AfterGetData..............................................................................114AfterMenuClick...........................................................................116BeforeMenuClick........................................................................116CellDbClick.................................................................................116CellFormat..................................................................................116CreateFilterEditorControl............................................................116EntryHyperlinkButtonClick.........................................................116FormatCellValue.........................................................................117OnFormatRowConditions............................................................119ListCreateColumns.....................................................................119ListInitialize................................................................................120ListRowDoubleClick....................................................................121OnGetConvertRule.....................................................................122OnShowConvertOpForm.............................................................125OnShowTrackResult....................................................................126PrepareFilterParameter..............................................................129PrepareFuncPermissionDataRule................................................131单据转换...................................................................................................131单据转换插件概要说明.........................................................................131如何创建一个单据转换插件.............................................................131如何启用单据转换插件...................................................................147公共属性............................................................................................148Context......................................................................................148OperationNumber......................................................................148OperationResult.........................................................................148Option........................................................................................149单据转换事件(插件基类的虚方法).......................................................149下推事件......................................................................................149选单前事件...................................................................................180选单后事件...................................................................................183附录:列表插件提供的单据转换事件.......................................................190动态表单...................................................................................................197插件概要描述......................................................................................197公共属性............................................................................................198Context......................................................................................198Model.........................................................................................198View...........................................................................................198事件...................................................................................................198PreOpenForm.............................................................................198OnInitializeService.....................................................................200OnSetBusinessInfo.....................................................................200OnSetLayoutInfo........................................................................203OnCreateDataBinder..................................................................205OnInitialize.................................................................................205OnBillInitialize............................................................................207CreateNewData..........................................................................207BeforeCreateNewEntryRow........................................................212AfterCreateNewEntryRow...........................................................212AfterCreateNewData..................................................................214AfterCreateModelData................................................................215OnLoad.......................................................................................217BeforeBindData..........................................................................219AfterBindData.............................................................................220BeforeClosed..............................................................................221ToolBarItemClick........................................................................222BarItemClick...............................................................................223AfterBarItemClick.......................................................................225ButtonClick.................................................................................227AfterButtonClick.........................................................................230AfterDeleteRow..........................................................................231EntryBarItemClick......................................................................232AfterEntryBarItemClick...............................................................236BeforeF7Select...........................................................................237BeforeUpdateValue....................................................................239CustomEvents............................................................................240DataChanged.............................................................................242EntityRowClick...........................................................................243TabItemSelectedChange.............................................................245EntityRowDoubleClick................................................................248反写.........................................................................................................251反写插件概要说明.........................................................................251公共属性......................................................................................259事件............................................................................................259账表服务...................................................................................................281账表(服务取数)插件概要说明.......................................................281公共属性......................................................................................287分页账表特有属性.........................................................................289树形账表特有属性.........................................................................289事件............................................................................................290补档...............................................................................................................327插件开发环境说明在过去,由于追求大规模集约生产技术、标准化的理念和操作的高效率,使得很多应用产品都趋于标准化。随着信息技术快速发展,越来越多的企业把对人的关注、人的个性释放及人的个性需求的满足推到空前中心的地位,企业与市场逐步建立一种新型关系,建立消费者个人数据库和信息档案,与消费者建立更为个人化的联系,及时地了解市场动向和顾客需求,向顾客提供一种个人化的销售和服务,顾客根据自己需求提出商品性能要求,企业尽可能按顾客要求进行生产,迎合消费者个别需求和品味,并应用信息,采用灵活战略适时地加以调整,以生产者与消费者之间的协调合作来提高竞争力,以多品种、中小批量混合生产取代过去的大批量生产。这有利于节省中间环节,降低销售成本。K/3CloudBOS平台提供动态扩展功能,通过动态领域模型建模将业务成各种标准接口和标准服务,通过插件开发完成标准业务扩展,快速高效实现个性化和非标准化业务。K/3CloudBOS平台的插件是一种专门为某一软件设计、用于功能扩充的程序。通过它可以:实现更灵活的控制方式和客户化定制;实现标准产品中特殊的业务流程处理;进行个性化的菜单、外观定制;增加自定义的菜单并响应其操作;对已有操作和服务未支持的功能进行扩展;快速开发、快速实施、快速应用;可配置,可测试,快速部署。介绍插件开发前再回顾一下BOS架构模型:(图10–1架构模型)动态表单模型封装了表单标准服务、操作和扩展服务,通过引擎和标准插件调用来组装业务。标准插件可被业务插件继承和替代,实现客户个性化需求。根据应用,BOS平台提供了4类插件:1.动态表单插件业务逻辑封装的插件,用于单据上业务各种事件、操作和服务的介入;提供了一系列事件、操作和服务接口;此类插件最常用。2.服务插件基于动态表单服务端的插件,提供服务编程接口;此类接口在外部服务直接调用。3.校验规则插件针对业务规则进行校验的插件;4.表单构建插件对界面加载控件和元数据的插件;通过此插件可对界面控件及元数据动态调整实现特殊需求。1.插件开发环境开发环境配置要求K/3CloudBOS是运行在windows平台上的,开发工具也是基于windows平台的Visualstudio。根据我们经验给出最低配置建议如下:服务器运行环境:团队服务器配置基准值团队数据库服务器CPU4核,2.0GHz以上内存SQLServer:8GBOracle:16GB客户端CPU双核,2.0GHz以上内存推荐:4GB个人客户端+数据库CPU双核,2.0GHz以上内存(SQLServer)4GB以上内存(oracle)8GB以上客户端环境:开发工具•Visualstudio2012•IE插件Silverlight5•SQLServer2008R2或Oracle11GR2•跟踪工具(HttpWatchPro6.0)•插件Building路径(K3Cloud\K3CloudServer\Bin\)注意事项:使用SQLServer2008排序规则为Chinese_PRC_CI_AS使用Oracle时,数据库字符集必须是:AL32UTF8,国家字符集必须是:AL16UTF16服务器组件版本操作系统数据库服务器MicrosoftSQLServer(标准版、企业版)2008R2以上WindowsServer2008以上Oracle11g以上Linuxx86-64AIXWEB服务器IIS6.0以上WindowsServer2008以上Microsoft.NETFramework4.0浏览器支持版本支持架构浏览器插件InternetExplorer8.09.032位(x86)64位(x64)Silverlight5Firefox12及以上32位(Windows)Silverlight5开发环境搭建公共环境:1.配置一台数据库服务器,安装SQLServer2008R2;2.配置一台web服务器,安装K/3Cloud产品,配置为管理中心站点;个人环境:1.根据环境配置要求,安装visualstudio,安装K/3Cloud产品(不需要配置管理中心)。2.检查并更改管理中心地址,打开K/3Cloud产品安装目录K3Cloud\K3CloudServer\App_Data下Common.config文件,查找managementSiteUrl,把地址更改为公共环境下建立的管理中心ip。<addkey="managementSiteUrl"value="http://192.168.73.40:8000/"/>创建完成后就可以进行插件开发。插件开发的步骤1.定义插件类打开Visualstudio2012,新建工程:MyDev.K3.SCM.Stock.Business.PlugIn;添加引用组件:Kingdee.BOSKingdee.BOS.Core新建类:ReceiptEdit,继承自Kingdee.BOS.Core.Bill.PlugIn.AbstractBillPlugIn2.分析业务定义重载方法;这里,我们先简单实现一个HelloWorld:点击菜单HelloWorld,弹出一个HelloWorld对话框。点击菜单要重载BarItemClick方法;3.引用相关组件(参照组件引用规则);增加using:C#usingKingdee.BOS.Core.Bill.PlugIn;usingKingdee.BOS.Core.DynamicForm;usingKingdee.BOS.Core.DynamicForm.PlugIn.Args;4.重载方法编码;重载BarItemClick方法,输入以下代码:C#publicoverridevoidBarItemClick(BarItemClickEventArgse){base.BarItemClick(e);if(e.BarItemKey=="HelloWorld"){this.View.ShowMessage("Helloworld!",MessageBoxType.Notice);}}保存;5.设置编译路径,编译组件;编译路径:K3Cloud\K3CloudServer\Bin;6.打开IDE设计器,配置插件;先找到单据属性窗口,编辑“采购收料单-_Bill”单据属性:在插件列表界面,点击注册插件:(注意该列表中可能已注册有其他插件,这些插件在运行时会动态加载,删除插件可能会导致业务数据错误)选择插件界面点击浏览:选择编译好的组件:勾选插件,确定返回确定并保存单据。7.运行测试;2.动态表单插件动态表单插件提供了丰富的接口,通过这些接口可以在插件中对表单编辑和列表界面样式、操作进行控制,也可以对显示数据进行各种处理。再来回顾一下动态表单元数据结构和继承关系:动态表单模型包含表单外观和表单业务逻辑,表单外观管理界面控件外观及样式,在模型中由视图(View)来控制,表单业务逻辑管理包括服务、校验器、操作和业务规则等,由模型(Model)来控制。动态表单外观和逻辑都是在IDE中设置的,设置的数据保存在动态表单模型元数据中,具体由布局元数据(LayoutInfo)记录表单外观数据,由业务元数据(BusinessInfo)记录表单逻辑数据,这2个类分别由View和Model持有。(图10–2动态表单元模型)为了方便使用和提高开发效率,我们将动态表单模型分解为各种表单领域模型,同时为各种模型提供了相应插件:(图10–3领域模型-动态表单模型关系)动态表单插件分为5大类:1.单据插件2.列表插件3.过滤条件插件4.账表插件5.动态表单插件继承关系如下:(图10–4插件继承关系)动态表单视图前面已经介绍,外观是由视图来管理,我们先看看动态表单视图模型。根据BOS架构图可以看到,客户端首先向服务发起HTTP请求,服务端由控制器服务接受请求并转送到动态表单模型控制器,再有动态表单控制器访问动态表单视图。动态表单视图加载外观模型,并从动态表单模型获取数据模型。动态表单视图提供2个视图接口,IDynamicFormView和IDynamicFormViewService。IDynamicFormView是视图接口,包含领域模型元数据、多视图模型接口、操作转发指令和通用属性方法。该接口可由插件直接访问。IDynamicFormViewService是动态表单内部使用的接口定义,包含Controller消息路由方法,插件开发不需关注。IDynamicFromView有2个重要属性,BusinessInfo和LayoutInfo,分别表示业务对象逻辑元数据和布局元数据。包含在IDE中设置的表单的所有信息。在运行时,客户端发出访问表单请求后,首先读取元数据初始化BusinessInfo和LayoutInfo,View和Model根据元数据定义的界面数据和布局信息展示出表单。IDynamicFromView接口提供了访问BusinessInfo和LayoutInfo的一些方法,供插件调用以实现业务,例如:访问菜单,修改控件样式,设置标题,更新界面等。IDynamicFromView接口同时提供操作控制和调用Model的方法,如:调用表单服务,执行操作,发送客户端指令,刷新界面,打开表单,动态注册插件等。本章节通过一些示例做详细介绍。先看看界面元素的访问。在实际业务中,经常需要对单据扩展,增加功能,那么就需要访问菜单、字段显示隐藏锁定等。动态表单模型动态表单模型接口:IDynamicFormModel和IDynamicFormModelService。设计思想同动态表单视图一样,将逻辑和插件模型分开。IDynamicFormModel是模型接口,包含领域模型元数据、数据操作方法。该接口可由插件直接访问。IDynamicFormModelService是动态表单内部使用的接口定义,插件开发不需关注。IDynamicFormModel也有BusinessInfo,和IDynamicFromView一样,表示业务对象逻辑元数据。这里BusinessInfo的意义是根据元数据定义绑定数据。另外一个重要属性DataObject是当前表单的数据对象。该数据是个DynamicObject,包含单据头和单据体数据,其中单据体是集合对象DynamicObjectCollection,并且可以有多个.K/3CloudBOS动态实体类型,默认使用DynamicObject作为数据承载类,可以通过DynamicObjectType.ClrType属性指定自定义类。但我们要求指定的类型必须派生自DynamicObject。DataEntityCollection<T>Collection<T>GenericClassDynamicObjectCollectionDataEntityCollection<DynamicObject>ClassIDeserializationCallbackIDynamicFormModel提供的主要是针对数据进行操作的系列方法,包括:初始化、新增表单数据、复制数据、删除数据、定位当前分录数据行、设置值等方法。动态表单插件动态表单模型是通过插件代理实现业务逻辑,对外部的接口主要是插件,这些接口可以提供给二次开发使用。命名空间Kingdee.BOS.Core.DynamicForm.PlugIn主要类及说明:ClassDescriptionAbstractDynamicFormDataBinder动态表单数据绑定器抽象类AbstractDynamicFormPlugIn动态表单插件抽象基类AbstractDynamicWebFormBuilderPlugIn动态表单页面元数据构建插件AbstractOperationServicePlugIn操作服务插件抽象类主要接口:InterfaceDescriptionIDynamicFormModelPlugIn动态表单Model层插件控制接口;实现本接口的插件,可以接收Model层的事件IDynamicFormViewPlugIn动态表单View层插件接口;实现本接口的插件可以接收动态表单View层事件继承体系动态表单插件分4类,单据、基础资料、动态表单和列表。业务模型类(插件、服继承自抽象类务)表单插件单据插件Kingdee.BOS.Core.Bill.PlugIn.AbstractBillPlugIn基础资料插件Kingdee.BOS.Core.Base.PlugIn.AbstractBasePlugIn动态表单插件Kingdee.BOS.Core.DynamicForm.PlugIn.AbstractDynamicFormPlugIn列表插件列表插件Kingdee.BOS.Core.List.PlugIn.AbstractListPlugIn单据插件命名空间Kingdee.BOS.Core.Bill.PlugIn继承体系System.ObjectKingdee.BOS.Core.DynamicForm.PlugIn.AbstractDynamicFormPlugInKingdee.BOS.Core.Bill.PlugIn.AbstractBillPlugInKingdee.BOS.Core.Base.PlugIn.AbstractBasePlugIn接口视图访问接口接口名:IdynamicFormViewPlugIn动态表单View层插件接口;实现本接口的插件可以接收动态表单View层事件。NameDescriptionAfterBarItemClick菜单单击事件完成后处理扩展接口AfterBindData绑定数据后事件处理后扩展接口AfterButtonClick按钮单击之后调用AfterCopyRow分录行拷贝后调用AfterDoOperation操作完成后调用AfterEntryBarItemClick分录菜单单击事件处理扩展接口AfterF7Select基础资料选择返回后调用AfterToolBarItemClick工具栏单击事件处理扩展接口BarItemClick主菜单单击事件处理扩展接口BeforeBindData绑定数据前事件处理后扩展接口,主要用于加载数据到界面前对控件状态进行设置BeforeClosed页面准备关闭BeforeDoOperation操作开始前调用BeforeF7Select基础资料界面调出之前抛出ButtonClick按钮单击时调用EntityRowClick分录行单击事件EntityRowDoubleClick分录行双击事件EntryBarItemClick分录菜单单击事件处理扩展接口EntryButtonCellClick表格按钮单击时调用FieldLabelClick字段标题单击事件FireEntryCheck单据体列全选事件ListViewClick列表控件单击事件OnInitialize页面初始化TabItemSelectedChange页签控件的页签选中事件ToolBarItemClick工具栏单击事件处理扩展接口TreeDragDropKDTree拖拽事件TreeNodeClickTreeView节点单击之后调用TreeNodeDoubleClickTreeView节点双击之后调用模型访问接口接口名:IdynamicFormModelPlugIn动态表单Model层插件控制接口;实现本接口的插件,可以接收Model层的事件。主要包括:NameDescriptionAfterCreateNewData业务对象创建后的扩展接口AfterCreateNewEntryRow新增、插入、多行输入后调用BeforeUpdateValue值改变更新前的扩展接口CreateNewData创建新业务对象扩展接口,插件可以更加需要自己创建对象DataChanged字段值改变后扩展接口加载机制动态表单元模型包括外观模型和表单逻辑模型,第一次访问时会先加载元数据,初始化视图和模型对象,初始化页面,然后创建数据包并绑定数据。对于二次开发提供了一系列插件允许二次开发在加载表单时对视图、模型、数据包及界面进行控制,插件在加载过程中的执行顺序如下:OnInitialize页面初始化CreateNewData动态表单数据包创建AfterCreateNewEntryRow创建分录行后AfterCreateNewData动态表单数据包创建后BeforeBindData绑定数据前事件AfterBindData绑定数据及控件状态BeforeClosed页面关闭前初始化方法OnInitialize该插件负责动态表单实例初始化,包括单据Global参数(当然有些参数仅仅在使用时候才获取),动态初始化控件数据源等。比如,批量修改界面初始化时将允许修改的字段加入到下拉列表。C#///<summary>///界面初始化///</summary>///<paramname="e"></param>publicoverridevoidOnInitialize(Core.DynamicForm.PlugIn.Args.InitializeEventArgse){//根据列表的formid,获取元数据metadata=(FormMetadata)ServiceHelper.MetaDataServiceHelper.Load(this.View.Context,this.View.ParentFormView.BillBusinessInfo.GetForm().Id);//设置标题--!stringstrTitle=string.Format("{1}-[{0}]",metadata.GetLayoutInfo().GetFormAppearance().Caption,this.View.LayoutInfo.GetFormAppearance().Caption);LocaleValueformTitle=newLocaleValue();formTitle.Add(newKeyValuePair<int,string>(this.Context.UserLocale.LCID,strTitle));this.View.SetFormTitle(formTitle);List<EnumItem>list=newList<EnumItem>();//循环检测哪些字段允许批量修改,加入列表foreach(Fieldfieldinmetadata.BusinessInfo.GetFieldList()){if((field.FunControl&Field.FUNCONTROL_BULK_EDIT)!=Field.FUNCONTROL_BULK_EDIT)continue;//修改时隐藏的字段不予显示Appearanceapp=metadata.GetLayoutInfo().GetAppearance(field.Key);if(app!=null){if((app.Visible&Appearance.VIS_EDIT)!=Appearance.VIS_EDIT)continue;}_lstFields.Add(field);EnumItemitem=newEnumItem();item.Value=field.Key;item.Caption=field.Name;list.Add(item);}//排序并将list加入到下拉列表list=list.OrderBy(p=>p.Caption[this.View.Context.UserLocale.LCID]).ToList();if(list.Count!=0){selectedFielKey=list.FirstOrDefault().Value;}this.View.GetControl<ComboFieldEditor>("FCombo").SetComboItems(list);}创建数据包CreateNewData动态表单数据包创建,只在新增时触发,打开表单不触发。我们在IDE里画好单据和基础资料后,不需要编写任何代码,打开界面,可以看到已经创建好一张新的空单据,这是因为新建时候会调用CreateNewRow创建空数据。很多时候,我们需要创建有缺省值或者新增时候从其他服务获取数据显示过来,我们就可以通过该事件来加载数据示例:简单的加载动态表单数据。C#publicoverridevoidCreateNewData(BizDataEventArgse){if(!billFormId.IsNullOrEmptyOrWhiteSpace()){DynamicObjectobj=BusinessDataServiceHelper.LoadBillTypePara(context,businessInfo,formId,false);e.BizDataObject=obj;}base.CreateNewData(e);}示例:操作结束后,在动态表单上显示操作结果。C#///<summary>///创建数据包事件处理;由插件处理数据包的创建过程,界面仅展示///</summary>///<paramname="e"></param>publicoverridevoidCreateNewData(BizDataEventArgse){//创建本界面需要的数据对象e.BizDataObject=newDynamicObject(this.View.OpenParameter.FormMetaData.BusinessInfo.GetDynamicObjectType());BusinessInfoinfo=this.View.OpenParameter.FormMetaData.BusinessInfo;//给角色表格赋值EntityresultEntity=info.GetEntity("FEntity");FieldseqField=info.GetField("FSeq");FieldnameField=info.GetField("FName");FieldstatusField=info.GetField("FStatus");FieldmessageField=...