金蝶K3 BOS插件开发手册
金蝶二次开发 K3插件开发 指导手册(初稿)(优选.)
金蝶 K/3 BOS V10.1插件开发指导手册金蝶软件(中国)有限公司2004.9目录打个小广告:金蝶二次开发技术交流QQ群①群 30121062 已满②群 28307002 未满③群待定大家共同学习共同进步1开发基础 (3)1.1插件开发概念 (3)1.2插件开发配置 (3)2开发指南 (4)2.1创建一个金蝶K/3 BOS 插件 (4)2.1.1创建一个金蝶K/3 BOS 客户端事件插件 (4)2.1.2创建一个金蝶K/3 BOS 中间层事件插件 (9)2.2自定义金蝶K/3 BOS 标准菜单、工具栏 (11)2.3添加新的菜单、工具栏 (12)2.4添加新的事件、方法 (12)2.5访问中间层和数据库 (12)2.6保存数据 (12)3参考 (13)3.1客户端插件事件、方法、属性 (13)3.2中间层插件事件 (13)3.3判断业务对象引用存储过程 (13)3.4金蝶K/3 BOS数据库结构 (13)4示例 (13)4.1XXX (13)1开发基础1.1插件开发概念金蝶K/3运行平台为金蝶K/3 BOS开发的业务单据提供了稳定、标准的运行环境,但为了实现客户更加个性化的需求和保持金蝶K/3 BOS架构的开放性,还为客户化开发提供了插件编程机制:通过金蝶K/3 BOS业务单据和序时簿事件代理组件,把业务单据处理的关键事件接口抛出,客户可以接收这个事件代理组件,并对组件的抛出事件编程,从而实现个性化的事件处理方法,对金蝶K/3 BOS运行平台进行有效的扩充和扩展。
需要注意的是:a) 当前版本的金蝶K/3 BOS支持的插件,仅应用在金蝶K/3的GUI版本,不支持WEB版本;b) 当前版本的金蝶K/3 BOS支持采用Microsoft Visual Basic 编写的插件,采用的类型推荐为ActiveX DLL 类型;c) 当前版本的金蝶K/3 BOS支持的插件分为客户端事件插件、中间层事件插件;在本手册中,我们所有关于金蝶K/3 BOS插件的定义、描述、示例等,都符合上述3点特征。
金蝶K3 V12.3 BOS 客户化开发工具包用户手册
通过客户呼叫中心服务(Call Center),提供全面、周到的服务,快速解答客户应 用问题。
9. 个性化服务
针对企业个性化的需求,我们提供"量身定制"服务,使用一切资源,包括和合作 伙伴一道为您提供全面的应用解决方案。
10. 便利服务
金蝶不仅是解决方案的提供者,也是相关附属产品的提供者。我们提供的便利服 务不仅省去您选择的苦恼,还有利于保证相关产品和系统的兼容性和一致性。
5. 现场支持服务
我们的资深专业人员面对面地和您沟通,在运行现场对问题进行研究分析,使问 题迅速得到解决。
6. CRM 服务
借助客户关系管理系统(金蝶 EAS-CRM)我们建立了客户综合信息管理库,能够 快速地解决客户的问题并保留历史记录,以便提供长期、持续、高效的服务。
7. CSP 服务支持
金蝶公司融合多年客户服务经验与国外先进的管理思想,提炼出客户常用的和最 需要的服务为一体的 CSP 服务。它是以金蝶公司先进的科技手段和专业化的服务队伍 为依托,在业界领先推出的项目完整、功能全面的系统性服务产品。
-2-
金蝶 K/3 产品设计思想
金蝶K/3 以企业基础管理为核心设计思想,对覆盖产品(服务)价值链的业务的流 程进行全面的计划、组织、协调,及对业务的有效处理和有效控制的管理。针对战略 企业管理的特点,强调对企业基础数据、基本业务流程、内部控制、知识管理、员工 行为规范等管理,通过丰富的工具与方法有机整合并提供贯穿战略企业管理全过程所 需的决策信息,实时监控战略执行过程中的问题,帮助企业创造持续增长的核心竞争 力。
11. 合作联盟服务
我们和其它 IT 领域先导型的企业进行战略合作,为您提供企业管理咨询、系统集 成、相关知识培训等全方位的服务。在此,您不仅能得到金蝶的服务资源,也能以优 惠的条件享受金蝶合作伙伴的资源。
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 标准功能实现 的个性化需求
开发环境 • 插件开发环境
金蝶 K3 BOS 插件开发指导手册(初稿)
金蝶 K/3 BOS V10.1插件开发指导手册金蝶软件(中国)有限公司2004.9目录1开发基础 (3)1.1插件开发概念 (3)1.2插件开发配置 (3)2开发指南 (4)2.1创建一个金蝶K/3 BOS 插件 (4)2.1.1创建一个金蝶K/3 BOS 客户端事件插件 (4)2.1.2创建一个金蝶K/3 BOS 中间层事件插件 (9)2.2自定义金蝶K/3 BOS 标准菜单、工具栏 (11)2.3添加新的菜单、工具栏 (12)2.4添加新的事件、方法 (12)2.5访问中间层和数据库 (12)2.6保存数据 (12)3参考 (13)3.1客户端插件事件、方法、属性 (13)3.2中间层插件事件 (13)3.3判断业务对象引用存储过程 (13)3.4金蝶K/3 BOS数据库结构 (13)4示例 (13)4.1XXX (13)1开发基础1.1插件开发概念金蝶K/3运行平台为金蝶K/3 BOS开发的业务单据提供了稳定、标准的运行环境,但为了实现客户更加个性化的需求和保持金蝶K/3 BOS架构的开放性,还为客户化开发提供了插件编程机制:通过金蝶K/3 BOS业务单据和序时簿事件代理组件,把业务单据处理的关键事件接口抛出,客户可以接收这个事件代理组件,并对组件的抛出事件编程,从而实现个性化的事件处理方法,对金蝶K/3 BOS运行平台进行有效的扩充和扩展。
需要注意的是:a) 当前版本的金蝶K/3 BOS支持的插件,仅应用在金蝶K/3的GUI版本,不支持WEB版本;b) 当前版本的金蝶K/3 BOS支持采用Microsoft Visual Basic 编写的插件,采用的类型推荐为ActiveX DLL 类型;c) 当前版本的金蝶K/3 BOS支持的插件分为客户端事件插件、中间层事件插件;在本手册中,我们所有关于金蝶K/3 BOS插件的定义、描述、示例等,都符合上述3点特征。
1.2插件开发配置开发、调试金蝶K/3 BOS插件,需要安装:a) 金蝶K/3 客户端部件b) 金蝶K/3 BOSc) Microsoft Visual Basic(推荐使用v6.0 版本,并且安装SP5)另外,如果要通过插件在K/3 BOS标准单据、序时簿界面上增加菜单、工具条,还需要安装:d) Data Dynamics ActiveBar ActiveX v1.0.6.5同时,我们推荐:a) 采用Microsoft Windows 2000 Server(及以上版本)等Server类操作系统作为开发、调试操作系统;b) 在该操作系统上安装Microsoft SQL Server 2000数据库;c) 在该操作系统上安装金蝶K/3 客户端部件、金蝶K/3 中间层部件、金蝶K/3BOS;这样,我们就可以同时开发、调试金蝶K/3 BOS客户端事件插件和金蝶K/3 BOS中间层插件了。
第二节 K3 BOS 详解
适应多种语言环境
主要功能
能够定义中文简体、中文繁体、 英语等三种语言操作界面
客户价值
适应国际化企业管理的需要 适应不同人员的语言习惯与操作 方式
P18
版权所有 ©1993-2006 金蝶软件(中国)有限公司
部署与发布
主要功能
把业务功能发布至主控台或生 成安装包
客户价值
可以生成主控台菜单,统一访问 的方式 生成的安装包可以部署到其他账 套,实现开发环境与运行环境的 分离
特殊的文本类型,提供业务对 象的备注说明。
提供复选功能。
提供下拉列表字段支持,下拉 列表的值提供手工指定与SQL查 询获取两种形式。
提供图形的显示。
版权所有 ©1993-2006 金蝶软件(中国)有限公司
业务单据定义-字段类别2
分类
元素类型
基础资料类 基础资料
前置字段
无
可录入
是
基础资料属性 基础资料
P13
版权所有 ©1993-2006 金蝶软件(中国)有限公司
多级审核流程、消息定义
主要功能
对业务单据可以提供12级的多 级审核流程,审核消息可以发送 至指定的用户、用户组或默认用 户
客户价值
满足给客户顺序、会签两种多级 审批业务需求,便于客户对业务 进行分级管理和业务监控。 消息驱动多级审核流程,可以简 化审批的工作量并降低操作的复 杂性
前置字段 可录入
无
是
无
否
无
否
无
否
有字段参与组合 是
无
否
无
否
说明
单据的单据体,可以是单分录,也可 以是多分录。
提供单据编号服务,用户可以设置单 据编号规则及自动填补断号等选项。
用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集成开发工具的单据中引用即可。
金蝶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开发流程及接口介绍
版权所有 ©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插件编程
金蝶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),因为这个对象相当于宿主程序和插件之间的桥梁,宿主程序的代言人,本身并不包括任何业务功能仅仅用来发出事件和传递数据。
它发出的事件越多,则插件可以扩展的功能点越多,对宿主程序的控制则越灵活;为何不直接引用应用程序本身,而要代理搭桥?首先,一个应用程序由多个组件(包)组成,如果插件要直接引用它们来捕获事件也可以的。
K3BOS插件开发常见技巧
K3BOS插件开发常见技巧以下是为大家整理的K3bos插件开发常见技巧的相关范文,本文关键词为K3bos,插件,开发,常见,技巧,何在,工具栏,添加,多级,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在教育文库中查看更多范文。
1、如何在工具栏上添加多级审核的按钮?在m_billInterface_menubarInitialize事件里添加如下代码即可。
setoTool=m_billInterface.menubar.bosTools(\withoTool.caption=\多级审核\.ToolTipText=\多级审核\.Description=\多级审核\.begingroup=False.Toolpicture=App.path+\.setpicture0,vbbuttonFaceendwithsetoband=omenubar.bosbands(\oband.bosTools.Insertbefore\将菜单对象插入指定工具栏2、如何在显示一张bos单据的同时给它赋值?要想在显示bos单据的同时给它赋值,关键是在显示前要购建m_billinterface的data包,这样在显示这张同据的时候,程序会解析data包,并将里面的值赋到单据界面上来。
DimdctDataAskfo.DictionaryDimdatasrvasobjectDimoTableinfoasobjectsetDatasrv=m_billInterface.K3Lib.createK3object(\Datasrv.classTypeID=lc lassTypeID'lclassTypeID需要弹出单据的IDsetoTableInfo=Datasrv.TableInfosetdctData=Datasrv.getemptybill'然后将当前单据数据包中需要的数据填充到dctdata的对应字段'在以上语句执行后,dctdata(“page2”)里只有一行表结构(即表体只有一行)'赋表头的值dctData(\m_billInterface.getFieldValue(\dctData(\m_billInterface.getFieldValue(\dctData(\m_billInterface.getFieldValue(\dctData(\m_billInterface.getFieldValue(\'赋表体的值Dimopage2Asobject====Fori=1Tom_billInterface.Data(\setopage2=dctData(\dctData(\添加到dcDatadctData(\更改分录号nextFori=1Tom_billInterface.Data(\'物料FItemIDdctData(\FItemID\m_billInterface.getFieldValue(\dctData(\FItemID\m_billInterface.getField Value(\dctData(\FItemID\m_billInterface.getFieldValue(\'物料名称fbasepropertydctData(\m_billInterface.getFieldValue(\dctData(\m_billInterface.getFiel dValue(\dctData(\m_billInterface.getFieldValue(\'计量单位FunitIDdctData(\FunitID\m_billInterface.getFieldValue(\dctData(\FunitID\m_bill Interface.getFieldValue(\dctData(\FunitID\m_billInterface.getFieldValue( \'数量FQtydctData(\m_billInterface.getFieldValue(\nextsetobj=createobject(\withobj.datasrv=datasrv==========.IscheckRight=True.show,,,dctDataendwith3、如何在插件中实现选单的功能?调用bos单据m_billInterface.billctl.DoselbilllclassTypeID'(原单的classTypeID)调用工业单据m_billInterface.billctl.DoseloldbilllclassTypeID'(原单的classTypeID)4、在插件中以新增、修改和查看方式打开另一单据'********************************************'功能:显示bos单据,显示的方式为新增、修改和浏览'参数:lclassTypeID—显示bos单据的ID''********************************************privatesubshowbill(byVallclassTypeIDAsLong)DimoDatasrvAsobjectDimobillAsobjectonerrorgoToerr_ctrsetoDatasrv=m_billInterface.K3Lib.createK/3object(\oDatasrv.classTypeI D=lclassTypeIDsetobill=createobject(\withobill.Datasrv=oDatasrv.Isnetcontrol=True.IscheckRight=True.show'**********************'show参数类型'第一个参数optionalbyVallIDAsLong=0;描述修改或查看的单据ID'第二个参数optionalbyValbshowgroupAsboolean=False;如是基础资料时,是否显示分组'第三个参数optionalbyValbillstatusAsLong=enu_billstatus_new;显示方式0—查看;1—新增;2—修改'第四个参数optionalbyValdctDataAsKFo.Dictionary'单据初始值'**********************endwithsetoDatasrv=nothingsetobill=nothingexitsuberr_ctr:setoDatasrv=nothingsetobill=nothingendsub5、显示bos序时簿并返回选中的值'********************************************'功能:显示bos序时簿并返回选中的值'参数:lclassTypeID—显示bos单据的ID''********************************************privateFunctionshowListbyReturn(byVallclassTypeIDAsLong)Asobject DimoDatasrvAsobjectDimobjLookupAsobjectonerrorgoToerr_ctrsetoDatasrv=m_billInterface.K3Lib.createK3object(\oDatasrv.classTypeID =lclassTypeIDIfoDatasrv.showfilterThensetobjLookup=createobject(\objLookup.classTypeID=lclassTypeIDsetobjL ookup.Datasrv=oDatasrvobjLookup.LookupsetshowListbyReturn=objLookup.VectReturnendIfsetoDatasrv=nothingsetobjLookup=nothingexitFunctionerr_ctr:setoDatasrv=nothingsetobjLookup=nothingendFunction6、如何在序事簿中得到选中行的记录集值?Dimvectselectaskfo.vectorDimrsasadodb.recordsetsetvectselect=m_Listinterface.getselectedbillInfosetrs=m_Listinterface.datasrv.getbillDetail(vectselect(1)(\7、将当前单据转化为另一单据,并无界面保存数据'********************************************'功能:将当前单据转化为另一单据,并无界面保存数据'参数:lclassTypeID—显示bos单据的ID'********************************************privatesubnouIsavebill(byVallclassTypeIDAsLong)DimoDatasrvAsobjectDimoTableInfoAsobjectDimobillAsobjectDimoDataAsobjectDimosrvAsobj ectDimopage2AsobjectDimiAsLongonerrorgoToerr_ctrsetoDatasrv=m_billInterface.K3Lib.createK3object(\oDatasrv.classTypeID =lclassTypeIDsetoTableInfo=oDatasrv.TableInfosetoData=oDatasrv.getem ptybillFori=1Tom_billInterface.Data(\setopage2=oData(\oData(\添加到dcDataoData(\更改分录号nextFori=1Tom_billInterface.Data(\oData(\m_billInterface.getFieldValue(\oData(\m_billInterface.getFieldValue(\oData(\以下是为大家整理的K3bos插件开发常见技巧(2)的相关范文,本文关键词为K3bos,插件,开发,常见,技巧,何在,工具栏,添加,多级,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在教育文库中查看更多范文。
金蝶BOS开发指南(KDSpread)
金蝶BOS 开发指南开发指南——————KDSpread KDSpread目录1系统概述 (3)1.1产品功能概述 (3)1.2产品特性介绍 (4)2基本概念及应用指南 (4)2.1基本概念 (4)2.2应用指南 (4)2.2.1实例化KDSpread (4)2.2.2获取表页控制信息 (4)2.2.3保护机制 (5)2.2.4视图缩放和网格线 (5)2.2.5获取Range对象 (5)2.2.6融合 (6)2.2.7设置行格式 (6)2.2.8设置列格式 (7)2.2.9增加删除行列 (7)2.2.10增加删除单元格 (7)2.2.11设置单元格格式 (8)2.2.12设置单元格内容 (8)2.2.13启用数据编辑器 (8)2.2.14导入导出 (8)2.2.15视图控制 (9)1系统概述Microsoft Excel是最成功的专业软件之一,全球无数用户逐步积累着它的应用经验,它的展现和操作模式是业界同类软件的事实标准。
金蝶KDSpread控件是商业分析部界面组耗时数年制作的类Excel交互方式的Java图形控件,它有如下功能:支持多表页快速切换,支持同时操作多表页支持窗口拆分和窗格冻结,便于观察和编辑多页数据支持细粒度保护机制,支持定制的保护策略支持视图缩放,垂直水平网格线是否显示等细粒度的界面控制支持行列、单元格格式,条件格式,批注,丰富显示效果支持数据显示和编辑,而且可以灵活的更换绘制器(Renderer)和编辑器(Editor)支持Undo、Redo支持单元格的融合和拆分支持查找、替换支持多种文件格式的导入导出方式,可以与PDF、Excel等文件单向或双向交换数据支持打印预览和精确打印、用户再分页支持图表和嵌入式对象支持分组汇总、数据筛选支持超链接和斜线表头支持公式注册和批量取数目前KDSpread在如下软件系统中被广泛应用:�预算报表系统�合并报表系统;�扩展报表系统;�部分二次开发的模块;1.1产品功能概述KDSpread最大程度尊重了客户的Microsoft Excel既有使用经验和习惯,提供给客户最熟悉的界面展现和操作方式,功能涵盖了数据展现、编辑、图表、打印、数据分析、保护、视图控制等,为客户程序员提供了丰富、直观而紧凑的接口,代码产品经过了EAS530、EAS 540、EAS590、EAS600数个版本的应用,功能和稳定性均经受住了客户的考验。
K3 BOS插件调试方法
Step 1:
写好插件,并且编译成为dll.
在编写插件时,你不必从头开始,因为BOS已经为您提供了很好的工具—“BOS插件开发向导”,可以为你生成你的插件的整体代码框架,如下图:
一般情况下你打开VB,新建好工程后,插件向导会出现在你的工具栏上,
如果你的工具栏上看不到的话,可以从VB的菜单“Add-Ins” “Add-In Manager”上进行设置,因为插件向导本身是VB的插件,设置界面如下:
选中“K/3 BOS PlugIns Maker VB AddIn”,将Load Behavior中的前两项选中,如上图,这样,下次你启动VB时就可以在工具栏和菜单栏上看到插件开发向导了。
PS:如果以上都不成功,那么可能是你插件向导的组件没有正确安装或注册,在K3ERP目录下的ADDIN文件夹下找到“K3BOSPLUGINSADDIN.dll”,并用regsvr32重新注册一下即可。
Step 2:
1,在想要调试的地方打好断点,如下图:
2,设置工程的兼容性为二进制兼容,如下图:
3,按下“F5”,出现如下图,点击“确定”即可
Step 3 :
1,在BOS单据中正确配置插件,如下图:
在配置时注意区分插件的类型,如果配置了不正确的类型,那么加载单据时就会报“Automateion错误”
2,保存单据,按“F5”测试单据,在单据上执行相应的操作。
程序在你下的断点处停了下来,这样你就可以进行插件的调试了,如下图:。
金蝶云K3 Cloud V5.0_BOS套打设计器用户手册
还可以通过菜单栏【表格】-【数据表格向导】实现数据源绑定,可参见常用功能章节。
2.3.4
下面介绍使用数据表格常用的特性功能:
(1)数据表向导:
以向导的方式快速实现数据表格的数据源绑定、数据分组、数据统计及字段布局。向导一共四步。
第一步,点击菜单栏【表格】-【数据表格向导】,弹出数据表格向导,选择数据表绑定的数据源,数据源下拉列表选择明细信息:
几个重要的属性:
字体:设置内容显示的字体样式,系统导入条码字体后,可以实现条码输出;
前景颜色:设置内容文字的颜色;
背景颜色:设置单元格底色;
语言:如果绑定的数据源是多语言字段,可以选择输出语言类型,包括中文、英文、繁体、全部语言,默认是根据系统语言自动判断输出。
图层:模板中添加层控件后,选择文本所属的图层。
一个模板,包含了一个页对象。页随套打模板一同创建和删除。页是模板的设计区域。页的大小为纸张大小减去四边距后的尺寸。通过工具栏【页面设置】打开下图“页面设置”窗口进行编辑。
图2-1页面设置
2.2
金额对象,支持绑定数据源和固定文本,支持设置小写金额和大写金额,支持中英文大写格式,支持“SAYDOLLAR…ONLY”、“人民币…整”等前后缀字样,提供了对静态和动态币别的支持金额对象属性。
数据行属性中可以设置为报表型和套打型2种类型,如下图:
报表型即为不限制一页打多少行数据,根据实际的数据量以及可打印的空间由执行引擎来决定一页打多少行,此时也可以设置为“行高自适应”,行高根据内容自动调整。
套打型即为设置每页固定打多少行,例如我们做凭证时可以设置为每页打8行,即“每页重复次数”为8,当一个凭证的分录例如有14行,则会打2页,第一页打8行,第二页打6行数据和2行空行,此时也可以设置“不打印空行”,则最后一页的2行空行不会打印。
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)开发工具。
附开发工具下载地址:/liangchan/1935.html【第二步】:安装好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 BOS开发手册
金蝶K/3 BOS开发手册目录1 前言 (1)1.1K/3BOS概述 (1)1.2K/3BOS客户化开发工具 (1)1.3K/3BOS典型开发案例 (3)1.3.1 业务应用场景 (3)1.3.2 业务分析 (3)1.3.3 步骤1:定义基本资料 (4)1.3.4 步骤2:定义单据 (7)1.3.5 步骤3:定义业务流程 (9)1.3.6 步骤4:业务单据发布 (10)2 界面设计工具 (12)2.1功能概述 (13)2.2字段管理 (15)2.3数据来源 (17)2.4字段类型 (20)2.5项目的属性 (21)2.6事件处理过程 (23)3 流程设计工具 (27)3.1单据关系 (27)3.2流程状态 (27)3.3操作步骤 (28)4 报表设计工具 (30)5 业务发布 (30)5.1引出和执行脚本 (30)5.2主控台部署 (32)6 插件编程 (34)6.1插件编程概述 (34)6.2插件编程原理 (34)6.2.1 什么是插件 (34)6.2.2 插件原理 (34)6.2.3 应用程序代理对象(ApplicationProxy) (36)6.2.4 对插件支持的开发步骤 (37)6.3客户端插件编程 (37)6.3.1 插件公共入口方法 (37)6.3.2 单据事件代理组件BillEvent (38)6.3.3 序时簿事件代理组件ListEvents (47)6.4中间层插件编程 (50)6.4.1 单据保存前中间层插件 (50)6.4.2 单据保存后中间层插件 (51)6.4.3 单据删除前中间层插件 (52)6.4.4 单据删除后中间层插件 (52)6.5判断业务对象引用存储过程编写 (53)6.5.1 存储过程标准定义 (53)6.5.2 业务对象和存储过程关联 (54)6.5.3 存储过程实例 (55)7 K/3 BOS数据库结构 (55)7.1ICC LASS A CTION (56)7.2ICC LASS C ONDITION (57)7.3ICC LASS C ONST (57)7.4ICC LASS G ROUP I NFO (57)7.5ICC LASS L INK (58)7.6ICC LASS L INK E NTRY (59)7.7ICC LASS P ROFILE (59)7.8ICC LASS P ROFILE E NTRY (59)7.9ICC LASS T ABLE I NFO (60)7.10ICC LASS T YPE (62)7.11ICC LASS T YPE E NTRY (63)1 前言1.1 K/3 BOS概述金蝶BOS(Business Operation System)——金蝶业务操作系统,它使用先进、开放、可伸缩的技术体系,面向企业快速成长的业务需求,协同合作伙伴拓展管理业务,通过科学的工具和流程对企业建模进行全程监控。
金蝶K3 BOS二次开发
任务2 字段定义
介绍:(1)字段分类; (2)字段属性分类; (3)字段特殊属性定义; (4)物理表定义; (5)单据关键字段定义; (6)名称、描述定义; (7)尺寸属性;
任务3 事件定义及单据运行测试
操作:(1)计算定义公式的值并填写到指定列;
(2)合法性检查; (3)携带当前字段相关属性到指定列; (4)表达式为真/假时显示/隐藏字段; (5)表达式为真/假时锁定/解锁字段;
金蝶K/3 12.1 BOS 应用开发
李武韬 办公室:SC514
项目一 金蝶K/3 BOS概述
面向服务架构(Service-Oriented Architecture,简称SOA) :一个组件模型, 它将应用程序的不同功能单元(称为服务) 通过这些服务之间定义良好的接口和契约联 系起来。 例如:海澜之家更换制造商
任务4 权限定义
功能权限、字段权限定义
任务5 其它单据定义功能
1.业务对象操作定义:操作管理(改变适用 场景,新增操作),操作消息管理 2.界面布局定义 3.窗体风格定义 4.录入顺序定义
上机练习:单据定义 项目十一 上机操作 练习一 外贸合同 练习二 生产领料结算单 练习三 生产工艺单 其他:
服务被抽象为统一的模型,形成业务服务库。
BOS使用开放的平台及技术标准。 业务服务完整的生命周期。
思考和讨论: 如何理解BOS? 如何通过BOS理解更为抽象的SOA?
任务2 BOS开发流程
K/3 BOS
需求 分析
业务 抽象
业务对 象定义
流程 定义
定制 插件
报表 定义
部 署
项目四 K/3 BOS集成开发平台
任务1 K/3 BOS集成开发平台功能介绍 演示及操作练习
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
K/3 BOS插件开发手册K/3 BOS插件开发手册(版本:V12.1)金蝶软件(中国)有限公司BOS系统部K/3 BOS系统部目录概述 (1)COM (1)K3ClassEvents的对象模型 (1)使用说明 (1)K3ClassEvents的对象 (2)ListEvents对象参考 (3)DataSrv 属性 (3)EnableListFillRowEvents 属性 (4)K3Lib 属性 (5)List 属性 (6)ListEntrySort 属性 (6)ListFilterString 属性 (7)ListHeadSort 属性 (7)MenuBar 属性 (7)MultiCheckMgr 属性 (8)RsId 属性 (8)ShowMode 属性 (9)ShowMsg 属性 (9)DeleteBill 函数 (9)GetDataFldByKey 函数 (10)GetDataFld 函数 (11)GetCurrentSelRowInfo 函数 (12)GetSelectedBillInfo 函数 (13)LoadSelectedBill 函数 (14)RefreshList函数 (15)SenderMessage 函数 (15)UpdateNormalFld 函数 (16)UpdateNormalFldByKey 函数 (17)RefreshMenu 函数 (17)AfterBatchMultiCheck事件 (18)AfterBusinessCheck 事件 (18)AfterBusinessCheckEx 事件 (18)AfterCopyBillCreateData 事件 (19)AfterDeleteBill 事件 (19)AfterMergeCopyBill事件 (20)AfterMultiCheck 事件 (20)AfterMultiCheckEx 事件 (21)AfterSelList 事件 (21)AfterUnBusinessCheck 事件 (21)AfterUnBusinessCheckEx 事件 (22)AfterUnMultiCheck 事件 (22)BeforeMultiCheck 事件 (23)BeforeMultiCheckEx 事件 (24)BeforePrintBill 事件 (24)BeforeSenderMessage 事件 (25)BeforRefreshToolBar 事件 (25)BusinessCheck 事件 (26)BusinessCheckEx 事件 (26)FinishMultiCheck 事件 (26)FinishMultiCheckEx 事件 (27)ListFillRow 事件 (28)ListRowSelected 事件 (29)MenuBarClick 事件 (30)MenuBarInitialize 事件 (30)MultiCheck 事件 (30)MultiCheckEx 事件 (31)PrintSuccessful事件 (32)StartMultiCheck 事件 (32)StartMultiCheckEx 事件 (33)UnBusinessCheck 事件 (33)UnBusinessCheckEx 事件 (34)UnMultiCheck 事件 (34)UnMultiCheckEx 事件 (35)ReMultiCheck 事件 (35)ReMultiCheckEx 事件 (36)ReUnMultiCheck 事件 (36)ReUnMultiCheckEx 事件 (37)BaseClassEvent对象参考 (38)BrowseCtl 属性 (38)DataSrv 属性 (38)EnableListFillRowEvents 属性 (38)InsertNewRowAndFillOption属性 (40)K3Lib 属性 (41)ListActiveBar 属性 (41)ListEntrySort 属性 (41)ListFilterString 属性 (42)ListHeadSort 属性 (42)MenuBar 属性 (42)RsClassGroup 属性 (43)RsId 属性 (43)GetActiveCtl 函数 (43)GetSelectedClassID 函数 (44)GetSelectedClassType 函数 (45)GetSelectedItemID 函数 (45)IsSearchState 函数 (47)PitchItemByID 函数 (48)SelectClassGroupByID 函数 (48)SenderMessage 函数 (49)SetStatus函数 (50)RefreshClassGroups 方法 (50)RefreshListByClassGroupID 方法 (51)RefreshSelectedClassGroup 方法 (51)RefreshSelectedClassGroupList 方法 (52)AfterGetData 事件 (52)BeforePrintBill 事件 (53)BeforeSenderMessage 事件 (53)ClassGroupSelected 事件 (54)DeleteBillSucessful事件 (55)ListFillRow 事件 (55)ListRowSelected 事件 (57)MenuBarClick 事件 (57)MenuBarInitialize 事件 (58)RefreshList 事件 (58)BillEvent对象参考 (59)AccessoryTypeID 属性 (59)BillCtl 属性 (59)BillEntrys 属性 (59)BillHeads 属性 (60)BillHeight 属性 (60)BillName 属性 (60)BillStatus 属性 (61)BillWidth 属性 (61)CancelPrintControl属性 (62)ClassType 属性 (62)ClassTypeEntry 属性 (62)ClassTypeKey 属性 (63)Data 属性 (63)DataSrv 属性 (63)EntryPrimaryKey 属性 (64)FID 属性 (64)InsertNewRowAndFillOption属性 (65)IsDoAction 属性 (65)IsDoActionData 属性 (65)K3Lib 属性 (66)LayerCount 属性 (66)LayerNames属性 (66)MenuBar 属性 (67)ObjectID 属性 (68)ObjectType 属性 (68)OriginalFieldValue属性 (68)PrimaryKey 属性 (69)ReSaveSuccess 属性 (69)rsBillID 属性 (69)ShowType 属性 (70)TableInfo 属性 (70)TableName 属性 (70)TaskID 属性 (71)ShowMsg 属性 (71)BatchToDoActions函数 (71)DeleteEntryData 函数 (72)GetActiveCtl 函数 (73)GetActiveField 函数 (74)GetCommonControl函数 (74)GetDataFld 函数 (75)GetDataFldbyKey 函数 (76)GetFieldInfoByKey 函数 (77)GetDynamicCtlByKey函数 (78)GetFieldValue 函数 (78)GetToolIndex 函数 (79)GetVariable函数 (80)InsertNewRowAndFill 函数 (81)IsChange 函数 (82)IsFileNeedFilter 函数 (82)LockBill 函数 (83)RefreshBill 函数 (83)SenderMessage 函数 (84)SetDecimal 函数 (84)SetFieldSumValue函数 (85)SetFieldValue 函数 (85)SetSumDecimal 函数 (87)SetText 函数 (87)SetTypeFloatMax 函数 (88)SetTypeFloatMin 函数 (88)ShowHideField 函数 (89)ShowHideGrid 函数 (90)Sum 函数 (90)UpdateLookFld 函数 (91)UpdateNormalFld 函数 (91)DoAction 方法 (92)IsDoActionByKey 方法 (92)RemoveRow 方法 (93)SaveBill 方法 (94)SetActiveTab方法 (94)SetBillFormCaption 方法 (95)SetCaption 方法 (95)SetGridMaxRows方法 (96)SetStatus 方法 (96)SetActiveCell 方法 (97)SetBillWindowState方法 (97)SetRowsPerRequest方法 (98)SetStateStampPicture方法 (98)SetStatusBarInfo方法 (99)SetVariable函数 (99)SizeBillControl方法 (100)AddNewRow 事件 (100)AfterBusinessCheck 事件 (101)AfterBusinessCheckEx 事件 (101)AfterCopyBill 事件 (101)AfterDeleteRow 事件 (102)AfterDoAction 事件 (102)AfterFillRow 事件 (103)AfterFirstNewBill 事件 (103)AfterInputBillSetSumData 事件 (104)AfterLoadBill 事件 (104)AfterLoadBillSetSumData 事件 (104)AfterLoadDynamicCtl事件 (105)AfterMergeCopyBill 事件 (105)AfterMultiCheck 事件 (105)AfterMultiCheckEx 事件 (106)AfterNewBill 事件 (106)AfterNewEmptyData 事件 (107)AfterSave 事件 (107)AfterSelBill 事件 (107)AfterSelBillBeforeFillData 事件 (108)AfterStockQuery事件 (108)AfterUnBusinessCheck 事件 (108)AfterUnBusinessCheckEx 事件 (108)AfterUnMultiCheck 事件 (109)AfterUnMultiCheckEx 事件 (109)BeforeDeleteRow事件 (110)BeforeDoAction 事件 (110)BeforeLoadBill 事件 (112)BeforeMultiCheck 事件 (112)BeforePrintBill 事件 (113)BeforeSave 事件 (114)BeforeSelBills 事件 (114)BeforeSelBillShowFilter 事件 (114)BeforeSenderMessage 事件 (115)BeforeSetMutilSelData事件 (116)BeforeSetMutilSelData2事件 (116)BeforeVerify 事件 (117)BeforeWindowExit事件 (117)BeforLoadBillFillData 事件 (117)BeginEdit 事件 (118)BusinessCheck 事件 (118)BusinessCheckEx 事件 (118)Change 事件 (119)CommandClick事件 (119)EntryFieldChanged事件 (120)FinishMultiCheck 事件 (120)FinishMultiCheckEx 事件 (121)GetFocus 事件 (121)HeadCtlClick 事件 (122)LostFocus 事件 (122)MenuBarClick 事件 (122)MenuBarInitialize 事件 (123)MultiCheck 事件 (123)MultiCheckEx 事件 (124)ReMultiCheck 事件 (125)ReMultiCheckEx 事件 (125)ReUnMultiCheck 事件 (125)ReUnMultiCheckEx 事件 (126)SaveBillFailed 事件 (126)SaveBillSuccess事件 (127)SSTabClick事件 (127)StartMultiCheck 事件 (127)StartMultiCheckEx 事件 (128)UnBusinessCheck 事件 (128)UnBusinessCheckEx 事件 (129)UnMultiCheck 事件 (129)UnMultiCheckEx 事件 (130)Verify 事件 (130)K3Lib对象参考 (132)Account 属性 (132)Net 属性 (133)User 属性 (133)CreateK3Object 函数 (137)GetData 函数 (138)GetK3Language 函数 (139)LoadKDString 函数 (140)UpdateData 方法 (142)GetStockQty 函数 (142)LookUpClass函数 (143)LoadBill 方法 (145)LoadList方法 (145)AccountID 属性 (147)AccountName 属性 (147)SetupType 属性 (147)Net对象参考 (149)BeginMutex 函数 (149)CommitMutex 函数 (149)QueryFunc 函数 (150)QuerySubSys 函数 (150)User对象参考 (151)UserID 属性 (151)UserName 属性 (151)MenuBar对象参考 (152)MenuBar 对象结构图 (152)ActiveBand 属性 (153)BOSBands 属性 (153)BOSTools 属性 (154)Refresh 方法 (154)BOSBands对象参考 (155)Count 属性 (155)Item 属性 (155)Add 函数 (155)Remove 方法 (156)RemoveAll 方法 (156)BOSBand对象参考 (157)BandName 属性 (157)BandType 属性 (157)BOSTools 属性 (157)Caption 属性 (157)CurrentTool 属性 (158)DockingArea 属性 (158)DockingOffset 属性 (158)DockLine 属性 (159)Flags 属性 (159)Visible 属性 (159)Refresh 方法 (160)BOSTools对象参考 (161)Count 属性 (161)Item 属性 (161)Add 函数 (161)GetFreeToolID 函数 (162)InsertAfter 方法 (162)InsertBefore 方法 (163)Remove 方法 (163)RemoveAll 方法 (164)BOSTool对象参考 (165)Alignment 属性 (165)BeginGroup属性 (165)Caption 属性 (165)CaptionPosition 属性 (166)Checked 属性 (166)Default 属性 (166)Description 属性 (167)Enabled 属性 (167)ShortcutKey 属性 (167)Style 属性 (170)SubBand 属性 (170)Tag 属性 (170)ToolID 属性 (170)ToolName 属性 (171)ToolPicture 属性 (171)TooltipText 属性 (171)Visible 属性 (171)PasteToolFace 方法 (171)SetPicture 方法 (172)BillHeads\BillHead\BillEntrys\BillEntry\BOSFields\BOSField对象参考 (174)MenuBar 对象结构图 (174)BillHeads对象参考 (175)Count 属性 (175)Item 属性 (176)BillHead对象参考 (177)BOSFields 属性 (177)BillEntrys对象参考 (178)Count 属性 (178)Item 属性 (179)BillEntry对象参考 (180)BOSFields 属性 (180)EntryHeight 属性 (180)EntryLeft 属性 (180)EntryTop 属性 (180)EntryType 属性 (181)EntryWidth 属性 (181)KeyField 属性 (181)Layer 属性 (181)MaxRows 属性 (182)TableName 属性 (182)Visible 属性 (182)AddRow 方法 (182)RemoveRow 方法 (183)BOSFields对象参考 (184)Count 属性 (184)Item 属性 (184)BOSField对象参考 (185)Caption 属性 (185)FieldHeight 属性 (185)FieldLeft 属性 (185)FieldLock 属性 (185)FieldName 属性 (186)FieldTop 属性 (186)FieldWidth 属性 (186)Filter 属性 (186)FKey 属性 (186)FontBold 属性 (187)FontItalic 属性 (187)FontName 属性 (187)FontSize 属性 (187)FrameBorder 属性 (188)FrameBorderColor 属性 (188)LabelColor 属性 (188)LabelWidth 属性 (188)Layer 属性 (188)MustInput 属性 (189)NeedSave 属性 (189)Note 属性 (189)Number 属性 (189)Page 属性 (189)Row 属性 (190)TableName 属性 (190)Text 属性 (190)TextColor 属性 (190)Value 属性 (190)SetFieldSumValue方法 (191).Net (192)基础配置 (192)开发环境 (192)使用说明 (192)引用 (192)插件跟踪 (192)K3ClassEvents的对象模型 (193)K3ClassEvents的对象 (193)ListEvents对象参考 (194)事件声明 (194)AfterCopyBillCreateData 事件 (195)OnBarInitialize事件 (195)AfterShowBill事件 (195)OnBarItemClick事件 (196)ShowBill函数 (196)AspxGetSelectList函数 (197)AddBarItem函数 (197)AddBarItemLink函数 (198)SetBarItemProperty函数 (199)AddBarItemLink函数 (199)RemoveBarItem函数 (200)RemoveBarItemLink函数 (200)BillName 属性 (201)ClassType 属性 (201)ClassTypeEntry 属性 (202)ClassTypeKey 属性 (202)PrimaryKey 属性 (202)EntryPrimaryKey 属性 (203)TableInfo 属性 (203)TableName 属性 (203)BillEvent对象参考 (205)事件声明 (205)OnBarInitialize事件 (206)OnBarItemClick事件 (207)AfterNewBill 事件 (207)BeforLoadBillFillData事件 (207)AfterLoadBill事件 (207)AfterShowBill 事件 (208)AfterConfirm事件 (208)AfterF7Select事件 (208)Change 事件 (209)BeforeSave 事件 (209)AddBarItem函数 (210)AddBarItemLink函数 (211)GetBarItemProperty函数 (211)SetBarItemProperty函数 (212)AddBarItemLink函数 (212)RemoveBarItem函数 (213)RemoveBarItemLink函数 (213)Alter函数 (214)Confirm函数 (214)GetFieldValue函数 (215)GetRequest函数 (216)LockCell函数 (216)LockWebTabItem函数 (217)SaveBill函数 (218)SetFieldValue函数 (218)ShowBill函数 (219)ShowF7Select函数 (220)BillName 属性 (221)ClassType 属性 (221)ClassTypeEntry 属性 (221)ClassTypeKey 属性 (222)PrimaryKey 属性 (222)EntryPrimaryKey 属性 (222)TableInfo 属性 (223)TableName 属性 (223)CurBillID属性 (224)BillHeads对象参考 (225)Count 属性 (225)Item 属性 (225)BillHead对象参考 (226)BOSFields 属性 (226)BillEntrys对象参考 (227)Count 属性 (227)Item 属性 (227)BillEntry对象参考 (228)BOSFields 属性 (228)EntryHeight 属性 (228)EntryIndex 属性 (228)EntryLeft 属性 (228)EntryTop 属性 (228)EntryType 属性 (229)EntryWidth 属性 (229)KeyField 属性 (229)TableName 属性 (230)Visible 属性 (230)BOSFields对象参考 (231)Count 属性 (231)Item 属性 (231)BOSField对象参考 (232)Caption 属性 (232)FieldHeight 属性 (232)FieldLeft 属性 (232)FieldLock 属性 (232)FieldName 属性 (233)FieldTop 属性 (233)FieldWidth 属性 (233)Filter 属性 (233)FKey 属性 (233)FontBold 属性 (234)FontItalic 属性 (234)FontName 属性 (234)FontSize 属性 (234)FrameBorder 属性 (235)FrameBorderColor 属性 (235)LabelColor 属性 (235)LabelWidth 属性 (235)Layer 属性 (235)MustInput 属性 (236)NeedSave 属性 (236)Note 属性 (236)Number 属性 (236)Page 属性 (236)Row 属性 (237)TableName 属性 (237)Text 属性 (237)TextColor 属性 (237)Value 属性 (237)Visible 属性 (238)用户场景 (239)需求 (239)总体需求 (239)需求分解 (240)详细需求 (241)单据信息 (241)单据流程 (243)多级审核 (244)设计和实现 (245)单据数据结构设计 (245)单据头 (245)单据体 (247)字段的过滤条件 (250)BOS IDE中设置过滤条件 (250)通过SQL更新字段的过滤条件 (252)Action设置 (253)自动生成Action (253)手动添加Action (256)单据流程 (258)【销售订单】下推生成【产品入库通知单】 (258)练习一下 (262)多级审核 (264)多级审核设置 (264)凭证功能 (265)设置凭证数据来源 (265)操作管理 (266)插件开发 (269)部署 (270)发布到主控台 (270)制作部署文件 (272)概述为了实现客户个性化的需求和保持K/3 BOS架构的开放性,K/3 BOS提供了插件编程,有效的扩展了K/3 BOS平台,K/3 BOS插件编程是通过K3ClassEvents对象代理实现的。