收藏 分享(赏)

K3BOS培训—插件.ppt

上传人:buyk185 文档编号:4100241 上传时间:2018-12-09 格式:PPT 页数:54 大小:721.50KB
下载 相关 举报
K3BOS培训—插件.ppt_第1页
第1页 / 共54页
K3BOS培训—插件.ppt_第2页
第2页 / 共54页
K3BOS培训—插件.ppt_第3页
第3页 / 共54页
K3BOS培训—插件.ppt_第4页
第4页 / 共54页
K3BOS培训—插件.ppt_第5页
第5页 / 共54页
点击查看更多>>
资源描述

1、K/3 BOS进阶培训插件开发,常州金蝶软件,插件开发概述 插件开发基础 使用数据包开发插件 其它,提纲,插件的作用 实现单据、序时簿、基础资料序时簿中特殊的业务流程处理 中间层数据改变时的特殊处理规则 个性化的菜单、外观定制;增加自定义的菜单并响应其操作 对审核、消息流程的自定义控制 . 完成无法通过 K/3 BOS 标准功能实现的个性化需求,作用,插件开发环境 金蝶K/3 v11 必选安装客户端、K/3 BOS,推荐同时安装中间层 Microsoft Visual Basic 推荐使用 v6.0 版本,并且安装 SP5 Microsoft Windows 2000 Server(及以上版本

2、) 推荐采用 Server 类操作系统作为开发、调试操作系统 注意:如果要使用“金蝶K/3-BOS插件开发向导”工具,需要采用简体中文操作系统 Microsoft SQL Server 2000数据库,开发环境,插件开发注意事项 合理的单据设计和流程设计 尽量使用BOS的内部逻辑携带当前字段相关基础资料属性到指定列 计算定义公式的值并填写到指定列 计量单位变化后自动换算数量或单价 物料为非批号管理时锁定批号对应列 根据物料上数量单价精度设置数量单价精度 表达式为真/假时显示/隐藏字段 表达式为真/假时锁定/解锁字段 单据合法性校验 单据被引用后锁定字段 条件成立时锁定菜单项,否则解锁菜单项 合

3、法性检查,检查字段唯一性,注意事项,总体模型,接口对象BillEvent单据接口ListEvents序时簿接口BaseClassEvent 基础资料序时簿辅助对象K3LibNetUserAccount与金蝶K/3 交互 MenuBarBOSBandsBOSBandBOSToolsBOSTool新增、修改菜单和工具栏 BillHeadsBillHeadBillEntrysBillEntryBOSFieldsBOSField单据、单据头、单据体、单据字段操作,插件开发概述 插件开发基础 使用数据包开发插件 其它,提纲,插件开发向导,VB Addin 快速构建 客户端单据插件 客户端序时簿插件 中间

4、层插件 功能 修改BOS默认菜单 新增菜单 处理事件标记 函数、事件、方法查询,注册文件,VB注册BOS插件向导方法 Windows Registry Editor Version 5.00HKEY_CURRENT_USERSoftwareMicrosoftVisual Basic6.0AddinsK3BOSPLUGINSADDIN.Connect “FriendlyName“=“K/3 BOS PlugIns Maker VB AddIn“ “Description“=“K/3 BOS PlugIns Maker VB AddIn“ “LoadBehavior“=dword:00000003

5、 “CommandLineSafe“=dword:00000000,插件开发向导,演示,MenuBar,MenuBar、BOSBands、BOSBand、 BOSTools、BOSTool 类似于 ActiveBar 对象的结构,MenuBar 是 PublicNotCreatable 对象 在BillEvent、ListEvents、BaseClassEvent对象中包含MenuBar属性使用。例如:Dim oMenuBar As K3ClassEvents.MenuBar Set oMenuBar = BillEventObject.Menubar在BillEvent、ListEvents

6、、BaseClassEvent对象新增事件 Sub MenuBarInitialize(ByVal oMenuBar As K3ClassEvents.MenuBar) Sub MenuBarClick(ByVal BOSTool As K3ClassEvents.BOSTool, Cancel As Boolean),MenuBar,BOSBandsBOSBand,基本和ActiveBar的Bands、Band对象属性、方法一致BOSBands不能使用 For Each 方法遍历BOSBand对象可以通过 Add 方法来新建BOSBand对象。,BOSToolsBOSTool,基本和Acti

7、veBar的Tools、Tool对象属性、方法一致BOSTools不能使用 For Each 方法遍历BOSTool对象可以通过 Add 方法来新建BOSTool对象,BOSTools 重点,Function Add(ToolName As String) As BOSTool 与ActiveBar的Tools的Add相比 可以在任何的BOSTools对象中调用 不需要考虑ToolID重复的问题Sub InsertBefore(Index, oTool As BOSTool) Index 可以是数字,以表示当前BOSBand上的BOSTool的顺序(与ActiveBar中的方法一致) 也可以是

8、一个BOSTool的Name(字符串)Sub InsertAfter(Index, oTool As BOSTool) 新增方法,特性与上相同,BOSTool 重点,如何给菜单添加图标 方法 1 先使用 ToolPicture 属性指定一个图标的路径 再调用 SetPicture(Index As Long, MaskColor As Long) 方法 Index 代表了 0-Normal, 1-Pressed, 2-Mouse Hover, 3-Disabled方法 2 先调用 Clipboard.SetData 方法将图片复制到剪贴板 再调用PasteToolFace(Index As L

9、ong, MaskColor As Long)方法,练习,在检斤单中添加“皮重”和“毛重”。 隐藏“插入一行”、“删除一行”和复制行 更改mnuDataLookUp的标题为“查看”,K3Lib,是 PublicNotCreatable 对象 在BillEvent、ListEvents、BaseClassEvent对象中包含K3Lib属性使用。例如: Dim oK3 As K3ClassEvents.K3Lib Set oK3 = BillEventObject.K3Lib 也可直接使用,如: lUserID = BillEventObject.K3Lib.User.ID,K3Lib 重点,Fu

10、nction LoadKDString(strGBText As String, ResourceFile As String) As String 根据K3的语言,从指定的K3语言资源包中返回多语言化的资源 可以通过 ResourceFile 参数指定多语言资源包。默认使用BOS的语言资源包Function GetData(SQLCode As String) As Object 通过SQL语句从中间层访问数据库,返回数据。返回值是ADODB.Recordset 类型Sub UpdateData(SQLCode) 通过SQL语句从中间层访问数据库,更新数据 参数SQLCode可以是Strin

11、g(单条SQL语句),也可以是String() (多条SQL语句)Function CreateK3Object(ClassString As String) As Object 通过这个函数在插件中创建K/3的对象,使得插件可以单独调试,练习,GetData UpdateData 多条SQL CreateK3Object 创建K3组件K3ClassTpl.DataSrv,BillHeads、BillEntrys,是 PublicNotCreatable 对象 在BillEvent对象中包含使用。例如: Dim oHead As K3ClassEvents.BillHead Set oHead

12、 = BillEventObject.BillHeads(1)BillHeads、BillEntrys、BOSFields不能使用 For Each 方法遍历对象,BillEntrysBillEntry,单据体对象 包含了和单据体相关的属性 通过这些属性可以在运行时操作单据体重要属性 MaxRows As Long 可以在运行时调整单据体行数(大于1且小于2000),BillHeadsBillHead,单据头对象 V10.3及以前版本只提供1个单据头 计划在以后的版本支持多单据头注意事项 为了保证在以后版本的升级中便于维护,建议在访问单据头对象前还是先访问 Count 属性,BOSFields

13、BOSField,字段对象 每个字段对象,对应单据(包括单据头和单据体)上的每一个字段 通过这些属性,可以在运行时操作字段。,BOSField 1,注意 某些属性值只适用于单据头中的字段 FieldTopFieldLeftFieldHeightFieldWidth LabelWidthLabelColorFrameBorderColorFrameBorder FontNameFontSizeFontBoldFontItalicTextColor某些2者都支持 TableNameFieldNameCaptionPageLayerFKey VisibleNeedSaveMustInputField

14、LockNote某些只适用于特殊的字段 Row 仅支持多分录单据体 Filter 仅支持基础资料字段,BOSField 2,注意 Visible 只有设计时没有设计为“锁定”状态的字段,才可以在运行时更改锁定状态FieldLock 只有设计时没有设计为“锁定”状态的字段,才可以在运行时更改锁定状态有些值是取的运行时字段的状态,可能与字段包中相关属性值不同,BOSField 3,取值和赋值 通过以下属性取值 Value 内码值。即保存在数据库中的值 Number 查找类型字段查找值 Text 显示值。即显示在界面的值通过以下属性赋值 Value 非查找类型字段赋值使用 Number 查找类型字段

15、赋值使用赋值包含字典包和界面同时更新,练习,通过BOSField对象更改Caption 通过MaxRows方法更改BOS采购入库单的分录数 在检斤单中单击毛重时隐藏皮重;单击皮重时隐藏毛重,BillEventListEventsBaseClassEvent,获得对象实例的方法:,BillEventListEventsBaseClassEvent,也可以在同一个类中实现,BillEvent常用事件、方法,事件 Event MenuBarInitialize(oMenuBar As MenuBar) Event MenuBarClick(BOSTool As BOSTool, Cancel As

16、Boolean)Event AfterNewBill() Event AfterLoadBill() Event AfterCopyBill() Event AfterSelBill(lSelBillType As Long)Event BeforeVerify(bCancel As Boolean) Event Change(dct As Dictionary, dctFld As Dictionary, Col As Long, Row As Long, Cancel As Boolean) 方法 Function GetFieldValue(sKey As String, nRow As

17、 Long = -1, ValueType As Enu_ValueType = Enu_ValueType_FFLD) Function SetFieldValue(sKey As String, vValue, nRow As Long = -1) As Boolean Function InsertNewRowAndFill(nPage As Long, nRow As Long, ParamArray vFieldsData() As Variant) As BooleanFunction GetDataFld(dct As Dictionary, Row As Long) As Di

18、ctionary Function GetFieldInfoByKey(sKey As String, sPKey As String, lIndex As Long) As DictionaryFunction RefreshBill() Function IsChange() As BooleanFunction DeleteEntryData(nPage As Long) As Boolean,BillEvent 重要的方法,重要的方法Function SetFieldValue(sKey As String, vValue, nRow As Long = -1) As BooleanF

19、unction GetFieldValue(sKey As String, nRow As Long = -1, ValueType As Enu_ValueType = Enu_ValueType_FFLD)Sub SetBillFormCaption(sCaption As String)Function InsertNewRowAndFill(nPage As Long, nRow As Long, ParamArray vFieldsData() As Variant) As Boolean,直接访问单据属性,BillEvent 属性(单据相关属性),* 不用访问数据包,更快捷,Lis

20、tEvents常用事件、方法,事件 Event MenuBarInitialize(oMenuBar As MenuBar) Event MenuBarClick(BOSTool As BOSTool, Cancel As Boolean) Event AfterCopyBillCreateData(srcInterID As Long, dctData As Dictionary) Event ListRowSelected(ByVal lRow As Long) Event AfterDeleteBill(bSuccess As Boolean, lBillInterID As Long,

21、 sBillNo As String, sErrorMessage As String, bCancelErrorMessage As Boolean) Event AfterMultiCheck、AfterUnMultiCheck、BusinessCheck、UnMultiCheck Event ListFillRow(lRow As Long, RowData As Object, HeadDict As Dictionary, CellData As String, BackColor As Long, ContinueRaise As Boolean) 方法 Function GetD

22、ataFld(dct As Dictionary, Row As Long = -1) As Dictionary Function GetDataFldbyKey(sFKey As String, Row As Long = -1) As DictionaryFunction GetSelectedBillInfo() As VectorFunction GetCurrentSelRowInfo() As Dictionary,10.2新增的事件和属性,事件 Event ListFillRow(lRow As Long, RowData As Object, HeadDict As Dict

23、ionary, CellData As String, BackColor As Long, ContinueRaise As Boolean) 序时簿的行填充事件 实际上每个行的每个可见的单元格(字段)的填充都会激发 参数: lRow As Long 行号 RowData As Object 本行所有数据的 RecoderSet 对象 HeadDict As KFO.IDictionary 当前单元格(字段)的信息 CellData As String 当前单元格数据。更改此值可以改变单元格的填充值 BackColor As Long 当前行的背景色。更改此值可以改变本行的背景色。可以使用

24、RGB 函数得到色值 ContinueRaise As Boolean 在下一行该单元格填充的时候是否激发ListFillRow 事件。 默认为 True。更改此值为 False,则下一行这个单元格填充的时候不会再激发 ListFillRow 事件。 属性 EnableListFillRowEvents As Boolean ListFillRow 事件开关 默认为 False,即不激发 ListFillRow 事件,BaseClassEvent常用事件、方法,事件 Event MenuBarInitialize(oMenuBar As MenuBar) Event MenuBarClick(

25、BOSTool As BOSTool, Cancel As Boolean)Event RefreshList()Event ListFillRow(lRow As Long, RowData As Object, HeadDict As Dictionary, CellData As String, BackColor As Long, ContinueRaise As Boolean) Event ClassGroupSelected(Button As Long, ClassGroupType As Long, ClassGroupID As Long, ClassGroupFullNu

26、mber As String)方法 Function SelectClassGroupByID(lClassGroupID As Long) As Long Function PitchItemByID(lItemID As Long) As Boolean Sub RefreshClassGroups()Function GetSelectedClassID() As Long Function GetSelectedItemID() As Long,练习,InsertNewRowAndFill 下拉框使用此方法无效 SetFieldValue 检斤单中检斤类型由选单决定,如选采购入库单,检

27、斤类型为入库。 GetFieldValue Chang事件,/*/ /*描述:单据保存后扩展处理方法 /*参数: /* dctClassType KFO.Dictionary 单据整体信息模板 /* dctData KFO.Dictionary 单据数据包 dctData(“FID“)为保存后的单据内码 /* dctLink KFO.Dictionary 选单关系模板,无选单为Nothing /* dctTableInfo KFO.Dictionary 单据字段模板信息 /* sDsn String K/3标准数据库连接串 /* vctClassTypeEntry KFO.Vector 单据体

28、模板信息 /*备注:可以将该单触发器处理的过程在此函数中处理 /*/ Public Function BeforeSave(byval sDsn as string, _byval dctClassType as kfo.dictionary, _byval vctClassTypeEntry as kfo.vector, _byval dctTableInfo as kfo.dictionary, _byval dctData as kfo.dictionary,_byval dctLink as kfo.dictionary),单据插件-中间层数据保存前的处理,/*/ /*描述:单据保存后

29、扩展处理方法 /*参数: /* dctClassType KFO.Dictionary 单据整体信息模板 /* dctData KFO.Dictionary 单据数据包 dctData(“FID“)为保存后的单据内码 /* dctLink KFO.Dictionary 选单关系模板,无选单为Nothing /* dctTableInfo KFO.Dictionary 单据字段模板信息 /* sDsn String K/3标准数据库连接串 /* vctClassTypeEntry KFO.Vector 单据体模板信息 /*备注:可以将该单触发器处理的过程在此函数中处理 /*/ Public Fu

30、nction AfterSave(byval sDsn as string, _byval dctClassType as kfo.dictionary, _byval vctClassTypeEntry as kfo.vector, _byval dctTableInfo as kfo.dictionary, _byval dctData as kfo.dictionary, _byval dctLink as kfo.dictionary),单据插件-中间层数据保存后的处理,/*/ /*描述:单据删除后扩展处理方法 /*参数: /* sDsn String K/3标准数据库连接串 /* n

31、ClassID ClassTypeID /* dctClassType KFO.Dictionary 单据整体信息模板 /* nInterID 传递本次需要删除的ID /*备注:只提供删除表头或者是多分录的表体,不支持单分录表体删除,如果是单分录表体请直接按照表头删除 /*/ Public Function BeforeDel (ByVal sDsn As String, _ByVal nClassID As Long, _ByVal dctClassType As KFO.Dictionary, _ByVal nInterID As Long) As String,单据插件-中间层数据删除前

32、的处理,/*/ /*描述:单据删除后扩展处理方法 /*参数: /* sDsn String K/3标准数据库连接串 /* nClassID ClassTypeID /* dctClassType KFO.Dictionary 单据整体信息模板 /* nInterID 传递本次需要删除的ID /*备注:只提供删除表头或者是多分录的表体,不支持单分录表体删除,如果是单分录表体请直接按照表头删除 /*/ Public Function AfterDel (ByVal sDsn As String, _ByVal nClassID As Long, _ByVal dctClassType As KFO

33、.Dictionary, _ByVal nInterID As Long) As String,单据插件-中间层数据删除后的处理,插件开发概述 插件开发基础 使用数据包开发插件 其它,提纲,KFO K/3 BOS 中传递数据,主要使用了 KFO的2个对象完成 关于 KFO 对象的详细使用,请参考KFO参考手册Vector 对象 相当于一个一维数组,可以说它是一个不定长且可以是任意数据类型的数组,同样可以通过存取数组元素值进行数据传递,一个元素值可以是RecordSet,也可以是一个任意一个数据或对象 Dictionary 对象 是一个数据字典,字典里可以存放不同的变量,可以给字典里这些变量赋值

34、,或从字典里取出这些变量的值进行数据传递,它可以是任一个变量,也可以是一个对象。在Dictionary对象中主要通过变量名称来进行索引,数据结构,两个关键的数据包dctData BillEvent:Property Data ListEvents: Event AfterCopyBillCreateData(srcInterID As Long, dctData As Dictionary)dctTableInfo BillEvent:Property TableInfo ListEvents: Property DataSrv.TableInfo BaseClassEvent: Proper

35、ty DataSrv.TableInfo,数据结构,数据结构,dctData包含这个单据对象的详细数据 每一个Page对应一个数据对象,如果这个Page是单表或者表头,那么这个数据对象是一个字典,否则这个数据对象就是一个Vector,而Vector的每一个子项均为一个字典 每一个数据对象字典包含了这一个页面上数据总和,他的每一个Item均为一个字典(这个字典是最明细的)最明细的数据字典可能包含: FFLD = “FFLD“ 肯定都有 FDSP = “FDSP“ 查找关联类型才有 FFND = “FFND“ 查找关联类型才有 FOLD = “FOLD“ 修改单据时才有 FMODIFY = “FM

36、ODIFY“ 修改单据后时才有这五个域,数据结构,数据结构,数据结构,dctTableInfo包含三部份内容 所有Item的详细信息,以字典的形式保存,采用Key 去查询这个 Key 是用 FTabIndex+Fkey 格式化而成所有Page的信息,每一个Page是一个字典包含了这一个Page上组成项的Key这个单据对象的所有Item的Map映射,这是一个字典,数据结构,数据结构,练习,BOS采购订单审核后自动生成一张BOS入库单,表头和表体的数据和BOS采购订单一致。,插件开发概述 插件开发基础 使用数据包开发插件 其它,提纲,相关内容请参考客户化开发知识库关于插件中接口的函数、方法、事件、属性的详细信息,请参考K/3插件开发手册关于KFO组件的函数、方法、属性的详细信息,请参考KFO参考手册,资料,谢 谢!,

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

当前位置:首页 > 实用文档 > 解决方案

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报