K3 BOS插件开发产品培训课件_第1页
K3 BOS插件开发产品培训课件_第2页
K3 BOS插件开发产品培训课件_第3页
K3 BOS插件开发产品培训课件_第4页
K3 BOS插件开发产品培训课件_第5页
已阅读5页,还剩125页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

K/3BOS插件开发培训演讲人:李望中金蝶软件(中国)有限公司K/3BOS插件开发培训演讲人:李望中提纲插件开发概述案例介绍插件开发基础插件开发向导数据结构K3ClassEvents业务对象接口BillEvent单据接口ListEvents序事簿接口BaseClassEvent基础资料序事簿接口K3ClassEvents公用对象K3Lib常用元数据表结构提纲插件开发概述为什么要用插件完成当前版本无法用K/3BOS标准功能实现的需求,插件原理图如下插件的作用实现单据、序时簿、基础资料序时簿中特殊的业务流程处理中间层数据改变时的特殊处理规则个性化的菜单、外观定制;增加自定义的菜单并响应其操作对审核、消息流程的自定义控制插件开发概述为什么要用插件插件开发概述插件开发环境

金蝶K/3v10.1以上的版本必选安装客户端、K/3BOS,推荐同时安装中间层MicrosoftVisualBasic

推荐使用vb6.0

版本,并且安装SP5MicrosoftWindows2000Server以上版本推荐采用Server类操作系统作为开发、调试操作系统注意:如果要使用“金蝶K/3BOS插件开发向导”工具,需要采用简体中文操作系统MicrosoftSQLServer2000数据库插件开发概述-开发环境介绍插件开发环境插件开发概述-开发环境介绍提纲插件开发概述案例介绍插件开发基础插件开发向导数据结构K3ClassEvents业务对象接口BillEvent单据接口ListEvents序事簿接口BaseClassEvent基础资料序事簿接口K3ClassEvents公用对象K3Lib常用元数据表结构提纲插件开发概述ABC公司

主营业务是生产和销售各种高档卫浴五金、水暖器材等。拥有五个厂区,产品外销欧美、日本等国家和地区为了统一物流管理,解决重复请购、资金占用严重的问题,ABC公司提出了寄存仓的管理模式,与供应商之间通过统一窗口来管理供应商将物料寄存到ABC公司指定的物流中心仓库,但所有权属供应商ABC公司根据生产实际需求从物流中心领料并进行相应的结算处理案例分析ABC公司为了统一物流管理,解决重复请购、资金占用严重的问题解决方案解决方案演示案例—插件开发需求(一)单据定义寄存入库单新增时默认为2000行在寄存入库单单据上增加复制按钮的浮动按钮,隐藏“页面设置”菜单在寄存入库单序事簿上增加单据变更的菜单及按钮以插件中附带的图片资源文件增加单据变更的显示当单据头金额大于10000时,锁定单据头备注字段当前登录用户只能看到本人制作的寄存入库单寄存入库单新增时给表体赋一行默认值多级审核多级审核业务审核完后仍可修改单据头备注字段单据转换流程寄存入库单下推外购入库单时所选单据部门必须相同演示案例—插件开发需求(一)单据定义提纲插件开发概述案例介绍插件开发基础插件开发向导数据结构K3ClassEvents业务对象接口BillEvent单据接口ListEvents序事簿接口BaseClassEvent基础资料序事簿接口K3ClassEvents公用对象K3Lib常用元数据表结构提纲插件开发概述插件开发基础—

插件开发向导插件开发基础—插件开发向导KFOK/3BOS

中传递数据,主要使用了KFO的2个对象关于

KFO

对象的详细使用,请参考《KFO参考手册》Vector对象相当于一个一维数组,可以说它是一个不定长且可以是任意数据类型的数组,同样可以通过存取数组元素值进行数据传递,一个元素值可以是RecordSet,也可以是一个任意一个数据或对象

Dictionary对象是一个数据字典,字典里可以存放不同的变量,可以给字典里这些变量赋值,或从字典里取出这些变量的值进行数据传递,它可以是任一个变量,也可以是一个对象。在Dictionary对象中主要通过变量名称来进行索引插件开发基础—

数据结构KFO插件开发基础—数据结构两个关键的数据包dctDataBillEvent:PropertyDataListEvents:EventAfterCopyBillCreateData(srcInterIDAsLong,dctDataAsDictionary)dctTableInfoBillEvent:PropertyTableInfoListEvents:PropertyDataSrv.TableInfoBaseClassEvent:PropertyDataSrv.TableInfo插件开发基础—

业务数据包和单据字典包两个关键的数据包插件开发基础—业务数据包和单据字典包插件开发基础—

业务数据包BillEventBillHeadsBillEntrysBillHeadBillEntryBOSFieldsBOSFieldBOSFieldsBOSFielddctData“Page1”“Page2”“Page…”“Pagei”dctFld1dctFld…dctFldnEnu_EntryType_SingleRow“Row1”dctFld1dctFld…dctFldn“Row…”“Rown”Enu_EntryType_MutiRowFDSPFFNDFOLDFMODIFYFFLDsKeysKey插件开发基础—业务数据包BillEventBillHeadctData包含这个单据对象的详细数据每一个Page对应一个数据对象,如果这个Page是单表或者表头,那么这个数据对象是一个字典,否则这个数据对象就是一个Vector,而Vector的每一个子项均为一个字典每一个数据对象字典包含了这一个页面上数据总和,他的每一个Item均为一个字典(这个字典是最明细的)最明细的数据字典包含五个域:FFLD="FFLD"肯定都有FDSP="FDSP"查找关联类型才有FFND="FFND"查找关联类型才有FOLD="FOLD"修改单据时才有FMODIFY="FMODIFY"'修改单据后时才有五个域插件开发基础—

业务数据包dctData包含这个单据对象的详细数据插件开发基础—业插件开发基础—

如何访问dctData包(一)插件开发基础—如何访问dctData包(一)插件开发基础—

如何访问dctData包(二)读取单据头审核日期的值可用以下两种方式:m_billinterface.data(“page1”)(m_billinterface.tableinfo(“map”)(“FCheckDate”))(“FFLD”)m_billinterface.bosheads(1).bosfields(“FCheckDate”).value读取单据体第一行应收数量的值可用以下两种方式:m_billinterface.data(“page2”)(1)(m_billinterface.tableinfo(“map”)(“FMustQty”))(“FFLD”)DimobjasbosfieldDimtmpasdoubleSetobj=m_billinterface.billentrys(1).bosfields(“fmustqty”)Obj.row=1;tmp=obj.value插件开发基础—如何访问dctData包(二)读取单据头审插件开发基础—

数据字典包dctTableInfo包含三部份内容所有Item的详细信息,以字典的形式保存,采用Key

去查询这个Key

是用FTabIndex+Fkey格式化而成所有Page的信息,每一个Page是一个字典包含了这一个Page上组成项的Key这个单据对象的所有Item的Map映射,这是一个字典插件开发基础—数据字典包dctTableInfo包含三部提纲插件开发概述案例介绍插件开发基础插件开发向导数据结构K3ClassEvents业务对象接口BillEvent单据接口ListEvents序事簿接口BaseClassEvent基础资料序事簿接口K3ClassEvents公用对象K3Lib常用元数据表结构提纲插件开发概述插件对象模型(BillEvent)K3ClassEventsBillEvent单据接口ListEvents序事簿接口BaseClassEvent基础资料序事簿接口BillEventK3LibNetUserAccountMenuBarBillHeadsBillEntrysBillHeadBillEntryBOSBandsBOSToolsBOSFieldsBOSBandBOSToolBOSFieldsBOSFieldBOSField插件对象模型(BillEvent)K3ClassEventsBillEvent对象BillEvent对象MenuBar概述BOSBands和BOSBand对象BOSTools和BOSTool对象单据基础对象BillHeads和BillEntrysBOSFields单据接口事件函数、方法属性BillEvent对象BillEvent对象概述BOSBands、BOSTools对象是PublicNotCreatable对象在BillEvent、ListEvents、

BaseClassEvent对象中包含

MenuBar属性使用。例如:DimoMenuBarAsK3ClassEvents.MenuBarSetoMenuBar=BillEventObject.Menubar在BillEvent、ListEvents、BaseClassEvent对象新增事件SubMenuBarInitialize(ByValoMenuBarAsK3ClassEvents.MenuBar)SubMenuBarClick(ByValBOSToolAsK3ClassEvents.BOSTool,CancelAsBoolean)概述BOSBands、BOSTools对象BOSBands和BOSBand对象基本和ActiveBar的Bands、Band对象属性、方法一致BOSBands不能使用ForEach方法遍历BOSBand对象可以通过Add方法来新建BOSBand对象。BOSBands和BOSBand对象基本和ActiveBarBOSTools和BOSTool对象基本和ActiveBar的Tools、Tool对象属性、方法一致BOSTools不能使用ForEach方法遍历BOSTool对象可以通过Add方法来新建BOSTool对象BOSTools和BOSTool对象基本和ActiveBarBOSTools方法详解FunctionAdd(ToolNameAsString)AsBOSTool与ActiveBar的Tools的Add相比可以在任何的BOSTools对象中调用不需要考虑ToolID重复的问题SubInsertBefore(Index,oToolAsBOSTool)Index可以是数字,以表示当前BOSBand上的BOSTool的顺序(与ActiveBar中的方法一致)也可以是一个BOSTool的Name(字符串)SubInsertAfter(Index,oToolAsBOSTool)新增方法,特性与上相同BOSTools方法详解FunctionAdd(Tool练习在寄存入库单单据上增加复制按钮的浮动按钮,隐藏“页面设置”菜单在寄存入库单序事簿上增加单据变更的菜单及按钮以插件中附带的图片资源文件增加单据变更的显示练习在寄存入库单单据上增加复制按钮的浮动按钮,隐藏“页面设置BillEvent对象BillEvent对象MenuBar概述BOSBands和BOSBand对象BOSTools和BOSTool对象单据基础对象BillHeads和BillEntrysBOSFields单据接口事件函数、方法属性BillEvent对象BillEvent对象概述是PublicNotCreatable

对象在BillEvent对象中包含使用。例如:DimoHeadAsK3ClassEvents.BillHeadSetoHead=BillEventObject.BillHeads(1)BillHeads、BillEntrys、BOSFields不能使用ForEach方法遍历对象概述是PublicNotCreatable对象BillEntrys对象BillEntrys对象包含了和单据体相关的属性通过这些属性可以在运行时操作单据体分录相关信息CountLong分录的个数EntryIndexLong序号BOSFields(BOSFields)包含的字段TableNameString分录对应在数据库中的表名EntryLeftLong分录的左EntryTopLong分录的上EntryWidthLong分录的宽度EntryHeightLong分录的高度LayerLong分录所在的层EntryTypeLong分录的类型(单分录、多分录)VisibleBoolean分录的可见性KeyFieldString分录的关键字段MaxRowsLong可以在运行时调整单据体行数(大于1且小于2000)BillEntrys对象BillEntrys对象分录相关信息BOSFields和BOSField对象字段相关信息CountLong字段的个数CaptionString字段的标题FieldNameString字段名TableNameString字段对应在数据库中的表名FieldLeftLong字段的左FieldTopLong字段的上FieldWidthLong字段的宽度FieldHeightLong字段的高度LayerLong字段所在的层FieldLockBoolean字段是否锁定VisibleBoolean字段是否可见FilterString字段的过滤FontBoldBoolean字段字体属性FontItalicBoolean字段字体属性FontNameString字段字体属性FontSizeCurrency字段字体属性FrameBorderBoolean是否显示边框FrameBorderColorLong边框颜色LabelColorLong标签颜色LabelWidthInteger标签宽度MustInputBoolean是否必录NeedSaveBoolean是否需要保存NoteString备注NumberVariant字段的值(用于查找类型字段)PageInteger字段所在的PageTextVariant字段的显示值TextColorLong字段的颜色ValueVariant字段的保存值FKeyString字段的内码BOSField对象每个字段对象,对应单据(包括单据头和单据体)上的每一个字段通过这些属性,可以在运行时操作字段。属性集BOSFields和BOSField对象字段相关信息CounBOSField属性详解某些属性值只适用于单据头中的字段FieldTop\FieldLeft\FieldHeight\FieldWidthLabelWidth\LabelColor\FrameBorderColor\FrameBorderFontName\FontSize\FontBold\FontItalic\TextColor某些两者都支持TableName\FieldName\Caption\Page\Layer\FKeyVisible\NeedSave\MustInput\FieldLock\Note某些只适用于特殊的字段Row 仅支持多分录单据体Filter 仅支持基础资料字段BOSField属性详解某些属性值只适用于单据头中的字段BOSField属性详解Visible:字段显示/隐藏属性,只有设计时没有设计为“可见”状态的字段,才可以在运行时更改可见性状态FieldLock:只有设计时没有设计为“锁定”状态的字段,才可以在运行时更改锁定状态Value:得到字段内码值。即保存在数据库中的值Number:得到字段查找类型字段查找值Text:得到字段显示值。即显示在界面的值,不支持通过该属性直接赋值。Value:得到/设置字段非查找类型字段赋值使用Number:得到/设置字段查找类型字段赋值使用BOSField属性详解Visible:字段显示/隐藏属性练习通过插件实现寄存入库单新增时默认表体行数为2000行,主要练习BillEntry对象的Maxrows属性通过插件实现当单据头金额大于10000时,锁定单据头备注字段,主要练习单据Change事件,BosField对象的FieldLock属性练习通过插件实现寄存入库单新增时默认表体行数为2000行,主BillEvent对象BillEvent对象MenuBar概述BOSBands和BOSBand对象BOSTools和BOSTool对象单据基础对象BillHeads和BillEntrysBOSFields单据接口事件函数、方法属性BillEvent对象BillEvent对象事件EventMenuBarInitialize(oMenuBarAsMenuBar)说明:该事件在菜单、工具栏初始化时发生。

EventMenuBarClick(BOSToolAsBOSTool,CancelAsBoolean)说明:该事件在点击菜单、工具栏项时发生。EventAfterNewBill()说明:新建单据对象后发生。

EventAfterLoadBill()说明:单据对象加载完成后发生。EventAfterCopyBill()说明:复制单据后发生EventAfterSelBill(lSelBillTypeAsLong)说明:选单操作完成后发生。

EventBeforeVerify(bCancelAsBoolean)说明:单据对象保存前、系统进行校验操作前发生。EventChange(dctAsDictionary,dctFldAsDictionary,ColAsLong,RowAsLong,CancelAsBoolean)说明:单据对象上的字段值发生改变时发生。

BillEvent对象-事件事件BillEvent对象-事件方法FunctionGetFieldValue(sKeyAsString,[nRowAsLong=-1],[ValueTypeAsEnu_ValueType=Enu_ValueType_FFLD])

说明:用于返回字段的值。

FunctionSetFieldValue(sKeyAsString,vValue,[nRowAsLong=-1])AsBoolean

说明:用于设置字段的值。

FunctionInsertNewRowAndFill(nPageAsLong,nRowAsLong,ParamArrayvFieldsData()AsVariant)AsBoolean

说明:在多分录单据体中插入一个新行,并填充数据。

FunctionGetDataFld(dctAsDictionary,[RowAsLong])AsDictionary

说明:获得单据指定字段的值的对象。

FunctionGetFieldInfoByKey(sKeyAsString,sPKeyAsString,lIndexAsLong)AsDictionary

说明:通过给定的字段的关键名称获得字段的模版的对象。

FunctionRefreshBill()

说明:刷新当前单据对象。

FunctionIsChange()AsBoolean

说明:判断单据对象是否被改变。FunctionDeleteEntryData(nPageAsLong)AsBoolean

说明:删除单据对象指定单据体分录内全部数据。

BillEvent对象-函数、方法方法BillEvent对象-函数、方法BillEvent对象-属性BillEvent对象-属性练习通过插件实现当寄存入库单业务审核后仍可修改单据头备注字段,主要练习单据Afterload事件,单据方法SetBarStatus、SetBillFormCaption通过插件实现寄存入库单新增时给表体赋一行值,物料代码为”01.001”,应收数量为100,实收数量为100,单价为1500。主要练习Insertnewrowandfill方法练习通过插件实现当寄存入库单业务审核后仍可修改单据头备注字段插件对象模型(ListEvents)K3ClassEventsBillEvent单据接口ListEvents序事簿接口BaseClassEvent基础资料序事簿接口ListEventsK3LibNetUserAccountMenuBarBillHeadsBillEntrysBillHeadBillEntryBOSBandsBOSToolsBOSFieldsBOSBandBOSToolBOSFieldsBOSFieldBOSField插件对象模型(ListEvents)K3ClassEventListEvents对象ListEvents对象事件函数、方法属性ListEvents对象ListEvents对象ListEvents对象-事件EventMenuBarInitialize(oMenuBarAsMenuBar)说明:菜单、工具栏初始化时发生。

EventMenuBarClick(BOSToolAsBOSTool,CancelAsBoolean)说明:点击菜单、工具栏项时发生。

EventAfterCopyBillCreateData(srcInterIDAsLong,dctDataAsDictionary)说明:复制已选择的单据数据到新单据,但新单据尚未保存时发生。EventAfterDeleteBill(bSuccessAsBoolean,lBillInterIDAsLong,sBillNoAsString,sErrorMessageAsString,bCancelErrorMessageAsBoolean)说明:删除已选择的单据后发生。EventListFillRow(lRowAsLong,RowDataAsObject,HeadDictAsDictionary,CellDataAsString,BackColorAsLong,ContinueRaiseAsBoolean)说明:序时簿的行填充数据时发生。ListEvents对象-事件EventMenuBarInListEvents对象-方法FunctionGetDataFld(dctAsDictionary,[RowAsLong=-1])AsDictionary

说明:获得单据指定字段的值的对象。

FunctionGetDataFldbyKey(sFKeyAsString,[RowAsLong=-1])AsDictionary

说明:通过字段关键名称获取字段的值的对象。

FunctionGetSelectedBillInfo()AsVector

说明:获取当前选中的单据的数据。FunctionLoadSelectedBill(BillStatusAsEnu_BillStatusExt)AsBoolean

说明:加载当前选择的单据,并按照指定的状态显示。

ListEvents对象-方法FunctionGetDatListEvents对象-属性ListFilterString

说明:序事簿运行时设置过滤条件

ListEvents对象-属性ListFilterStrin练习通过插件实现当寄存入库单业务审核后仍可修改单据头备注字段,主要练习序事簿方法LoadSelectedBill通过插件实现当前登录用户只能看到本人制作的寄存入库单,主要练习序事簿ListFilterString属性练习通过插件实现当寄存入库单业务审核后仍可修改单据头备注字段插件对象模型(BaseClassEvent)K3ClassEventsBillEvent单据接口ListEvents序事簿接口BaseClassEvent基础资料序事簿接口BaseClassEventK3LibNetUserAccountMenuBarBillHeadsBillEntrysBillHeadBillEntryBOSBandsBOSToolsBOSFieldsBOSBandBOSToolBOSFieldsBOSFieldBOSField插件对象模型(BaseClassEvent)K3ClassE对象-BaseClassEventBaseClassEvent对象事件函数、方法属性对象-BaseClassEventBaseClassEveBaseClassEvent对象-事件EventMenuBarInitialize(oMenuBarAsMenuBar)

说明:菜单、工具栏初始化时发生。

EventMenuBarClick(BOSToolAsBOSTool,CancelAsBoolean)

说明:点击菜单、工具栏项时发生。

EventRefreshList()

说明:序时簿刷新时发生。EventListFillRow(lRowAsLong,RowDataAsObject,HeadDictAsDictionary,CellDataAsString,BackColorAsLong,ContinueRaiseAsBoolean)

说明:序时簿的行填充数据时发生。EventClassGroupSelected(ButtonAsLong,ClassGroupTypeAsLong,ClassGroupIDAsLong,ClassGroupFullNumberAsString)

说明:选择基础资料分组时发生。

BaseClassEvent对象-事件EventMenuBBaseClassEvent对象-方法、属性方法FunctionSelectClassGroupByID(lClassGroupIDAsLong)AsLong

说明:按照指定的基础资料分组的ID定位显示。FunctionPitchItemByID(lItemIDAsLong)AsBoolean

说明:按照指定的基础资料明细的ID定位显示。

SubRefreshClassGroups()

说明:刷新所有基础资料分组数据。FunctionGetSelectedClassID()AsLong

说明:返回当前选择的基础资料分组的ID。

FunctionGetSelectedItemID()AsLong

说明:返回当前选择的基础资料明细的ID。

属性EnableListFillRowEventsAsBoolean

说明:是允许否触发插件的序时簿FillRow事件。默认为False,即不触发。只有当此值为True且发生序时簿行填充时,才会触发插件的序时簿FillRow事件。

BaseClassEvent对象-方法、属性方法提纲插件开发概述案例介绍插件开发基础插件开发向导数据结构K3ClassEvents业务对象接口BillEvent单据接口ListEvents序事簿接口BaseClassEvent基础资料序事簿接口K3ClassEvents公用对象K3Lib常用元数据表结构提纲插件开发概述概述是PublicNotCreatable

对象在BillEvent、ListEvents、

BaseClassEvent对象中包含K3Lib对象使用。例如:DimoK3AsK3ClassEvents.K3LibSetoK3=BillEventObject.K3Lib也可直接使用:lUserID=BillEventObject.K3Lib.User.UserID概述是PublicNotCreatable对象方法集FunctionLoadKDString(strGBTextAsString,[ResourceFileAsString])AsString根据K3的语言,从指定的K3语言资源包中返回多语言化的资源可以通过ResourceFile参数指定多语言资源包。默认使用BOS的语言资源包FunctionGetData(SQLCodeAsString)AsObject通过SQL语句从中间层访问数据库,返回数据。返回值是ADODB.Recordset类型SubUpdateData(SQLCode)通过SQL语句从中间层访问数据库,更新数据参数SQLCode可以是String(单条SQL语句),也可以是String()(多条SQL语句)FunctionCreateK3Object(ClassStringAsString)AsObject通过这个函数在插件中创建K/3的对象,使得插件可以单独调试方法集FunctionLoadKDString(strGB练习通过插件实现寄存入库单下推外购入库单时所选单据部门必须相同,主要练习K3lib方法GetData以及序事簿方法GetSelectedBillInfo练习通过插件实现寄存入库单下推外购入库单时所选单据部门必须相提纲插件开发概述案例介绍插件开发基础插件开发向导数据结构K3ClassEvents业务对象接口BillEvent单据接口ListEvents序事簿接口BaseClassEvent基础资料序事簿接口K3ClassEvents公用对象K3Lib常用元数据表结构提纲插件开发概述数据表结构清单关联关系字段说明数据表结构清单清单表名 说明ICClassType 反映了所有事务类型的总体情况ICClassTypeEntry 总体记录了单据头、单据体的信息ICClassTableInfo 详细的模板描述表(记录界面上字段的所有信息)ICClassLink 数据内部传输的关系描述主表(主要用于选单, 上下查)ICClassLinkEntry 数据内部传输的关系描述明细表(主要用于选单)ICClassAction Action的描述表,主要用于解析动作ICClassCondition 各种条件(用于动态构造SQL过滤条件即Where 条件)ICClassConst 系统使用的常数表ICClassProfile 用户设置信息的保存ICClassProfileEntry 用户设置信息的保存的分录清单表名 说明库表之间的关联关系库表之间的关联关系字段说明1ICClassTypeFID单据事务类型内部IDFName单据名称FTableName表名FtempalteID对应模板ID,一般情况下和FID值相等FLogic菜单控制(新增、删除、修改)(0:不允许增删改;3:允许增删改)FBillTypeID单据类型(1:分组管理;3:单据)FLayerCount层数(用于多单据体的情况,可参考“设备管理”下的“设备档案”)FLayerNames所有层的名称用“|”隔开FPrimaryKey表头主键字段名FEPrimaryKey表体主键字段名FClassTypeKey业务对象类型字段名FComponentExt插件组合FControl是否允许单据平台自定义(-1(或者1):不允许;3:允许)字段说明1ICClassTypeFID单据事务类型内部IDF字段说明2ICClassTypeEntryFIndex序号,从1开始,1固定表示表头信息2~n表示后面分录的信息FParentID记录ICClassType的FIDFTableName表名FLayer分录所在层FEntryType分录类型(0:单表1:多表)FTabIndex分录的TabIndexFMustInput分录体是否必录(0:否;1:是)FKeyField判断必录的分录体关键字段字段说明2ICClassTypeEntryFIndex序号,字段说明3ICClassTableInfoFIDIdentity无实际含意FClassTypeID单据ClassTypeIDFPage所在页,和ICClassTypeEntry的FIndex对应FKey关键字,一般和FieldName一样,在同一个ClassTypeID情况下必须唯一FFieldName字段名称FTableName

表名FTableNameAs表的别名。主要处理多张相同的表出现的情况FListIndex序时薄的顺序FListClassName分组管理单表用,0保存到单表1单表和组别表中都保存2仅在组别表中保存FVisible显示隐藏(-1:单据,序时薄都显示;0:单据,序时薄都不显示,2:序时薄显示,单据不显示)FEnable显示可用(-1:可用;0:不可用)FNeedSave是否要保存(0:否;1:是)FMustInput是否必录(0:否;1:是)字段说明3ICClassTableInfoFIDIdenti字段说明4ICClassTableInfoFCtlType控件类型FLookUpType查找类型(0,无查找,1,基础资料2,辅助资料)FLookUpClassID查找类别FLookUpList目前用于存储一些简单下拉列表框值,还有控制数值型录入框的最小和最大值问题FSRCFieldName关联字段,仅对查找类型>0字段有效FSRCTableName关联表仅对查找类型>0字段有效或查找类别<>0有效FSRCTableNameAs关联表别名FDSPFieldName携带字段FFNDFieldName查找字段FValueLocation显示字段(3显示FDSPFieldName2显示FFNDFieldName1显示FSRCFieldNameFFilter查找过虑FFilterGroup辅助资料类别过虑FValueType字段类型(即SQLServer中各种数据类型对应的整型值)字段说明4ICClassTableInfoFCtlType控字段说明5ICClassTableInfoFSaveRule保存规则FDefValue缺省值FAction回车键行为FUserDefine是否用户定义(1:0:)FLoadAction装载单据时的行为FUncontrol控制字段是否允许复制,引入,交叉分析等FSourceType数据来源类别(0:手工录入;1:新关联;2:关联已有;3:单据编码;4:制单人;5:批次;6:核算项目类别;7:核算项目;8:用户;9:拉列表;10:组合类型;11:复选框;12:用户自定义查找类型)FSubKey子项,只针对组合类型FParentKey父项,只针对组合类型FConditionExt与ICClassCondition中的FID对应,用于在过滤界面上条件的显示字段说明5ICClassTableInfoFSaveRule关于K/3BOS完整案例的介绍,请参考《K3BOS应用开发培训教材》关于K/3BOS完整开发流程的介绍,请参考《K3BOS开发指导手册》关于插件中接口的函数、方法、事件、属性的详细信息,请参考《K3BOS插件开发参考手册》关于BOS万能报表工具包介绍,请参考《K3BOS万能报表工具包用户手册》常见问题请参考《K/3BOS百问百答》关于工业单据插件开发,函数、方法、属性的详细信息,《K3客户化开发工具包》资料关于K/3BOS完整案例的介绍,请参考《K3BOS应用开支持渠道支持渠道Q&AQ&A谢谢!谢谢!演讲完毕,谢谢观看!演讲完毕,谢谢观看!K/3BOS插件开发培训演讲人:李望中金蝶软件(中国)有限公司K/3BOS插件开发培训演讲人:李望中提纲插件开发概述案例介绍插件开发基础插件开发向导数据结构K3ClassEvents业务对象接口BillEvent单据接口ListEvents序事簿接口BaseClassEvent基础资料序事簿接口K3ClassEvents公用对象K3Lib常用元数据表结构提纲插件开发概述为什么要用插件完成当前版本无法用K/3BOS标准功能实现的需求,插件原理图如下插件的作用实现单据、序时簿、基础资料序时簿中特殊的业务流程处理中间层数据改变时的特殊处理规则个性化的菜单、外观定制;增加自定义的菜单并响应其操作对审核、消息流程的自定义控制插件开发概述为什么要用插件插件开发概述插件开发环境

金蝶K/3v10.1以上的版本必选安装客户端、K/3BOS,推荐同时安装中间层MicrosoftVisualBasic

推荐使用vb6.0

版本,并且安装SP5MicrosoftWindows2000Server以上版本推荐采用Server类操作系统作为开发、调试操作系统注意:如果要使用“金蝶K/3BOS插件开发向导”工具,需要采用简体中文操作系统MicrosoftSQLServer2000数据库插件开发概述-开发环境介绍插件开发环境插件开发概述-开发环境介绍提纲插件开发概述案例介绍插件开发基础插件开发向导数据结构K3ClassEvents业务对象接口BillEvent单据接口ListEvents序事簿接口BaseClassEvent基础资料序事簿接口K3ClassEvents公用对象K3Lib常用元数据表结构提纲插件开发概述ABC公司

主营业务是生产和销售各种高档卫浴五金、水暖器材等。拥有五个厂区,产品外销欧美、日本等国家和地区为了统一物流管理,解决重复请购、资金占用严重的问题,ABC公司提出了寄存仓的管理模式,与供应商之间通过统一窗口来管理供应商将物料寄存到ABC公司指定的物流中心仓库,但所有权属供应商ABC公司根据生产实际需求从物流中心领料并进行相应的结算处理案例分析ABC公司为了统一物流管理,解决重复请购、资金占用严重的问题解决方案解决方案演示案例—插件开发需求(一)单据定义寄存入库单新增时默认为2000行在寄存入库单单据上增加复制按钮的浮动按钮,隐藏“页面设置”菜单在寄存入库单序事簿上增加单据变更的菜单及按钮以插件中附带的图片资源文件增加单据变更的显示当单据头金额大于10000时,锁定单据头备注字段当前登录用户只能看到本人制作的寄存入库单寄存入库单新增时给表体赋一行默认值多级审核多级审核业务审核完后仍可修改单据头备注字段单据转换流程寄存入库单下推外购入库单时所选单据部门必须相同演示案例—插件开发需求(一)单据定义提纲插件开发概述案例介绍插件开发基础插件开发向导数据结构K3ClassEvents业务对象接口BillEvent单据接口ListEvents序事簿接口BaseClassEvent基础资料序事簿接口K3ClassEvents公用对象K3Lib常用元数据表结构提纲插件开发概述插件开发基础—

插件开发向导插件开发基础—插件开发向导KFOK/3BOS

中传递数据,主要使用了KFO的2个对象关于

KFO

对象的详细使用,请参考《KFO参考手册》Vector对象相当于一个一维数组,可以说它是一个不定长且可以是任意数据类型的数组,同样可以通过存取数组元素值进行数据传递,一个元素值可以是RecordSet,也可以是一个任意一个数据或对象

Dictionary对象是一个数据字典,字典里可以存放不同的变量,可以给字典里这些变量赋值,或从字典里取出这些变量的值进行数据传递,它可以是任一个变量,也可以是一个对象。在Dictionary对象中主要通过变量名称来进行索引插件开发基础—

数据结构KFO插件开发基础—数据结构两个关键的数据包dctDataBillEvent:PropertyDataListEvents:EventAfterCopyBillCreateData(srcInterIDAsLong,dctDataAsDictionary)dctTableInfoBillEvent:PropertyTableInfoListEvents:PropertyDataSrv.TableInfoBaseClassEvent:PropertyDataSrv.TableInfo插件开发基础—

业务数据包和单据字典包两个关键的数据包插件开发基础—业务数据包和单据字典包插件开发基础—

业务数据包BillEventBillHeadsBillEntrysBillHeadBillEntryBOSFieldsBOSFieldBOSFieldsBOSFielddctData“Page1”“Page2”“Page…”“Pagei”dctFld1dctFld…dctFldnEnu_EntryType_SingleRow“Row1”dctFld1dctFld…dctFldn“Row…”“Rown”Enu_EntryType_MutiRowFDSPFFNDFOLDFMODIFYFFLDsKeysKey插件开发基础—业务数据包BillEventBillHeadctData包含这个单据对象的详细数据每一个Page对应一个数据对象,如果这个Page是单表或者表头,那么这个数据对象是一个字典,否则这个数据对象就是一个Vector,而Vector的每一个子项均为一个字典每一个数据对象字典包含了这一个页面上数据总和,他的每一个Item均为一个字典(这个字典是最明细的)最明细的数据字典包含五个域:FFLD="FFLD"肯定都有FDSP="FDSP"查找关联类型才有FFND="FFND"查找关联类型才有FOLD="FOLD"修改单据时才有FMODIFY="FMODIFY"'修改单据后时才有五个域插件开发基础—

业务数据包dctData包含这个单据对象的详细数据插件开发基础—业插件开发基础—

如何访问dctData包(一)插件开发基础—如何访问dctData包(一)插件开发基础—

如何访问dctData包(二)读取单据头审核日期的值可用以下两种方式:m_billinterface.data(“page1”)(m_billinterface.tableinfo(“map”)(“FCheckDate”))(“FFLD”)m_billinterface.bosheads(1).bosfields(“FCheckDate”).value读取单据体第一行应收数量的值可用以下两种方式:m_billinterface.data(“page2”)(1)(m_billinterface.tableinfo(“map”)(“FMustQty”))(“FFLD”)DimobjasbosfieldDimtmpasdoubleSetobj=m_billinterface.billentrys(1).bosfields(“fmustqty”)Obj.row=1;tmp=obj.value插件开发基础—如何访问dctData包(二)读取单据头审插件开发基础—

数据字典包dctTableInfo包含三部份内容所有Item的详细信息,以字典的形式保存,采用Key

去查询这个Key

是用FTabIndex+Fkey格式化而成所有Page的信息,每一个Page是一个字典包含了这一个Page上组成项的Key这个单据对象的所有Item的Map映射,这是一个字典插件开发基础—数据字典包dctTableInfo包含三部提纲插件开发概述案例介绍插件开发基础插件开发向导数据结构K3ClassEvents业务对象接口BillEvent单据接口ListEvents序事簿接口BaseClassEvent基础资料序事簿接口K3ClassEvents公用对象K3Lib常用元数据表结构提纲插件开发概述插件对象模型(BillEvent)K3ClassEventsBillEvent单据接口ListEvents序事簿接口BaseClassEvent基础资料序事簿接口BillEventK3LibNetUserAccountMenuBarBillHeadsBillEntrysBillHeadBillEntryBOSBandsBOSToolsBOSFieldsBOSBandBOSToolBOSFieldsBOSFieldBOSField插件对象模型(BillEvent)K3ClassEventsBillEvent对象BillEvent对象MenuBar概述BOSBands和BOSBand对象BOSTools和BOSTool对象单据基础对象BillHeads和BillEntrysBOSFields单据接口事件函数、方法属性BillEvent对象BillEvent对象概述BOSBands、BOSTools对象是PublicNotCreatable对象在BillEvent、ListEvents、

BaseClassEvent对象中包含

MenuBar属性使用。例如:DimoMenuBarAsK3ClassEvents.MenuBarSetoMenuBar=BillEventObject.Menubar在BillEvent、ListEvents、BaseClassEvent对象新增事件SubMenuBarInitialize(ByValoMenuBarAsK3ClassEvents.MenuBar)SubMenuBarClick(ByValBOSToolAsK3ClassEvents.BOSTool,CancelAsBoolean)概述BOSBands、BOSTools对象BOSBands和BOSBand对象基本和ActiveBar的Bands、Band对象属性、方法一致BOSBands不能使用ForEach方法遍历BOSBand对象可以通过Add方法来新建BOSBand对象。BOSBands和BOSBand对象基本和ActiveBarBOSTools和BOSTool对象基本和ActiveBar的Tools、Tool对象属性、方法一致BOSTools不能使用ForEach方法遍历BOSTool对象可以通过Add方法来新建BOSTool对象BOSTools和BOSTool对象基本和ActiveBarBOSTools方法详解FunctionAdd(ToolNameAsString)AsBOSTool与ActiveBar的Tools的Add相比可以在任何的BOSTools对象中调用不需要考虑ToolID重复的问题SubInsertBefore(Index,oToolAsBOSTool)Index可以是数字,以表示当前BOSBand上的BOSTool的顺序(与ActiveBar中的方法一致)也可以是一个BOSTool的Name(字符串)SubInsertAfter(Index,oToolAsBOSTool)新增方法,特性与上相同BOSTools方法详解FunctionAdd(Tool练习在寄存入库单单据上增加复制按钮的浮动按钮,隐藏“页面设置”菜单在寄存入库单序事簿上增加单据变更的菜单及按钮以插件中附带的图片资源文件增加单据变更的显示练习在寄存入库单单据上增加复制按钮的浮动按钮,隐藏“页面设置BillEvent对象BillEvent对象MenuBar概述BOSBands和BOSBand对象BOSTools和BOSTool对象单据基础对象BillHeads和BillEntrysBOSFields单据接口事件函数、方法属性BillEvent对象BillEvent对象概述是PublicNotCreatable

对象在BillEvent对象中包含使用。例如:DimoHeadAsK3ClassEvents.BillHeadSetoHead=BillEventObject.BillHeads(1)BillHeads、BillEntrys、BOSFields不能使用ForEach方法遍历对象概述是PublicNotCreatable对象BillEntrys对象BillEntrys对象包含了和单据体相关的属性通过这些属性可以在运行时操作单据体分录相关信息CountLong分录的个数EntryIndexLong序号BOSFields(BOSFields)包含的字段TableNameString分录对应在数据库中的表名EntryLeftLong分录的左EntryTopLong分录的上EntryWidthLong分录的宽度EntryHeightLong分录的高度LayerLong分录所在的层EntryTypeLong分录的类型(单分录、多分录)VisibleBoolean分录的可见性KeyFieldString分录的关键字段MaxRowsLong可以在运行时调整单据体行数(大于1且小于2000)BillEntrys对象BillEntrys对象分录相关信息BOSFields和BOSField对象字段相关信息CountLong字段的个数CaptionString字段的标题FieldNameString字段名TableNameString字段对应在数据库中的表名FieldLeftLong字段的左FieldTopLong字段的上FieldWidthLong字段的宽度FieldHeightLong字段的高度LayerLong字段所在的层FieldLockBoolean字段是否锁定VisibleBoolean字段是否可见FilterString字段的过滤FontBoldBoolean字段字体属性FontItalicBoolean字段字体属性FontNameString字段字体属性FontSizeCurrency字段字体属性FrameBorderBoolean是否显示边框FrameBorderColorLong边框颜色LabelColorLong标签颜色LabelWidthInteger标签宽度MustInputBoolean是否必录NeedSaveBoolean是否需要保存NoteString备注NumberVariant字段的值(用于查找类型字段)PageInteger字段所在的PageTextVariant字段的显示值TextColorLong字段的颜色ValueVariant字段的保存值FKeyString字段的内码BOSField对象每个字段对象,对应单据(包括单据头和单据体)上的每一个字段通过这些属性,可以在运行时操作字段。属性集BOSFields和BOSField对象字段相关信息CounBOSField属性详解某些属性值只适用于单据头中的字段FieldTop\FieldLeft\FieldHeight\FieldWidthLabelWidth\LabelColor\FrameBorderColor\FrameBorderFontName\FontSize\FontBold\FontItalic\TextColor某些两者都支持TableName\FieldName\Caption\Page\Layer\FKeyVisible\NeedSave\MustInput\FieldLock\Note某些只适用于特殊的字段Row 仅支持多分录单据体Filter 仅支持基础资料字段BOSField属性详解某些属性值只适用于单据头中的字段BOSField属性详解Visible:字段显示/隐藏属性,只有设计时没有设计为“可见”状态的字段,才可以在运行时更改可见性状态FieldLock:只有设计时没有设计为“锁定”状态的字段,才可以在运行时更改锁定状态Value:得到字段内码值。即保存在数据库中的值Number:得到字段查找类型字段查找值Text:得到字段显示值。即显示在界面的值,不支持通过该属性直接赋值。Value:得到/设置字段非查找类型字段赋值使用Number:得到/设置字段查找类型字段赋值使用BOSField属性详解Visible:字段显示/隐藏属性练习通过插件实现寄存入库单新增时默认表体行数为2000行,主要练习BillEntry对象的Maxrows属性通过插件实现当单据头金额大于10000时,锁定单据头备注字段,主要练习单据Change事件,BosField对象的FieldLock属性练习通过插件实现寄存入库单新增时默认表体行数为2000行,主BillEvent对象BillEvent对象MenuBar概述BOSBands和BOSBand对象BOSTools和BOSTool对象单据基础对象BillHeads和BillEntrysBOSFields单据接口事件函数、方法属性BillEvent对象BillEvent对象事件EventMenuBarInitialize(oMenuBarAsMenuBar)说明:该事件在菜单、工具栏初始化时发生。

EventMenuBarClick(BOSToolAsBOSTool,CancelAsBoolean)说明:该事件在点击菜单、工具栏项时发生。EventAfterNewBill()说明:新建单据对象后发生。

EventAfterLoadBill()说明:单据对象加载完成后发生。EventAfterCopyBill()说明:复制单据后发生EventAfterSelBill(lSelBillTypeAsLong)说明:选单操作完成后发生。

EventBeforeVerify(bCancelAsBoolean)说明:单据对象保存前、系统进行校验操作前发生。EventChange(dctAsDictionary,dctFldAsDictionary,ColAsLong,RowAsLong,CancelAsBoolean)说明:单据对象上的字段值发生改变时发生。

BillEvent对象-事件事件BillEvent对象-事件方法FunctionGetFieldValue(sKeyAsString,[nRowAsLong=-1],[ValueTypeAsEnu_ValueType=Enu_ValueType_FFLD])

说明:用于返回字段的值。

FunctionSetFieldValue(sKeyAsString,vValue,[nRowAsLong=-1])AsBoolean

说明:用于设置字段的值。

FunctionInsertNewRowAndFill(nPageAsLong,nRowAsLong,ParamArrayvFieldsData()AsVariant)AsBoolean

说明:在多分录单据体中插入一个新行,并填充数据。

FunctionGetDataFld(dctAsDictionary,[RowAsLong])AsDictionary

说明:获得单据指定字段的值的对象。

FunctionGetFieldInfoByKey(sKeyAsString,sPKeyAsString,lIndexAsLong)AsDictionary

说明:通过给定的字段的关键名称获得字段的模版的对象。

FunctionRefreshBill()

说明:刷新当前单据对象。

FunctionIsChange()AsBoolean

说明:判断单据对象是否被改变。FunctionDeleteEntryData(nPageAsLong)AsBoolean

说明:删除单据对象指定单据体分录内全部数据。

BillEvent对象-函数、方法方法BillEvent对象-函数、方法BillEvent对象-属性BillEvent对象-属性练习通过插件实现当寄存入库单业务审核后仍可修改单据头备注字段,主要练习单据Afterload事件,单据方法SetBarStatus、SetBillFormCaption通过插件实现寄存入库单新增时给表体赋一行值,物料代码为”01.001”,应收数量为100,实收数量为100,单价为1500。主要练习Insertnewrowandfill方法练习通过插件实现当寄存入库单业务审核后仍可修改单据头备注字段插件对象模型(ListEvents)K3ClassEventsBillEvent单据接口ListEvents序事簿接口BaseClassEvent基础资料序事簿接口ListEventsK3LibNetUserAccountMenuBarBillHeadsBillEntrysBillHeadBillEntryBOSBandsBOSToolsBOSFieldsBOSBandBOSToolBOSFieldsBOSFieldBOSField插件对象模型(ListEvents)K3ClassEventListEvents对象ListEvents对象事件函数、方法属性ListEvents对象ListEvents对象ListEvents对象-事件EventMenuBarInitialize(oMenuBarAsMenuBar)说明:菜单、工具栏初始化时发生。

EventMenuBarClick(BOSToolAsBOSTool,CancelAsBoolean)说明:点击菜单、工具栏项时发生。

EventAfterCopyBillCreateData(srcInterIDAsLong,dctDataAs

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论