(最新)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”菜单,如果还没出现需要再重启下电脑解决。

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