(最新)K3_BOS_插件开发经典入门教程

合集下载

金蝶K3 BOS数据交换平台详细教程

金蝶K3 BOS数据交换平台详细教程
金蝶 K3V12.0 BOS 数据交换平台 用户手册
版权声明
本书著作权属于金蝶软件(中国)有限公司所有,在未经本公司许可的情况下,任何单 位或个人不得以任何方式对本书的部分或全部内容擅自进行增删,改编,节录,翻译,翻印, 改写。
金蝶软件(中国)有限公司 2009 年 1 月
前言
感谢您使用《金蝶 K/3 V12.0 BOS 用户手册》。
5. 现场支持服务
我们的资深专业人员面对面地和您沟通,在运行现场对问题进行研究分析,使问 题迅速得到解决。
6. CRM 服务
借助客户关系管理系统(金蝶 EAS-CRM)我们建立了客户综合信息管理库,能够 快速地解决客户的问题并保留历史记录,以便提供长期、持续、高效的服务。
7. CSP 服务支持
金蝶公司融合多年客户服务经验与国外先进的管理思想,提炼出客户常用的和最 需要的服务为一体的 CSP 服务。它是以金蝶公司先进的科技手段和专业化的服务队伍 为依托,在业界领先推出的项目完整、功能全面的系统性服务产品。
第 3 章 单据引入引出 .....................................................................................................................21 3.1 单据引出 ............................................................................................................................21 3.2 单据引入 ............................................................................................................................23 3.3 单据引出并引入到账套 ....................................................................................................23

K3BOS培训—插件

K3BOS培训—插件

BillHeads\BillHead\BillEntrys\ BillEntry\BOSFields\BOSFiel d—单据、单据头、单据体、单据
字段操作
提纲
• • • •
插件开发概述 插件开发基础 使用数据包开发插件 其它
插件开发向导 • VB Addin • 快速构建
– 客户端单据插件 – 客户端序时簿插件 – 中间层插件
– 方法 1
• 先使用 ToolPicture 属性指定一个图标的路径 • 再调用 SetPicture([Index As Long], [MaskColor As Long]) 方 法
– Index 代表了 » 0-Normal, 1-Pressed, 2-Mouse Hover, 3-Disabled
PublicNotCreatable
– 也可直接使用,如:
lUserID = BillEventObject.K3Lib. User.ID
K3Lib 重点
– Function LoadKDString(strGBText As String, [ResourceFile As String]) As String
K/3 BOS进阶培训—插件开发
常州金蝶软件
提纲
• • • •
插件开发概述 插件开发基础 使用数据包开发插件 其它
作用
• 插件的作用
– 实现单据、序时簿、基础资料序时簿中特殊的业务流 程处理 – 中间层数据改变时的特殊处理规则 – 个性化的菜单、外观定制;增加自定义的菜单并响应 其操作 – 对审核、消息流程的自定义控制
– …….
• 完成无法通过 K/3 BOS 标准功能实现 的个性化需求
开发环境 • 插件开发环境

实施专题-使用K3BOS自定义控件示例-件示例-实现助手视图87

实施专题-使用K3BOS自定义控件示例-件示例-实现助手视图87

使用K3BOS(v12+)实现助手视图[仅供内部开发研究交流]K3BOS 从V12 起提供了自定义控件支持. 下面我们开发一个控件, 加入BOS单据中, 实现的"助手视图"的功能.第一步, 我们先开发出一个控件.1. 启动VB, 利用BOS插件向导, 创建一个插件, 命名为K3TestDll.CBillPlugin.2. 添加一个"控件"工程, 命名为K3TestCtrl.CtlHelper3. 调整控件外观. 我们将把这个控件添加到单据上, 所以你想要在单据上展示什么, 就可以在控件上添加什么. 我添加了一个文本框txtInfo, 准备用于展示物料信息; 添加一张图片, 用于展示物料图片; 此外还添加了一些按钮, 用于调用其他附加的功能.修改控件的UserControl_Resize() 方法, 以免大小改变时, 控件界面发生混乱.4. 为了在控件中响应插件事件, 获取单据信息, 我们需要在控件中添加插件支持:** 引用k3classevents.dll, kfo10.dll, ms ado 2.8 库** 添加插件接口对象:Private WithEvents m_BillInterface As K3ClassEvents.BillEvent** 添加一个公开接口, 以便初始化插件接口对象:Public Function Init(ByVal obj As Object)On Error Resume NextSet m_BillInterface = objDebug.Assert Err.Number = 0End Function** 插件本身的初始化:Private WithEvents m_BillInterface As K3ClassEvents.BillEventPublic Sub Show(ByVal obj As Object)If UCase$(TypeName(obj)) = "BILLEVENT" ThenSet m_BillInterface = objElseMsgBox "Interface not supported!"End IfEnd Sub这样, 当单据加载时, 会初始化插件; 而插件又将单据接口对象委托给控件,我们可以在控件中处理单据的种种事件,获取单据信息。

K3+Cloud+BOS开发培训_插件开发1-接口

K3+Cloud+BOS开发培训_插件开发1-接口

架构模型动态表单领域模型插件开发步骤定义插件类(参照继承体系);分析业务定义重载方法;引用相关组件(参照组件引用规则);重载方法编码;设置编译路径,编译组件;打开IDE设计器,配置插件;动态表单视图接口IDynamicFormViewIDynamicFormViewService2个重要的属性BusinessInfoLayoutInfo界面元素访问1、访问菜单this.View.GetMainBarItemthis.View.GetBarItem2、访问表单控件this.View.GetControlthis.View.GetView3、访问字段this.View.GetFieldEditorthis.View.LockFieldthis.View.SetFormTitle 4、执行操作ShowFormUpdateViewInvokeFieldUpdateService动态表单模型接口IDynamicFormModelIDynamicFormModelService属性BusinessInfoDataObject数据操作CreateNewDataCreateNewEntryRowInsertEntryRowGetEntryCurrentRowIndexLoadReferenceDataGetValueGetEntityDataObject动态表单插件命名空间:Kingdee.BOS.Core.DynamicForm.PlugInIDynamicFormViewPlugIn IDynamicFormModelPlugIn加载机制OnInitializeCreateNewData / AfterCreateNewData BeforeBindData / AfterBindDataBeforeClosed表单操作BeforeDoOperation / AfterDoOperationBeforeF7Select / AfterF7Select TabItemSelectedChange表单事件BarItemClickEntryBarItemClickToolBarItemClickButtonClickEntityRowClickEntityRowDoubleClickEntryButtonCellClick模型访问操作BeforeUpdateValueBeforeDeleteRowAfterDeleteRow单据插件(基础资料插件)继承自动态表单接口IBillViewPlugInOnBillInitialize参数BillOpenParameterIBillModelPlugInBeforeSave / AfterSaveBeforeSubmit / AfterSubmit列表插件继承自动态表单接口IListViewPlugInOnListInitialize参数ListOpenParameterAfterGetDataFormatCellValueIListModelPlugInPrepareFilterParameterBatchCopyData过滤条件插件接口IListFilterViewIListFilterModelFilterObjectQuickFilterObjectIsolationOrgIdGetFilterField事件OnParseSettingFireBeforeBindFilterMetadataFireBeforeSelectTreeNodeScheme服务插件命名空间:Kingdee.BOS.Core.DynamicForm.PlugIn抽象类:AbstractOperationServicePlugIn继承体系:(继承自抽象类)Kingdee.BOS.Core.DynamicForm.PlugIn.AbstractOperationServicePlugIn接口IOperationServicePlugInBeforeExecuteOperationTransactionAfterExecuteOperationTransactionBeginOperationTransactionEndOperationTransaction校验服务IOperationServicePlugInOnAddValidatorsSaveValidator : AbstractValidatorValidate表单插件和列表插件继承层次表单单据叙事簿基础资料插件针对对象动态表单单据基础资料Kingdee.BOS.Core.dllAbstractBillPlugIn 接口AbstractBillPlugIn的ViewPlugin插件接口OnBillInitialize 视图模型初始化事件AfterBindData 绑定数据后事件处理接口BeforeF7Select 基础资料弹出前事件BeforeClosed 窗口关闭前事件BarItemClick 菜单单击事件处理扩展接口AfterBarItemClick 菜单单击事件后BeforeDoOperation 操作调用前事件AfterDoOperation 操作调用完成后事件ButtonClick 按钮单击事件AfterButtonClick 按钮单击后事件ListViewClick 列表项目单击事件TreeNodeClick 树控件单击事件TreeDragDrop 树控件拖拽EntityRowClick 分录行单击事件AbstractBillPlugIn的ModelPlugIn接口动态表单数据模型插件编程接口定义了数据模型扩展允许通过接口处理数据,以实现特定业务需求AbstractBillPlugIn插件方法CreateNewData 数据模型创建实体对象事件AfterCreateNewData 数据模型创建实体对象完成后事件BeforeUpdateValue 数据更新前事件DataChanged 数据改变后事件CreateNewEntryRow 创建分录行事件BeforeDeleteRow 删除分录行事件AfterDeleteRow 删除分录后事件叙事簿插件接口AbstractListPlugIn 的ViewPlugIn接口序时簿视图插件编程模型接口定义了序时簿视图模型扩展允许通过接口处理视图,实现特定业务需求ListInitialize 视图模型初始化事件AfterGetData 完成取数后事件FormatCellValue 列表格式化接口BeforeButtonClick 按钮和菜单单击前事件AfterButtonClick 按钮和菜单单击后事件CellDbButtonClick 单元格双击事件AbstractListPlugIn 的ModelPlugIn接口序时簿数据模型插件编程接口定义了序时簿数据模型扩展允许通过接口处理数据,以实现特定业务需求PrepareFilterParameter 准备过滤条件CreateFilterEditorControl 触发创建过滤条件控件事件BatchCopyData 复制单据事件AfterBatchCopyData 复制单据完毕事件服务插件插件特性IOperationServicePlugin一般会附加校验器运行于App层事务保护插件针对对象操作Kingdee.BOS.Core.dll服务插件AbstractOperationServicePlugIn应用服务器插件与业务数据更新操作在一个事务执行校验器插件AbstractValidator在服务插件的OnAddValidators加入AbstractOperationServicePlugIn插件方法OnPreparePropertys 可以定制加载指定字段到实体里OnAddValidators 添加自定义数据校验器BeforeExecuteOperationTransaction 执行操作事务前事件AfterExecuteOperationTransaction 执行操作事务后事件BeginOperationTransaction 调用操作事件前触发(支持事务) EndOperationTransaction 调用操作事件完毕(支持事务)表单构建插件继承层次表单单据叙事簿基础资料插件针对对象动态表单单据基础资料Kingdee.BOS.Core.dllAbstractDynamicWebFormBuilderPlugIn插件方法CreateControl 构建界面元素事件AfterCreateControl 构建界面元素后事件CreateMainMenu 构建菜单事件AfterCreateMainMenu 构建菜单后事件表单插件调用过程由控制器创建视图、模型、插件代理初始化视图、模型由插件服务注册到插件代理插件代理初始化插件加载数据,通知插件创建数据,创建表单数据包表单操作插件服务调用代理,发送事件通知插件代理调用插件,执行事件返回执行结果View对象属性this.View(View接口)this.View的常用属性BusinessInfo(界面业务对象元数据)LayoutInfo(布局元数据)Model(动态表单模型接口)OpenParameter(页面调用时传入的参数)方法GetFieldEditor (获取界面控件对象)UpdateView(重新更新界面数据及状态)ShowMessage(显示信息)更改界面控件状态this.View. GetFieldEditor示例:/// <summary>/// 设置金额列精度/// </summary>/// <param name="iScale"></param>/// <param name="strField"></param>private void SetColumnScale(short iScale, string strField){his.View.GetFieldEditor<DecimalFieldEditor>(strField, -1).Scale = iScale; }更新界面数据和状态this.View.UpdateView示例:/// <summary>/// 字段修改事件函数重载/// </summary>public override void DataChanged(DataChangedEventArgs e){switch (e.Key.ToUpper()){case "FPARENTDEPTID": //组织隶属方案和上级部门变化,重新生成部门全称this.Model.SetValue(“FFullName”, GetFullName(e.Key));this.View.UpdateView(“FFullName”);break;}}显示信息this.View.ShowMessage示例:if (e.CurParentId == "0"){this.View.ShowMessage(“请先选择顶层组织。

用C++Builder开发金蝶K3BOS单据插件

用C++Builder开发金蝶K3BOS单据插件

用C++Builder写K/3 单据插件一、BOS 单据插件的开发1、新建一个工程,在“New Items”窗口中选择“ActiveX Library”,然后点击“OK”按钮。

这样系统会生成一个具有类型库的DLL工程,如下图所示:2、先保存工程,然后向工程中引入K3ClassEvents.dll类型库信息,类型库信息没有必要每个工程都重新引入,我们可以把引入类型库信息时生成的_tlb.cpp文件和_ocx.cpp文件保存到一个单独的文件夹中,以后新建工程时直接向工程中添加这些文件即可,在引入类型库信息时一定要选中“Generate Component Wrappers ”选项以生成包装组件,这样我们就不需要单独处理事件槽,本文档就是以这种方法进行插件编写,步骤如下:3、类型库单元文件生成后向工程中添加生成的单元文件,由于在引入K3ClassEvents 类型库时,其依赖的相关类型库信息也会同时引入,因此向工程中添加单元文件时也需添加相关的单元文件,需向工程中添加的单元文件见下图:4、向工程中添加自动化对象类,一般来说每个自动化对象类对应一张BOS单据并响应单据上的事件,添加自动化类的过程如下图所示:5、在接口实现类中定义TBillEvent*类型的私有变量,以用来实例化单据事件对象,示例代码如下:6、向类的实现接口中增加成员函数Show,其参数类型见下图:Show函数是最重要的函数,由VB调用因此Show函数在函数声明中须放在Public部分,在Show函数中主要完成三件工作:实例化单据接口对象,将实例化对象的事件与事件处理函数进行关联,将实例化对象连接到Show函数传递过来的派发接口上,Show函数的示例代码如下图:7、在实现函数类中增加折构函数,以便在单据关闭时调用折构函数删除创建的实例对象,释放内存。

折构函数的示例代码如下:8、事件处理函数的原型可以在”K3ClassEvents_OCX.cpp”中找到,复制过来稍做调整即,相关示例代码如下:9、最后编译工程生成.dll插件,先将插件在Windows注册表中注册然后在BOS集成开发工具的单据中引用即可。

K3+Cloud+BOS开发培训_插件开发1-接口

K3+Cloud+BOS开发培训_插件开发1-接口

架构模型动态表单领域模型插件开发步骤定义插件类(参照继承体系);分析业务定义重载方法;引用相关组件(参照组件引用规则);重载方法编码;设置编译路径,编译组件;打开IDE设计器,配置插件;动态表单视图接口IDynamicFormViewIDynamicFormViewService2个重要的属性BusinessInfoLayoutInfo界面元素访问1、访问菜单this.View.GetMainBarItemthis.View.GetBarItem2、访问表单控件this.View.GetControlthis.View.GetView3、访问字段this.View.GetFieldEditorthis.View.LockFieldthis.View.SetFormTitle 4、执行操作ShowFormUpdateViewInvokeFieldUpdateService动态表单模型接口IDynamicFormModelIDynamicFormModelService属性BusinessInfoDataObject数据操作CreateNewDataCreateNewEntryRowInsertEntryRowGetEntryCurrentRowIndexLoadReferenceDataGetValueGetEntityDataObject动态表单插件命名空间:Kingdee.BOS.Core.DynamicForm.PlugInIDynamicFormViewPlugIn IDynamicFormModelPlugIn加载机制OnInitializeCreateNewData / AfterCreateNewData BeforeBindData / AfterBindDataBeforeClosed表单操作BeforeDoOperation / AfterDoOperationBeforeF7Select / AfterF7Select TabItemSelectedChange表单事件BarItemClickEntryBarItemClickToolBarItemClickButtonClickEntityRowClickEntityRowDoubleClickEntryButtonCellClick模型访问操作BeforeUpdateValueBeforeDeleteRowAfterDeleteRow单据插件(基础资料插件)继承自动态表单接口IBillViewPlugInOnBillInitialize参数BillOpenParameterIBillModelPlugInBeforeSave / AfterSaveBeforeSubmit / AfterSubmit列表插件继承自动态表单接口IListViewPlugInOnListInitialize参数ListOpenParameterAfterGetDataFormatCellValueIListModelPlugInPrepareFilterParameterBatchCopyData过滤条件插件接口IListFilterViewIListFilterModelFilterObjectQuickFilterObjectIsolationOrgIdGetFilterField事件OnParseSettingFireBeforeBindFilterMetadataFireBeforeSelectTreeNodeScheme服务插件命名空间:Kingdee.BOS.Core.DynamicForm.PlugIn抽象类:AbstractOperationServicePlugIn继承体系:(继承自抽象类)Kingdee.BOS.Core.DynamicForm.PlugIn.AbstractOperationServicePlugIn接口IOperationServicePlugInBeforeExecuteOperationTransactionAfterExecuteOperationTransactionBeginOperationTransactionEndOperationTransaction校验服务IOperationServicePlugInOnAddValidatorsSaveValidator : AbstractValidatorValidate表单插件和列表插件继承层次表单单据叙事簿基础资料插件针对对象动态表单单据基础资料Kingdee.BOS.Core.dllAbstractBillPlugIn 接口AbstractBillPlugIn的ViewPlugin插件接口OnBillInitialize 视图模型初始化事件AfterBindData 绑定数据后事件处理接口BeforeF7Select 基础资料弹出前事件BeforeClosed 窗口关闭前事件BarItemClick 菜单单击事件处理扩展接口AfterBarItemClick 菜单单击事件后BeforeDoOperation 操作调用前事件AfterDoOperation 操作调用完成后事件ButtonClick 按钮单击事件AfterButtonClick 按钮单击后事件ListViewClick 列表项目单击事件TreeNodeClick 树控件单击事件TreeDragDrop 树控件拖拽EntityRowClick 分录行单击事件AbstractBillPlugIn的ModelPlugIn接口动态表单数据模型插件编程接口定义了数据模型扩展允许通过接口处理数据,以实现特定业务需求AbstractBillPlugIn插件方法CreateNewData 数据模型创建实体对象事件AfterCreateNewData 数据模型创建实体对象完成后事件BeforeUpdateValue 数据更新前事件DataChanged 数据改变后事件CreateNewEntryRow 创建分录行事件BeforeDeleteRow 删除分录行事件AfterDeleteRow 删除分录后事件叙事簿插件接口AbstractListPlugIn 的ViewPlugIn接口序时簿视图插件编程模型接口定义了序时簿视图模型扩展允许通过接口处理视图,实现特定业务需求ListInitialize 视图模型初始化事件AfterGetData 完成取数后事件FormatCellValue 列表格式化接口BeforeButtonClick 按钮和菜单单击前事件AfterButtonClick 按钮和菜单单击后事件CellDbButtonClick 单元格双击事件AbstractListPlugIn 的ModelPlugIn接口序时簿数据模型插件编程接口定义了序时簿数据模型扩展允许通过接口处理数据,以实现特定业务需求PrepareFilterParameter 准备过滤条件CreateFilterEditorControl 触发创建过滤条件控件事件BatchCopyData 复制单据事件AfterBatchCopyData 复制单据完毕事件服务插件插件特性IOperationServicePlugin一般会附加校验器运行于App层事务保护插件针对对象操作Kingdee.BOS.Core.dll服务插件AbstractOperationServicePlugIn应用服务器插件与业务数据更新操作在一个事务执行校验器插件AbstractValidator在服务插件的OnAddValidators加入AbstractOperationServicePlugIn插件方法OnPreparePropertys 可以定制加载指定字段到实体里OnAddValidators 添加自定义数据校验器BeforeExecuteOperationTransaction 执行操作事务前事件AfterExecuteOperationTransaction 执行操作事务后事件BeginOperationTransaction 调用操作事件前触发(支持事务) EndOperationTransaction 调用操作事件完毕(支持事务)表单构建插件继承层次表单单据叙事簿基础资料插件针对对象动态表单单据基础资料Kingdee.BOS.Core.dllAbstractDynamicWebFormBuilderPlugIn插件方法CreateControl 构建界面元素事件AfterCreateControl 构建界面元素后事件CreateMainMenu 构建菜单事件AfterCreateMainMenu 构建菜单后事件表单插件调用过程由控制器创建视图、模型、插件代理初始化视图、模型由插件服务注册到插件代理插件代理初始化插件加载数据,通知插件创建数据,创建表单数据包表单操作插件服务调用代理,发送事件通知插件代理调用插件,执行事件返回执行结果View对象属性this.View(View接口)this.View的常用属性BusinessInfo(界面业务对象元数据)LayoutInfo(布局元数据)Model(动态表单模型接口)OpenParameter(页面调用时传入的参数)方法GetFieldEditor (获取界面控件对象)UpdateView(重新更新界面数据及状态)ShowMessage(显示信息)更改界面控件状态this.View. GetFieldEditor示例:/// <summary>/// 设置金额列精度/// </summary>/// <param name="iScale"></param>/// <param name="strField"></param>private void SetColumnScale(short iScale, string strField){his.View.GetFieldEditor<DecimalFieldEditor>(strField, -1).Scale = iScale; }更新界面数据和状态this.View.UpdateView示例:/// <summary>/// 字段修改事件函数重载/// </summary>public override void DataChanged(DataChangedEventArgs e){switch (e.Key.ToUpper()){case "FPARENTDEPTID": //组织隶属方案和上级部门变化,重新生成部门全称this.Model.SetValue(“FFullName”, GetFullName(e.Key));this.View.UpdateView(“FFullName”);break;}}显示信息this.View.ShowMessage示例:if (e.CurParentId == "0"){this.View.ShowMessage(“请先选择顶层组织。

金蝶K3BOS插件开发常见技巧

金蝶K3BOS插件开发常见技巧

1、如何在工具栏上添加多级审核的按钮?在m_BillInterface_MenuBarInitialize 事件里添加如下代码即可.Set oTool = m_BillInterface.MenuBar.BOST001s("mnuEditMultiCheck")With oTool.Caption =" 多级审核".ToolTipText =" 多级审核".Description =" 多级审核".BeginGroup = False.ToolPicture = App.Path + "\Checker.bmp".SetPicture 0, vbButtonFaceEnd WithSet oBand = oMenuBar.BOSBands("BandToolBar")oBand.BOSTools.InsertBefore "mnuFilePrint", oTool ' 将菜单对象插入指定工具栏2、如何在显示一张Bos单据的同时给它赋值?要想在显示Bos单据的同时给它赋值,关键是在显示前要购建m_Billinterface 的data包,这样在显示这张同据的时候,程序会解析data包,并将里面的值赋到单据界面上来.Dim dctData As kfo.DictionaryDim datasrv as objectDim oTableinfo as objectSet DataSrv = m_BillInterface.K3Lib.CreateK3Object("K3ClassTpl.DataSrv") DataSrv.ClassTypeID = lClassTypeID 'lClassTypeID 需要弹出单据的IDSet oTableInfo = DataSrv.TableInfoSet dctData = DataSrv.GetEmptyBill ' 然后将当前单据数据包中需要的数据填充到dctdata的对应字段’在以上语句执行后,dctdata( "page2")里只有一行表结构(即表体只有一行)'赋表头的值dctData("Page1")(oTableinfo("map")("FText"))("FFLD") = m_BillInterface.GetFieldValue("FText")dctData("Page1")(oTableinfo("map")("FDeptID"))("FFLD") = m_BillInterface.GetFieldValue("FDeptID", -1, Enu_ValueType_FFLD)dctData("Page1")(oTableinfo("map")("FDeptID"))("FFND") = m_BillInterface.GetFieldValue("FDeptID", -1, Enu_ValueType_FFND)dctData("Page1")(oTableinfo("map")("FDeptID"))("FDSP") = m_BillInterface.GetFieldValue("FDeptID", -1, Enu_ValueType_FDSP)'赋表体的值Dim oPage2 As ObjectFor i = 1 To m_BillInterface.Data("Page2").UBound - 1Set oPage2 = dctData("Page2")(1).CloneAlldctData("Page2").Add oPage2 '添力口至U dcDatadctData("Page2")(i + 1)(oTableinfo("map")("FIndex2"))("FFLD") = i + 1更改分录号NextFor i = 1 To m_BillInterface.Data("Page2").UBound' 物料FItemIDdctData("Page2")(i)(oTableinfo("map")(" FItemID "))("FFLD")m_BillInterface.GetFieldValue("FItemID ", i, Enu_ValueType_FFLD) dctData("Page2")(i)(oTableinfo("map")(" FItemID "))("FDSP")m_BillInterface.GetFieldValue("FItemID ", i, Enu_ValueType_FDSP) dctData("Page2")(i)(oTableinfo("map")(" FItemID "))("FFND")m_BillInterface.GetFieldValue("FItemID ", i, Enu_ValueType_FFND)' 物料名称fbasepropertydctData("page2")(i)(oTableinfo("map")("fbaseproperty"))("FFLD")m_BillInterface.GetFieldValue("fbaseproperty", i, Enu_ValueType_FFLD)dctData("Page2")(i)(oTableinfo("map")("fbaseproperty"))("FDSP")m_BillInterface.GetFieldValue("fbaseproperty", i, Enu_ValueType_FDSP)dctData("Page2")(i)(oTableinfo("map")("fbaseproperty"))("FFND")m_BillInterface.GetFieldValue("fbaseproperty", i, Enu_ValueType_FFND)' 计量单位FUnitIDdctData("Page2")(i)(oTableinfo("map")(" FUnitID "))("FFLD")m_BillInterface.GetFieldValue("FUnitID ", i, Enu_ValueType_FFLD) dctData("Page2")(i)(oTableinfo("map")(" FUnitID "))("FDSP")m_BillInterface.GetFieldValue("FUnitID ", i, Enu_ValueType_FDSP) dctData("Page2")(i)(oTableinfo("map")(" FUnitID "))("FFND")m_BillInterface.GetFieldValue("FUnitID ", i, Enu_ValueType_FFND)' 数量FQtydctData("Page2")(i)(oTableinfo("map")("FQty"))("FFLD") m_BillInterface.GetFieldValue("fqty", i, Enu_ValueType_FFLD)NextSet obj = CreateObject("K3SingleClassBill.ClassInfoManager")With obj.datasrv = datasrv.ISCheckRight = True .Show , , , dctData End With3、如何在插件中实现选单的功能?调用Bos单据m_BillInterface.BillCtl.DoSelBill lClassTypeID'( 原单的ClassTypeID)调用工业单据m_BillInterface.BillCtl.DoSe101dBill lClassTypeID '( 原单的ClassTypeID)4、在插件中以新增、修改和查看方式翻开另一单据,********************************************’功能:显示B0环据,显示的方式为新增、修改和浏览'参数:lClassTypeID 一显示B0环据的ID ' '********************************************Private Sub ShowBill(ByVal lClassTypeID As Long)Dim oDataSrv As ObjectDim oBill As ObjectOn Error GoTo err_ctrSet oDataSrv = m_BillInterface.K3Lib.CreateK/30bject("K3ClassTpl.DataSrv") oDataSrv.ClassTypeID = lClassTypeIDSet oBill = CreateObject("K3SingleClassBill.ClassInfoManager") With oBill.DataSrv = oDataSrv.ISNetControl = True.I SCheckRight = True .Show ′********************** 'Show 参数类型' 第一个参数Optional ByVal lID As Long = 0 ;描述修改或查看的单据ID' 第二个参数Optional ByVal bShowGroup As Boolean = False ;如是根底资料时, 是否显示分组' 第三个参数Optional ByVal BillStatus As Long = Enu_BillStatus_New ;显示方式0—查看;1—新增;2—修改' 第四个参数Optional ByVal dctData As KFO.Dictionary ' 单据初始值\**********************End WithSet oDataSrv = NothingSet oBill = NothingExit Sub err_ctr:Set oDataSrv = Nothing Set oBill = NothingEnd Sub5、显示BOS序时簿并返回选中的值,********************************************’功能:显示BO时时簿并返回选中的值'参数:lClassTypeID 一显示BO环据的ID ' '********************************************Private Function ShowListByReturn(ByVal lClassTypeID As Long) As Object Dim oDataSrv As Object Dim objLookup As ObjectOn Error GoTo err_ctrSet oDataSrv = m_BillInterface.K3Lib.CreateK3Object("K3ClassTpl.DataSrv")oDataSrv.ClassTypeID = lClassTypeID If oDataSrv.showfilter ThenSet objLookup = CreateObject("K3ClassLookUp.BillLookUp") objLookup.ClassTypeID = lClassTypeID Set objLookup.DataSrv = oDataSrvobjLookup.LookupSet ShowListByReturn = objLookup.VectReturnEnd IfSet oDataSrv = NothingSet objLookup = NothingExit Function err_ctr:Set oDataSrv = NothingSet objLookup = NothingEnd Function6、如何在序事簿中得到选中行的记录集值?Dim vectSelect as kfo.vectorDim rs as adodb.recordsetSet vectSelect=m_Listinterface. GetSelectedBillInfoSet rs=m_Listinterface.datasrv. GetBillDetail(vectSelect(1)("FID"))7、将当前单据转化为另一单据,并无界面保存数据,********************************************’功能:将当前单据转化为另一单据,并无界面保存数据'参数:lClassTypeID 一显示BO环据的ID'********************************************Private Sub NoUISaveBill(ByVal lClassTypeID As Long)Dim oDataSrv As ObjectDim oTableInfo As ObjectDim oBill As ObjectDim oData As ObjectDim oSrv As ObjectDim oPage2 As ObjectDim i As LongOn Error GoTo err_ctrSet oDataSrv = m_BillInterface.K3Lib.CreateK3Object("K3ClassTpl.DataSrv")oDataSrv.ClassTypeID = lClassTypeIDSet oTableInfo = oDataSrv.TableInfoSet oData = oDataSrv.GetEmptyBillFor i = 1 To m_BillInterface.Data("Page2").UBound - 1Set oPage2 = oData("Page2")(1).CloneAlloData("Page2").Add oPage2 ' 添加到dcDataoData("Page2")(i + 1)("_-0001_FIndex2")("FFLD") = i + 1 ' 更改分录号NextFor i = 1 To m_BillInterface.Data("Page2").UBoundoData("Page2")(i)(oTableInfo("map")("FItemID"))("FFLD")=m_BillInterface.GetFieldValue("FItemID", i, Enu_ValueType_FFLD) oData("Page2")(i)(oTableInfo("map")("FItemID"))("FFND")=m_BillInterface.GetFieldValue("FItemID", i, Enu_ValueType_FFND) oData("Page2")(i)(oTableInfo("map")("FItemID"))("FDSP")=m_BillInterface.GetFieldValue("FItemID", i, Enu_ValueType_FDSP)NextSet oSrv = CreateObject("K3MClass.BillUpdate")i = oSrv.Save(MMTS.PropsString, oDataSrv.ClassType, oDataSrv.ClassTypeEntry,oDataSrv.TableInfo, oData, oDataSrv.dctLink)Set oDataSrv = NothingSet oBill = NothingExit Suberrctr:MsgBox Err.DescriptionSet oDataSrv = NothingSet oBill = NothingEnd Sub【备注】1、K/3 BOS保存方法Save的参数描述:'Public Function Save(ByVal sDsn As String, _' ByVal dctClassType As KFO.Dictionary, _' ByVal vctClassTypeEntry As KFO.Vector, _' ByVal dctTableinfo As KFO.Dictionary, _' ByRef dctData As KFO.Dictionary, _' ByVal dctLinks As KFO.Dictionary) As Long'/********************************************************************/'/*描述:单据保存'/*参数:'/*@ dctClassType KFO.Dictionary 单据整体信息模板'/*@ dctData KFO.Dictionary 单据数据包'/*@ dctLink KFO.Dictionary 选单关系模板,无选单为Nothing'/*@ dctTableInfo KFO.Dictionary 单据字段模板信息'/*@ sDsn String K/3 标准数据库连接串'/*@ vctClassTypeEntry KFO.Vector单据体模板信息'/*备注:'/********************************************************************/2、使用此方法时插件要添加MMTS8、如何在插件中获取当前系统字符连接串?一、连接串获取方式:(注意不支持调试,调试的话可以用实际连接串代替)Private Declare Function GetCurrentProcessId Lib "kernel32" Alias "GetCurrentProcessID"() As Long ’获取连接串Public Function GetPropsString() As StringDim lProc As LongDim spmMgr As ObjectIProc = GetCurrentProcessIdSet spmMgr = CreateObject("PropsMgr.ShareProps")GetPropsString = spmMgr.GetProperty(lProc, "PropsString")End Function.、需要申请MMTS.bas的源彳弋码,还需要申请ICKDListener的接口.另外,如果需要调试程序,就还需要申请KDMain的源代码.。

K3BOS插件开发入门教程

K3BOS插件开发入门教程

BOS插件开发入门教程本文主要针对初学者,介绍BOS插件开发与制作的基本流程与步骤,为入门所用。

以一个简单的插件开发需求为例:比如想在新开发的BOS单据上,增加一个自定义菜单按钮,按钮标题为“My BOS MenuBarButton”,位置放在编辑菜单下的驳回审核按钮之后,在工具栏上的退出按钮之前;当点击该自定义按钮时弹出提示框“Hello,This Is My First BOS Bill InterFace!”。

针对此需求,让我们一起看看如何一步一步通过BOS插件来实现:【第一步】:由于插件是基于VB语言开发,首先需要在装有金蝶K3的环境下安装Microsoft Visual Basic 6.0(简称VB6.0)开发工具。

【第二步】:安装好VB6.0之后,在开始菜单中找到VB6.0的快捷方式,打开VB之后将出现以下界面(如图1):图1在此界面一定要选择“ActiveX DLL”,再点击“打开”按钮,然后会进入以下工作界面(如图2):图2注意界面右上方的“插件开发向导”按钮。

有的环境可能会出现打开VB6.0后并没有“金蝶k/3-BOS”菜单的问题,解决方法如下:找到K3安装目录下的ADDIN文件夹,将此文件夹下的两个DLL文件(K3BOSPLUGINSADDIN.dll 和K3GLParaConsolePlugin.dll),在CMD命令行中用RegSvr32命令进行注册。

例如:K3安装目录为C:\Program Files\Kingdee\K3ERP,那么在cmd中输入命令就为:regsvr32 "C:\Program Files\Kingdee\K3ERP\ADDIN\K3BOSPLUGINSADDIN.dll"regsvr32 "C:\Program Files\Kingdee\K3ERP\ADDIN\K3GLParaConsolePlugin.dll"回车提示注册成功之后,再重新打开VB就会出现“金蝶k/3-BOS”菜单,如果还没出现需要再重启下电脑解决。

K3+Cloud+BOS单据转换插件开发

K3+Cloud+BOS单据转换插件开发

AbstractConvertPlugIn插件接口选单执行顺序
✓ OnFieldMapping(FieldMappingEventArgs e) 根据字段映射,向目标字段填充值
✓ OnAfterFieldMapping(AfterFieldMappingEventArgs e) 所有字段映射完成
✓ OnCreateLink(CreateLinkEventArgs e) 关联关系(Link表)创建前
✓ OnCreateDrawTarget(CreateTargetEventArgs e) 根据源数据分组结果,初始化创建目标单据数据包(选单执行)
✓ OnBeforeFieldMapping(BeforeFieldMappingEventArgs e) 根据字段映射,向目标字段填充值之前
如何开发插件 – 接口结构
AbstractConvertPlugIn插件接口下推执行顺序
✓ OnFieldMapping(FieldMappingEventArgs e) 根据字段映射,向目标字段填充值
✓ OnAfterFieldMapping(AfterFieldMappingEventArgs e) 所有字段映射完成
✓ OnCreateLink(CreateLinkEventArgs e) 关联关系(Link表)创建前
✓ OnAfterCreateLink(CreateLinkEventArgs e) 关联关系(Link表)创建完成
✓ AfterConvert(AfterConvertEventArgs e) 单据转换后事件
目录
概述 单据转换插件 示例
如何开发插件 – 代码示例
✓ 单据转换插件 ✓ OnInitVariable(InitVariableEventArgs e)初始化事件 ✓ InitVariableEventArgs ✓ e.SourceBusinessInfo源单据BusinessInfo ✓ e. TargetBusinessInfo目标单据BusinessInfo ✓ e. Rule单据转换规则 ✓ 示例:

K3BOS开发流程及接口介绍

K3BOS开发流程及接口介绍

版权所有 ©1993-2009 金蝶软件(中国)有限公司
P20
K/3 BOS 高级应用开发

(一)单据流转

选单关联关系
复制 关联复制 钩稽 强制钩稽

字段关联属性
修改 计算列 选单一致 过滤 处理选单值更新事件(Action:适用于选单值更新事件?) 仅复制


单据接口
示例
Set oDatasrv = CreateObject("K3ClassTpl.DataSrv") oDatasrv.ClassTypeID = lClassTypeID Set obj = CreateObject("K3SingleClassBill.ClassInfoManager") With obj .DataSrv = oDatasrv .ISNetControl = False .ISCheckRight = False .Show lBillID, , BillStatus bOK = .IsOK End With

版权所有 ©1993-2009 金蝶软件(中国)有限公司
P2
目录



K/3 BOS概述 K/3 BOS单据开发流程 K/3 BOS相关接口调用 K/3 BOS高级应用开发 K/3 BOS参考资料 Q/A
版权所有 ©1993-2009 金蝶软件(中国)有限公司
P3
K/3 BOS 概述

版权所有 ©1993-2009 金蝶软件(中国)有限公司
P23
K/3 BOS 业务应用开发

单据转换流程

温馨提示:
当BOS单据与工业单据关联目标单单据体上的物料、计量单位 、数量、基本计量单位数量必须有对应的源单字段,否则关联 时可能会出现错误。 控制字段、扣减字段、关闭字段必须位于同一单据体、头上。 关联内码来源:关联复制关系时有效,指源单内码的来源。

金蝶K3 BOS培训—IDE

金蝶K3 BOS培训—IDE
单选框,默认为不选中,表示此字段的值由源单 复制到目的单之后,用户不可以对复制过来的值 进行修改。
BOS设计器演示—资料 处理值更新事件 选中此项(打上勾)表示在源单上的值被 复制到目的单之后,如果目的单上的字段 的值更新事件有相应的动作内容,这些动 作内容将会执行,例如复制物料之后自动 携带物料对应的属性如物料的规格型号等, 如果值更新事件需要更新的字段已经在选 单时被复制过来了,其值将以复制过来的 值为准,不再进行更新。
类型
单据编号
所在页
单据头 单据头 单据头 单据头 单据头 单据头 单据体 单据体
特殊要求
单位
单价 数量 金额
基础资料—单位
单价 数量 金额
单据体
单据体 单据体 单据体 金额=数量*单价 金额=数量*单价
BOS设计器演示 添加系统、子系统 BOS销售订单、BOS销售出库单定义
讲解单据、字段属性 讲解常用字段 讲解核算项目类别、核算项目和组合字段 讲解数量、单价和小数、整数字段 讲解审核人和审核日期
BOS设计器演示—资料 扣减字段
源单上的数量型字段,用于记录由某一源单生成 的一张或者多张目标单上所有的对应的目标字段 的数值的总和。此字段用户应该不能直接修改, 系统会自动在生成目标单时对此字段进行反写。 此字段可以是任意的数值型字段,并且不能是关 联关系中已经指定的源单字段(逻辑错误),也 不能和控制字段相同。但是扣减字段必须和控制 字段位于相同的单据头/单据体上。
BOS设计器演示—资料 仅复制 如果关联关系是“钩稽”或者“强制钩 稽”,当一个源单字段同时关联到目标单 的两个及以上字段时,只能有一个字段作 为钩稽字段,其他字段都是复制字段,需 要在此打上勾,详见钩稽字段设置界面的 说明。

K3+Cloud+BOS插件开发培训

K3+Cloud+BOS插件开发培训

动态表单视图 • 2个重要的属性 • BusinessInfo • LayoutInfo
动态表单视图
• 界面元素访问
• 访问菜单
• this.View.GetMainBarItem • this.View.GetBarItem
动态表单视图
• 界面元素访问
• 访问表单控件
• this.View.GetControl • this.View.GetView
动态表单插件 • 表单事件 • BarItemClick • EntryBarItemClick • ToolBarItemClick
动态表单插件 • 表单事件 • ButtonClick • EntityRowClick • EntityRowDoubleClick • EntryButtonCellClick
动态表单插件 • 模型访问操作 • BeforeUpdateValue • BeforeDeleteRow • AfterDeleteRow
动态表单插件 • 单据插件 • 基础资料插件
• 列表插件 • 过滤条件插件
单据插件 • 继承自动态表单
单据插件
• 接口 • IBillViewPlugIn
动态表单插件 Kingdee.BOS.Core. DynamicForm.PlugIn.AbstractDynamicFormPlugIn Nhomakorabea列表插 件
列表插件 Kingdee.BOS.Core. List.PlugIn.AbstractListPlugIn
动态表单插件 • 接口
• IDynamicFormViewPlugIn • IDynamicFormModelPlugIn
动态表单插件 • 加载机制 • OnInitialize • CreateNewData / AfterCreateNewData • BeforeBindData / AfterBindData

K3 Cloud V1.0 BOS 技术开发培训_插件开发环境部署

K3 Cloud V1.0 BOS 技术开发培训_插件开发环境部署

④内部公开 请勿外传
P7
系统部署角色
角色 开发
oud BOS IDE、MS 浏览器(IE 8/9) VS2010开发业务对象。 微软Silverlight 5.0 用浏览器或WPF客户端访问应用服务器,调试成果 K/3 Cloud BOS IDE MS VS2010
K/3 Cloud V1.0 插件开发环境部署
版权所有©1993-2012金蝶软件(中国)有限公司
④内部公开 请勿外传
④ 内部公开 请勿外传
目 录
1 2 3 4 5
环境准备
系统部署角色
推荐的部署方式
开发环境部署
功能调试
④内部公开 请勿外传
环境准备
K/3 Cloud V1.0 产品
– – – – – K/3 Cloud 插件开发,需要基于K/3 Cloud产品 插件依赖组件来源于K/3 Cloud K/3 Cloud 提供IDE设计器,完成业务对象设计 业务对象设计成果存储(存储与业务数据库) 基于K/3 Cloud运行环境,进行调试
开发环境部署
K/3 Cloud产品部署
– K/3 Cloud 产品其他角色的部署,请参与K/3 Cloud 产品部署文档 – 本文仅介绍开发机器的部署
部署K/3 Cloud 应用服务器
– K/3 Cloud应用服务器部署过程,参见产品部署 – 请记住应用服务器站点部署目录,通常为
• C:\Program Files\Kingdee\K3Cloud
– IIS进程为w3wp.exe
在K/3 Cloud中打开待调试单据,进行调试
④内部公开 请勿外传
P15
感謝
ขอบคุณ
ありがとう
terima kasih

金蝶K3 BOS培训—IDE

金蝶K3 BOS培训—IDE

单据头 空运、陆运、海运
单据头
单据头
单据头
单据体
单据体
单据体
单据体 单据体 单据体
金额=数量*单价 金额=数量*单价
练习— BOS销售出库单
字段
单据编号 交货日期 客户 制单人 审核人 审核日期 仓库 物料代码 物料名称 单位 单价 数量 金额
类型
单据编号 日期 基础资料—客户 制单人 基础资料—用户
K/3 BOS培训—IDE
常州金蝶开发部 谷牧
Байду номын сангаас
提纲
• 开发流程 • IDE讲解 • 练习 • 一些问题处理
K/3 BOS标准开发流程
K/3 BOS
需求 分析
业务 抽象
业务对 象定义
流程 定义
定制 插件
报表 定义
部署
发布
提纲
• 开发流程 • IDE讲解 • 练习 • 一些问题处理
案例— BOS销售订单
所在页
特殊要求
单据头
单据头
单据头
单据头
单据头
单据头
单据体
单据体
单据体
单据体 单据体 单据体
金额=数量*单价 金额=数量*单价
BOS设计器演示
添加系统、子系统 BOS销售订单、BOS销售出库单定义
讲解单据、字段属性 讲解常用字段 讲解核算项目类别、核算项目和组合字段 讲解数量、单价和小数、整数字段 讲解审核人和审核日期
单据头
单据头
单据头
单据体
单据体
单据体
单据体 单据体 单据体
金额=数量*单价 金额=数量*单价
案例— BOS销售出库单
字段
单据编号 交货日期 客户 制单人 审核人 审核日期 物料代码 物料名称 单位 单价 数量 金额

第二节 K3 BOS 详解

第二节  K3 BOS 详解
客户价值
无须开发即能实现权限管理,大 大提升个性化业务应用的安全性
P12
版权所有 ©1993-2006 金蝶软件(中国)有限公司
操作管理
主要功能
对BOS基础资料或业务单据的操 作可以进行个性化定义
客户价值
BOS基础资料或单据生成时自动 生成一系列的操作如新增、修改、 删除等,可以重新定义操作的名 称或增加新的操作内容,以满足 特定的业务需求。
审核 流程 定义
单据 流程 定义
报表 定义
插件 开发
部署
发 布
运行已定义好的功能 将已配置信息发布到应用环境中
在K/3可主灵视界活化面的的上定定可义义以检业按斤务角业单色务据配报置表已开发的功能
可视化的定义检斤业务流程
P6
版权所有 ©1993-2006 金蝶软件(中国)有限公司
K/3 BOS的三大产品特性
封装K/3附件服务,若业务对象添加了 此字段类型,其值将自动显示对应业 务对象的附件数量
P28
版权所有 ©1993-2006 金蝶软件(中国)有限公司
业务单据定义-属性定义_字段通用属性1
属性类型 外观控制
属性名 繁体名称 简体名称 英文名称 边框 边框颜色 标题宽度 标题颜色 文本颜色 字体 宽度 高度 上 左
前置字段 可录入








有字段参与组合 是




说明
单据的单据体,可以是单分录,也可 以是多分录。
提供单据编号服务,用户可以设置单 据编号规则及自动填补断号等选项。
业务对象的制单人字段,其值为当前 系统登录用户。
对K/3系统用户信息的封装,如审核人 字段。

K3EBOS插件

K3EBOS插件

版权所有 ©1993-2008 金蝶软件(中国)有限公司
P21
公共辅助对象K3Lib

在BillInterface和ListInterface对象中 聚合了K3Lib对象 通过应用程序代理对象中的K3Lib 可直接获得帐套和用户的相关信息 例如:
lUserID = m_erID;
版权所有 ©1993-2008 金蝶软件(中国)有限公司
P5
插件编程原理—插件原理

插件原理静态图如下:
版权所有 ©1993-2008 金蝶软件(中国)有限公司
P6
插件编程原理—插件原理
结合上图,可以对插件原理简单描述如下: 以事件驱动为基础: 捕获事件: 通过应用程序代理对象(ApplicationProxy) 应用程序代理对象:就是对应用程序(宿主程序)本身的包 装
版权所有 ©1993-2008 金蝶软件(中国)有限公司
P2
插件开发环境介绍

eBOS插件开发环境



金蝶K/3 v11.0以上的版本 目前需要安装客户关系管理系统才会有eBOS组件 操作系统: Microsoft Windows 2000 Server以上版本 推荐采用 Server 类操作系统作为开发、调试操作系统 开发平台:Microsoft Visual Studio 2005 数据库: Microsoft SQL Server 2000/2005
P16
插件之应用程序代理对象

function Alert; 说明:显示对话框 RefreshList; 说明:请求刷新序时簿 GetSession; 说明:请求获得缓存对象 SendEmail; 说明:请求发送邮件 SendMessage; 说明:请求发送消息 SendSMS; 说明:请求发送短信 ShowBill 说明:请求显示单据

金蝶K3插件编程

金蝶K3插件编程

金蝶K3插件编程6.1 插件编程概述K/3运行平台为K/3 BOS开发的业务单据提供了稳定、标准的运行环境,但为了实现客户更加个性化的需求和保持K/3 BOS架构的开放性,还为客户化开发提供了插件编程机制,通过K/3 BOS业务单据和序时簿事件代理组件,把业务单据处理的关键事件接口抛出,客户可以接收这个事件代理组件,并对组件的抛出事件编程,从而实现个性化的事件处理方法,对K/3 BOS运行平台进行有效的扩充和扩展。

6.2 插件编程原理6.2.1 什么是插件插件(Plug-Ins)是一种专门为某一软件设计、用于功能扩充的程序。

通过插件可以实现客户个性化的定制。

插件不只是被动的接受宿主程序调用,更可以控制宿主程序以完成一些特定功能。

6.2.2 插件原理插件原理静态图如下所示:结合上图,可以对插件原理简单描述如下:以事件驱动为基础:插件(Plug-Ins)响应主程序发出的事件,在事件处理过程中完成功能。

捕获事件: 通过应用程序代理对象(ApplicationProxy)应用程序代理对象:就是对应用程序(宿主程序)本身的包装包含很多事件,在应用程序(Application),也就是宿主程序中激发事件,在插件引用这个对象就可以响应这些事件。

相当于架在应用程序和插件之间的桥梁。

本身不包含任何业务功能,仅仅用来发出事件和传递数据。

结合宿主程序(Application)、程序代理(ApplicationProxy)和插件(Plug-Ins)之间的关系,可以画出如下的插件原理动态图:6.2.3 应用程序代理对象(ApplicationProxy)在插件编程的机制中,最关键的还是应用程序代理对象(ApplicationProxy),因为这个对象相当于宿主程序和插件之间的桥梁,宿主程序的代言人,本身并不包括任何业务功能仅仅用来发出事件和传递数据。

它发出的事件越多,则插件可以扩展的功能点越多,对宿主程序的控制则越灵活;为何不直接引用应用程序本身,而要代理搭桥?首先,一个应用程序由多个组件(包)组成,如果插件要直接引用它们来捕获事件也可以的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档