k3老单二次开发课件文档资料

上传人:人*** 文档编号:568586944 上传时间:2024-07-25 格式:PPT 页数:59 大小:697.50KB
返回 下载 相关 举报
k3老单二次开发课件文档资料_第1页
第1页 / 共59页
k3老单二次开发课件文档资料_第2页
第2页 / 共59页
k3老单二次开发课件文档资料_第3页
第3页 / 共59页
k3老单二次开发课件文档资料_第4页
第4页 / 共59页
k3老单二次开发课件文档资料_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《k3老单二次开发课件文档资料》由会员分享,可在线阅读,更多相关《k3老单二次开发课件文档资料(59页珍藏版)》请在金锄头文库上搜索。

1、 版权所有 1993-2009 金蝶软件(中国)有限公司二次开发简介 曹且根曹且根金蝶软件(中国)有限公司金蝶软件(中国)有限公司研发中心研发中心P2 版权所有 1993-2009 金蝶软件(中国)有限公司提纲n工业老单二次开发n工业老单二次开发所需环境及要点n工业老单序时薄二次开发n工业老单单据二次开发n工业老单实战演练n组件编译及布署n问题交流P3 版权所有 1993-2009 金蝶软件(中国)有限公司二次开发所需环境及要点 单据二次开发是针对现目前单据的一些功能无法满足一些客户的特殊要求,同时分公司又有能力进行二次开发而提出的,这样既可以在现有的系统不做变动的情况下面满足用户的需求,同时

2、也增强了系统的稳定性。本篇所介绍所用到的动态连接库名为:K3BillTransfer.dllK3BillTransfer.dll 通过该说明文档,你可以了解到1.如何通过K3BillTransferK3BillTransfer组件在录单过程中对单据上各项目加以控制。2.如何通过K3BillTransferK3BillTransfer组件实现自定义功能菜单。 3.如何通过K3BillTransferK3BillTransfer组件控制数据的保存。4.如何在序时薄上增加菜单及应用。5.应用示例实战演练。 适用对象 需要在K/3供应链系统单据上进行二次开发的开发者 开发环境 1.安装过K/3ERP

3、9.41以后的版本且购买过供应链系统。 2.VB6.0企业版+SP1 3.SQL SERVER 2000及后续版本(SQL SERVER 2019,SQL SERVER 2019)P4 版权所有 1993-2009 金蝶软件(中国)有限公司序时薄二次开发老单序时薄开发相对简单,它只能在序时薄上增加菜单,通过菜单去实现一些二次开发功能.使用方法:使用方法:1.)在t_BandToolMapping中的FcomName填入需要调用组件的名称,注意:不要覆盖原有内容,要在原有内容上用“| ”分割后加入自己的组件,可以加多个组件。第一个插件前一定要加“|”,因为之前的部分是记录了其他信息。2)二次开发

4、组件必须实现MainFunction(ByVal sKey As string,oList AsObject,Byref bCancel as Boolean)方法。要终止事件,请将bCancel设置为true。3)oList为一个即是ICList,可以使用其中的任何Public方法。比方说 GetSelData 为取得选取的对象 P5 版权所有 1993-2009 金蝶软件(中国)有限公司序时薄二次开发流程图序时薄二次开发流程图 P6 版权所有 1993-2009 金蝶软件(中国)有限公司序时薄二次开发范例范例增加元数据按钮菜单名增加元数据按钮菜单名“FMenuPC”,FMenuPC”,新增

5、加一个不存在的新增加一个不存在的FToolIDFToolIDDelete From t_MenuToolBar Where FToolID = 10002Delete From t_MenuToolBar Where FToolID = 10002insert into t_MenuToolBar ( insert into t_MenuToolBar ( FToolID,FName,FCaption,FCaption_CHT,FCaption_EN,FImageName,FToFToolID,FName,FCaption,FCaption_CHT,FCaption_EN,FImageName

6、,FToolTip,FToolTip_CHT,FToolTip_EN,FControlType,FVisible,FEnable,FolTip,FToolTip_CHT,FToolTip_EN,FControlType,FVisible,FEnable,FChecked,FShortCut,FCBList,FCBList_CHT,FCBList_EN,FCBStyle,FCBWChecked,FShortCut,FCBList,FCBList_CHT,FCBList_EN,FCBStyle,FCBWidth,FIndex,FToolCaption,FToolCaption_CHT,FToolC

7、aption_EN) idth,FIndex,FToolCaption,FToolCaption_CHT,FToolCaption_EN) values (10002,FMenuPC,values (10002,FMenuPC,外购入库拆分外购入库拆分,外购入库拆分外购入库拆分,外购入库外购入库拆分拆分,39,39,外购入库拆分外购入库拆分,外购入库拆分外购入库拆分,外购入库拆分外购入库拆分,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,外购入库拆分外购入库拆分,外购入库拆分外购入库拆分,外购外购入库拆分入库拆分)P7 版权所有 1993-2009 金蝶软件(中国)有限公司序

8、时薄二次开发范例续范例续 将上面的按钮插入到菜单栏和工具栏将上面的按钮插入到菜单栏和工具栏将上面的按钮插入到菜单栏和工具栏将上面的按钮插入到菜单栏和工具栏在在t_BandToolMappingt_BandToolMapping中的中的FcomNameFcomName填入需要调用组件的名称,注意:不填入需要调用组件的名称,注意:不要覆盖原有内容,要在原有内容上用要覆盖原有内容,要在原有内容上用“| ”| ”分割后加入自己的组件,分割后加入自己的组件,可以加多个组件。第一个插件前一定要加可以加多个组件。第一个插件前一定要加“|”|”,因为之前的部分是记,因为之前的部分是记录了其他信息。录了其他信息

9、。FIDFID对应对应iclisttemplateiclisttemplate里的里的FMenuID, FBandIDFMenuID, FBandID表示放在哪个菜单下表示放在哪个菜单下( (对对应应t_BandToolMapping.FSubBandID)t_BandToolMapping.FSubBandID),可以通过以下语句关联得到是哪,可以通过以下语句关联得到是哪个菜单个菜单 select a.*,b.fname,b.FCaption From t_BandToolMapping a, select a.*,b.fname,b.FCaption From t_BandToolMapp

10、ing a, t_MenuToolBar b where a.FID = 82 and a.ftoolid=b.ftoolid t_MenuToolBar b where a.FID = 82 and a.ftoolid=b.ftoolid 将按钮插入到菜单栏将按钮插入到菜单栏将按钮插入到菜单栏将按钮插入到菜单栏 Delete From t_BandToolMapping where FBandID=3 and FToolID = Delete From t_BandToolMapping where FBandID=3 and FToolID = 10002 and FID = 821000

11、2 and FID = 82insert into t_BandToolMapping insert into t_BandToolMapping (FID,FBandID,FToolID,FSubBandID,FIndex,FComName,FBeginGroup) (FID,FBandID,FToolID,FSubBandID,FIndex,FComName,FBeginGroup) values (82,3,10002,0,65,|K3ListPlug.List,0)values (82,3,10002,0,65,|K3ListPlug.List,0)P8 版权所有 1993-2009

12、金蝶软件(中国)有限公司范例续范例续将按钮插入到工具栏将按钮插入到工具栏将按钮插入到工具栏将按钮插入到工具栏Delete From t_BandToolMapping where FBandID=52 and FToolID = Delete From t_BandToolMapping where FBandID=52 and FToolID = 10002 and FID = 8210002 and FID = 82insert into t_BandToolMapping insert into t_BandToolMapping (FID,FBandID,FToolID,FSubBan

13、dID,FIndex,FComName,FBeginGroup) (FID,FBandID,FToolID,FSubBandID,FIndex,FComName,FBeginGroup) values (82,52,10002,0,65,|K3ListPlug.List,0)values (82,52,10002,0,65,|K3ListPlug.List,0)在外购入库序时薄显示按钮在外购入库序时薄显示按钮( (如果里面有如果里面有|V,|V,则只能在后面加菜单项则只能在后面加菜单项) )Update IclistTemplate set FLogicStr=FLogicStr+ Case

14、When Update IclistTemplate set FLogicStr=FLogicStr+ Case When Right(FLogicStr,1)=| then V:FMenuPC else |V:FMenuPC endRight(FLogicStr,1)=| then V:FMenuPC else |V:FMenuPC end where FID =1 and not FLogicStr like %FMenuPC% where FID =1 and not FLogicStr like %FMenuPC%序时薄二次开发P9 版权所有 1993-2009 金蝶软件(中国)有限公

15、司数据元建好之后,再新建一个工程文件。如:数据元建好之后,再新建一个工程文件。如:新建一个新建一个vbvb工程,命名为:工程,命名为:ProListBillProListBill,在工程中新建一个类命名为:,在工程中新建一个类命名为:ListBillListBill序时薄二次开发P10 版权所有 1993-2009 金蝶软件(中国)有限公司在类在类ListBillListBill中添加以下代码中添加以下代码以上只是序时薄二次开发实现的一个简单的例子,具体的二次开发,要根据不同的需求,进行相应的开发,接口都是统一调用MainFunctionMainFunction函数,再根函数,再根据具体情况进

16、行扩展。据具体情况进行扩展。序时薄二次开发P11 版权所有 1993-2009 金蝶软件(中国)有限公司单据二次开发单据二次开发主要通过K3BillTransferK3BillTransfer组件控制单据上一些操作。其常用属性其常用属性1.Property Cnnstring As String1.Property Cnnstring As String当前数据库的MMTS.PropsString连接串。2 2Property SystemName As StringProperty SystemName As String当前系统名称。3 3Property LastInfo As Stri

17、ngProperty LastInfo As String 最后一次系统返回的各种信息4 4Property BillForm As ObjectProperty BillForm As Object 整个单据窗体对象。可通过该对象访问单据上的任何一个对象,包括控件, 菜单。 共有的方法有:InsertRow(),在Grid的当前行追加一行,它没有参数。5 5Property BillFunc as ObjectProperty BillFunc as Object代表单据对象。目前没什么用途。P12 版权所有 1993-2009 金蝶软件(中国)有限公司其常用属性其常用属性续续6 6Prop

18、erty Head As ObjectProperty Head As Object 单据表头控件,是一个KDText控件数组7 7Property Grid As ObjectProperty Grid As Object 单据分录控件,为FpSpread控件8 8Property SumGrid As ObjectProperty SumGrid As Object单据分录合计控件, 为FpSpread控件9 9Property HeadCtl As VariantProperty HeadCtl As Variant对应表头控件数组,记录每个表头项目各属性的数组如果要改变HeadCtlH

19、eadCtl中的某个属性值,需先对HeadCtlHeadCtl做一个备份,然后修改此备份的相应属性值,再将此备份赋值给HeadCtlHeadCtl。单据二次开发P13 版权所有 1993-2009 金蝶软件(中国)有限公司其常用属性其常用属性续续1010Property EntryCtl As VariantProperty EntryCtl As Variant对应分录各列,记录每个分录列各属性的数组如果要改变EntryCtlEntryCtl中的某个属性值,需先对EntryCtlEntryCtl做一个备份,然后修改此备份的相应属性值,再将此备份赋值给EntryCtlEntryCtl1111P

20、roperty SaveVect As KFO.VectorProperty SaveVect As KFO.Vector二次开发外部数据存取接口。在录单过程中,用户可将某些数据保存在此Vector中,在单据保存时,再通过二次开发中间层组件,将此Vector中的数据保存到指定位置。SaveVect.Item(1) 为一个KFO.Dictionary对象该对象包含以下四个系统数据 SaveVect.Item(1).Value(FInterID):单据内码 SaveVect.Item(1).Value(FTransType) :单据事务类型 SaveVect.Item(1).Value(ISRed

21、Bill) :是否红字单据 SaveVect.Item(1).Value(BillChecked) :是否审核。单据二次开发P14 版权所有 1993-2009 金蝶软件(中国)有限公司常用的方法常用的方法Function AddUserMenuItem(ByVal Caption As String, ByVal Function AddUserMenuItem(ByVal Caption As String, ByVal RootMenuCaption As String = ) RootMenuCaption As String = )说明:添加一个用户自定义菜单项,系统一共预设了五个菜

22、单项供二次开发使用参数:Caption:菜单名称 RootMenuCaption:根菜单名称。缺省为“自定义菜单”2 2Function GetGridText(ByVal Row As Long, ByVal Col As Long) As Function GetGridText(ByVal Row As Long, ByVal Col As Long) As String String说明:获取分录某单元格的值参数:Row:分录行,Col:分录列3 3Function GetHeadNumber(ByVal CtlIndex As Long) As StringFunction GetH

23、eadNumber(ByVal CtlIndex As Long) As String说明:获取表头某项的代码参数:CtlIndex:表头控件索引44Function GetHeadText(ByVal CtlIndex As Long) As StringFunction GetHeadText(ByVal CtlIndex As Long) As String说明:获取表头某项的文本参数:CtlIndex:表头控件索引单据二次开发P15 版权所有 1993-2009 金蝶软件(中国)有限公司单据二次开发常用的方法常用的方法续续5.Function GetSumGridText(ByVal

24、Row As Long, ByVal Col As Long) 5.Function GetSumGridText(ByVal Row As Long, ByVal Col As Long) As String As String说明:获取合计行某列的值参数:Row:行。一般为1,Col:分录列6 6Function SetGridText(ByVal Row As Long, ByVal Col As Long, Function SetGridText(ByVal Row As Long, ByVal Col As Long, ByVal Value, ByVal InterID As L

25、ong = 0, ByVal ByVal Value, ByVal InterID As Long = 0, ByVal sName As String = ) As Boolean sName As String = ) As Boolean说明:设置分录某单元格的值,当分录为查找类型时,会把相应的信息一起 携带到相应的位置,如当为物料代码时,它会携带物料的一些基本 信息物料名称等。参数:Row:分录行,Col:分录列, Value:设置的值。如果该单元格是查找 类型的,Value应设置为代码。InterID:暂未使用,sName:暂未使用P16 版权所有 1993-2009 金蝶软件(中国

26、)有限公司常用的方法常用的方法续续7 7Function SetHead(ByVal Index As Long, ByVal Value, ByVal Function SetHead(ByVal Index As Long, ByVal Value, ByVal InterID As Long = 0, ByVal sName As String = ) InterID As Long = 0, ByVal sName As String = ) As Boolean As Boolean说明:设置表头某项的值参数:Index:表头控件索引, Value:设置的值。如果该表头项是查找类型的

27、,Value应设置为代码, InterID:暂未使用, sName:暂未使用8 8Function SetSumGridText(ByVal Row As Long, ByVal Col As Function SetSumGridText(ByVal Row As Long, ByVal Col As Long, ByVal Value) As Boolean Long, ByVal Value) As Boolean说明:设置分录合计某列的值参数:Row:分录行。一般为1 Col:分录列 Value:设置的值。单据二次开发P17 版权所有 1993-2009 金蝶软件(中国)有限公司常用的

28、事件常用的事件1.Public Event BillInitialize()1.Public Event BillInitialize()单据初始化完成时激发该事件2 2Public Event BillTerminate()Public Event BillTerminate()单据卸载完成时激发该事件3 3Public Event UserMenuClick(ByVal Index As Long, ByVal Public Event UserMenuClick(ByVal Index As Long, ByVal Caption As String) Caption As String

29、)说明:当点击用户自定义的菜单时激发这个事件。参数:Index:表示第几个菜单、由添加菜单的先后顺序决定, Caption:菜单项的标题,如何添加自定义菜单请参见方法 AddUserMenuItem4.Public Event HeadChange(ByVal CtlIndex As Long, ByVal Value 4.Public Event HeadChange(ByVal CtlIndex As Long, ByVal Value As Variant, ByVal bNewBill As Boolean, Cancel As As Variant, ByVal bNewBill A

30、s Boolean, Cancel As Boolean) Boolean)说明:当表头的一个项目改变时激发这个事件参数: ctlIndex 表头字段索引 Value 当前值 bNewBill是否是新增单据 Cancel是否取消单据二次开发P18 版权所有 1993-2009 金蝶软件(中国)有限公司常用的事件常用的事件续续5.Public Event LeveCell(ByVal Col As Long, ByVal Row As Long, _5.Public Event LeveCell(ByVal Col As Long, ByVal Row As Long, _ ByVal NewC

31、ol As Long, ByVal NewRow As Long, Cancel As ByVal NewCol As Long, ByVal NewRow As Long, Cancel As Boolean) Boolean)说明:当离开分录的一个单元格的时候激发这个事件参数:Col 分录的要离开列 Row分录的要离开行 NewCol 新的列 NewRow新的行 Cancel是否取消6 6Public Event GridChange(ByVal Col As Long, ByVal Row As Public Event GridChange(ByVal Col As Long, ByV

32、al Row As Long, ByVal Value As Variant, ByVal bNewBill As Long, ByVal Value As Variant, ByVal bNewBill As Boolean, Cancel As Boolean) Boolean, Cancel As Boolean)说明:当表体的一个项目改变时激发这个事件参数: Col 分录的当前列 Row分录的当前行 Value 当前值 bNewBill是否是新增单据 Cancel是否取消单据二次开发P19 版权所有 1993-2009 金蝶软件(中国)有限公司常用的事件常用的事件续续Public Ev

33、ent BeforGridLookUp(ByVal Row As Long, ByVal Col As Public Event BeforGridLookUp(ByVal Row As Long, ByVal Col As Long, ByVal nLookUpClsID As Long, Cancel As Boolean) Long, ByVal nLookUpClsID As Long, Cancel As Boolean)说明:在分录执行查找功能之前激发这个事件参数: Col 分录的当前列,Row分录的当前行, nLookUpClsID 当前查询的资料类型,Cancel是否取消8 8

34、Public Event EndGridLookUp(ByVal Row As Long, ByVal Col As Public Event EndGridLookUp(ByVal Row As Long, ByVal Col As Long, ByVal nLookUpClsID As Long) Long, ByVal nLookUpClsID As Long)说明:在分录完成查找功能之后激发这个事件参数: Col 分录的当前列,Row分录的当前行, nLookUpClsID 当前查询的资料类型9 9Public Event BeforHeadLookUp(ByVal CtlIndex

35、As Long, ByVal Public Event BeforHeadLookUp(ByVal CtlIndex As Long, ByVal nLookUpClsID As Long, Cancel As Boolean) nLookUpClsID As Long, Cancel As Boolean)说明:在表头的一个项目执行查找功能之前激发这个事件参数: ctlIndex表头字段索引 nLookUpClsID 当前查询的资料类型 Cancel是否取消单据二次开发P20 版权所有 1993-2009 金蝶软件(中国)有限公司常用的事件常用的事件续续Public Event EndHea

36、dLookUp(ByVal CtlIndex As Long, ByVal Public Event EndHeadLookUp(ByVal CtlIndex As Long, ByVal nLookUpClsID As Long) nLookUpClsID As Long)说明:在表头的一个项目完成查找功能之后激发这个事件,参数: ctlIndex表头字段索引nLookUpClsID 当前查询的资料类型1111Public Event BeforeSave(ByVal bNew As Boolean, ByRef Public Event BeforeSave(ByVal bNew As B

37、oolean, ByRef ReturnCode As Long) ReturnCode As Long)说明:在单据执行保存功能的时候激发这个事件参数: bNew 表示是否是新增单据,ReturnCode 返回参数 -1: 失败,结束 单据保存;0:成功,继续单据保存 ,1:成功返回,结束单据保存1212Public Event EndSave(ByVal BillNo As String)Public Event EndSave(ByVal BillNo As String)说明:在单据执行完成保存功能的时候激发这个事件参数: BillNo表示单据的编号单据二次开发P21 版权所有 199

38、3-2009 金蝶软件(中国)有限公司常用的事件常用的事件续续13.Public Event LoadBillEnd(ByVal ShowType As Long)13.Public Event LoadBillEnd(ByVal ShowType As Long)说明:在单据装载完成的时候激发这个事件参数: ShowType 单据显示状态0新增 1.修改 2.查看 3.审核1414Public Event NewBillEnd()Public Event NewBillEnd()说明:在单据新增完成的时候激发这个事件1515Public Event SetMenuBarCtlPropEnd(

39、ByVal ShowType As Long, Public Event SetMenuBarCtlPropEnd(ByVal ShowType As Long, ByVal BillChecked As Boolean) ByVal BillChecked As Boolean)说明:在单据设置菜单、工具条各属性完成的时候激发这个事件参数:ShowType 单据显示状态 0新增 1.修改 2.查看 3.审核 BillChecked 单据是否已被审核1616Public Event BeforeFillBillData(ByVal BillTransType As Long, Public E

40、vent BeforeFillBillData(ByVal BillTransType As Long, ByVal BillInterID As Long) ByVal BillInterID As Long)说明:在装载某张单据之前激发这个事件参数: BillTransType 单据事务类型 BillInterID单据内码单据二次开发P22 版权所有 1993-2009 金蝶软件(中国)有限公司常用的事件常用的事件续续1717Public Event EndBillFormActive()Public Event EndBillFormActive()说明:在显示单据之后激发这个事件181

41、8Public Event GridFormat( ByVal Col As Public Event GridFormat( ByVal Col As Long, ByVal Row As Long) Long, ByVal Row As Long)说明:在设置单据体格式后激发这个事件参数:Col要设置格式的目标列 Row要设置格式的目标行1919Public Event RefreshControl()Public Event RefreshControl()说明:在设置单据的单元格和单据头的锁定状态后激发这个事件2020Public Event BeforeEntrySplit(ByVa

42、l pCurRow As Long, ByVal Public Event BeforeEntrySplit(ByVal pCurRow As Long, ByVal pSplitCount As Long, ByVal pSplitMethod As Long, pSplitCount As Long, ByVal pSplitMethod As Long, ByRef pCancel As Boolean) ByRef pCancel As Boolean)说明:在单据的拆分操作之前激发此事件参数:pCurRow 要拆分的当前分录行 pSplitCount拆分的数目 pSplitMetho

43、d拆分分录位置 0 插入式, 1追加式 pCancel 是否取消拆分 true:取消拆分false:拆分单据二次开发P23 版权所有 1993-2009 金蝶软件(中国)有限公司2121Public Event AfterEntrySplit(ByVal pCurRow As Long, ByVal Public Event AfterEntrySplit(ByVal pCurRow As Long, ByVal pSplitCount As Long, ByVal pSplitMethod As Long) pSplitCount As Long, ByVal pSplitMethod As

44、 Long)说明:在单据的拆分操作之后激发此事件参数:pCurRow 被拆分的分录行 pSplitCount被拆分成的数目 pSplitMethod拆分分录位置 0: 插入式, 1:追加式2222Public Event OnBeforeDelRow(ByVal lRow As Long, ByRef Public Event OnBeforeDelRow(ByVal lRow As Long, ByRef bCancel As Boolean) bCancel As Boolean)说明:在单据删除指定行之前激发此事件参数:lRow指定要删除的行,bCancel是否取消删除,true:取消删

45、除 false:删除23. Public Event OnAfterDelRow(ByVal lRow As Long, ByRef 23. Public Event OnAfterDelRow(ByVal lRow As Long, ByRef bCancel As Boolean) bCancel As Boolean)说明:在单据删除指定行后激发此事件参数:lRow被删除的行 bCancel备用参数,目前没用到单据二次开发P24 版权所有 1993-2009 金蝶软件(中国)有限公司中间层事件中间层事件如果需要在单据保存的事务处理过程中插入一些用户处理过程,可以编写一个用户中间层,必须包

46、含以下两个函数:1 1Public Function BeginSave(ByVal Sdsn As String, ByRef Public Function BeginSave(ByVal Sdsn As String, ByRef SaveVect As KFO.Vector, ByRef ReturnMsg As String) As SaveVect As KFO.Vector, ByRef ReturnMsg As String) As Boolean Boolean说明:在单据保存的事务处理中,在单据数据保存到数据库之前,调用 该函数。返回值:FALSE 保存事务终止,返回错误。

47、 TRUE 单据继续保存事务 处理。参数:Sdsn:MMTS.PropsString,SaveVect:二次开发外部数据存取接口。 ReturnMsg:失败时返回的错误信息。单据二次开发P25 版权所有 1993-2009 金蝶软件(中国)有限公司中间层事件中间层事件续续2 2Public Function EndSave(ByVal Sdsn As String, ByRef Public Function EndSave(ByVal Sdsn As String, ByRef SaveVect As KFO.Vector, ByRef ReturnMsg As String) As Boo

48、leanSaveVect As KFO.Vector, ByRef ReturnMsg As String) As Boolean说明:在单据保存的事务处理中,在单据数据保存到数据库之后,调 用该函数。返回值:FALSE 保存事务终止,返回错误。TRUE单据继续保存事务处理。参数:Sdsn:MMTS.PropsString SaveVect:二次开发外部数据存取接口。 ReturnMsg:失败时返回的错误信息。单据二次开发P26 版权所有 1993-2009 金蝶软件(中国)有限公司关于关于HeadCtlHeadCtl、EntryCtlEntryCtl数组属性和数组属性和HeadHead控件数

49、组、控件数组、GridGrid的简要说明的简要说明HeadCtlHeadCtl ID As Integer 数组的Index与KDCtl的Index相对应,(FCtlIndex) Caption As String KDCtl的Caption FontName As String 字体 FontSize As Integer 字体大小 FCtlIndex As Integer 控件序号 TabIndex As Integer TAB索引 Left As Single 左 Top As Single 上 Width As Single 宽 Height As Single 高 Enable As

50、 Boolean 控件是否Locked与KDCtl的Locked属性相对应 EnableValue As Integer件在各种状态下的可用性:新增、修改、察看、审核、下达。单据二次开发P27 版权所有 1993-2009 金蝶软件(中国)有限公司HeadCtlHeadCtl数组续数组续用一个五位的二进制数表示,可见则对应位为1,否则为0。常用值:0、31。 bPrint As Boolean 是否打印 Visible As Boolean 是否可见 VisibleValue As Integer 控件在各种状态下的可见性:新增、修改、察看、审核、下达。用一个五位的二进制数表示,可见则对应位为

51、1,否则为0。常用值:0、31。 NeedSave As Boolean 该控件的值是否保存 RelateOutTbl As Boolean 该控件的值是否来自其他表 MustInput As Boolean 该控件是否必须输入 LookUpCls As Integer 如果控件的类型是查找类型的(LookUpCls=ctlLookUp),则该属性标示查找的类型 -控件的数据来源属性 单据二次开发P28 版权所有 1993-2009 金蝶软件(中国)有限公司HeadCtlHeadCtl数组续数组续 InterID As Long FInterID As String nterID 对应的字段名

52、 Number As String FNumber As String Number 对应的字段名 Name As String FName As String Name 对应的字段名 -控件的数据保存属性 FieldName As String 该值保存时对应的字段名 Vale As String 保存的值(要用ValType来格式化) Filter As String 查找的过滤条件 LOCKA As Boolean 选单锁定单据二次开发P29 版权所有 1993-2009 金蝶软件(中国)有限公司EntryCtl EntryCtl 数组数组ID As Integer 数组的Index与K

53、DCtl的Index相对应,(FCtlIndex)CtlType As E_CtlType 控件的类型(KCtlType)Enable As Boolean 控件是否Locked与KDCtl的Locked属性相对应EnableValue As Integer控件在各种状态下的可用性:新增、修 改、察看、审核、下达。用一个五位的二进制数表示, 可见则对应位为1,否则为0。常用值:0、31。bPrint As Boolean 是否打印Visible As Boolean 是否可见VisibleValue As Integer 控件在各种状态下的可见性:新增、修改、 察看、审核、下达。用一个五位的二

54、进制数表示,可见则对应 位为1,否则为0。常用值:0、31。NeedSave As Boolean 该控件的值是否保存RelateOutTbl As Boolean 该控件的值是否来自其他表MustInput As Boolean 该控件是否必须输入LookUpCls As Integer 如果控件的类型是查找类型的(LookUpCls=ctlLookUp),单据二次开发P30 版权所有 1993-2009 金蝶软件(中国)有限公司EntryCtlEntryCtl数组续数组续则该属性标示查找的类型 NeedCount As Boolean 是否需要合计 StatCount As Boolean

55、 是否汇总类字段 FCtlIndex As Integer 控件序号 FCtlOrder As Integer 控件顺序号 RelationID As String 该列相关联的父级列 -控件的数据来源属性 FInterID As String InterID 对应的字段名 FNumber As String Number 对应的字段名 FName As String Name 对应的字段名 FilterString As String DInterID() As String 如果该控件是查找类型的,则在该数组内记录InterID的值,其他的值直接从界面中取得 单据二次开发P31 版权所有

56、1993-2009 金蝶软件(中国)有限公司EntryCtlEntryCtl数组续数组续-控件的数据保存属性 SaveRule As String FieldName As String 该值保存时对应的字段名 ValType As E_ValType 保存值的数据类型 SaveValue As E_SaveValue 保存何种类型的值(FName、 InterID、Number) DName() As String DNumber() As String Filter() As StringHeadHeadItemID 当前数据的内码ItemName当前数据的名称 ItemNumber当前数

57、据的ID Text控件显示的Text单据二次开发P32 版权所有 1993-2009 金蝶软件(中国)有限公司GrigGrig控件控件GridGridSetText(col as Long,Row as Long , var) 方法给数据控件的第Col列,第Row行赋值varGetText(col as Long,Row as Long , var) 方法取数据控件的第Col列,第Row行的值varCol指定起始列Col2指定结束列Row指定起始行Row2 指定结束行Lock是否锁定Value 指定行列的单元格的值单据二次开发P33 版权所有 1993-2009 金蝶软件(中国)有限公司二次开

58、发实现的步骤:第一步、新建组件工程(假设工程名为第一步、新建组件工程(假设工程名为ReDevProReDevPro,包含一个类名为,包含一个类名为 clsReDevclsReDev的类模块),引用的类模块),引用k3BillTransfer k3BillTransfer 组件和其他你要使用的组组件和其他你要使用的组件例如件例如ADO-Microsoft ActiveX Data Objects 2.1 LibraryADO-Microsoft ActiveX Data Objects 2.1 Library等。等。第二步、在第二步、在clsReDevclsReDev类代码中声明类代码中声明 P

59、rivate WithEvents m_BillTransfer As k3BillTransfer.Bill Private WithEvents m_BillTransfer As k3BillTransfer.Bill。第三步、必须添加以下代码否则系统不能够传递事件到你的组件中第三步、必须添加以下代码否则系统不能够传递事件到你的组件中 Public Sub Show(ByVal o As Object) Public Sub Show(ByVal o As Object) Set m_BillTransfer = o Set m_BillTransfer = o End Sub End

60、Sub第四步、在第四步、在m_BillTransferm_BillTransfer的各事件中编写相应处理代码。例如的各事件中编写相应处理代码。例如 Private Sub Private Sub m_BillTransfer_BillInitializem_BillTransfer_BillInitialize()() Set cn = New ADODB.Connection Set cn = New ADODB.Connection cn.CursorLocation = adUseClient cn.CursorLocation = adUseClient cn.Open m_BillT

61、ransfer. cn.Open m_BillTransfer.CnnstringCnnstring End Sub End Sub单据二次开发P34 版权所有 1993-2009 金蝶软件(中国)有限公司二次开发实现的步骤续:第五步、编写完成以后编译你的工程第五步、编写完成以后编译你的工程第六步、注册二次开发组件使单据调用时能触发第六步、注册二次开发组件使单据调用时能触发在表在表t_ThirdpartyComponentt_ThirdpartyComponent中增加二次开发组件记录,各字段中增加二次开发组件记录,各字段 含义为含义为FTypeID:FTypeID:二次开发插件类型,二次开发

62、插件类型,0 0为客户端插件;为客户端插件;2 2为中间层插件为中间层插件FTypeDetailIDFTypeDetailID:单据类型:单据类型IDID,客户端表示对应表,客户端表示对应表ICTransactionTypeICTransactionType的的 FID FID,中间层表示事件类型,中间层表示事件类型FIndex:FIndex:组件调用顺序,按组件调用顺序,按FTypeDetailIDFTypeDetailID排取一个值排取一个值FComponentNameFComponentName:客户端二次开发组件,如:客户端二次开发组件,如PrjDemo.clsDemoPrjDemo.

63、clsDemoFComponentSrv:FComponentSrv:中间层保存二次开发组件名称中间层保存二次开发组件名称FDescriptionFDescription:描述:描述单据二次开发P35 版权所有 1993-2009 金蝶软件(中国)有限公司举几个二次开发的例子范例一在菜单中添加一个菜单,并实现该功能在菜单中添加一个菜单,并实现该功能Private Sub m_BillTransfer _BillInitialize()Private Sub m_BillTransfer _BillInitialize() m_BillTransfer.AddUserMenuItem ddd,

64、dddddd m_BillTransfer.AddUserMenuItem ddd, dddddd End SubEnd SubPrivate Sub m_billtranty_UserMenuClick(ByVal Index As Long, Private Sub m_billtranty_UserMenuClick(ByVal Index As Long, ByVal Caption As String)ByVal Caption As String)If Caption = ddd ThenIf Caption = ddd Then MsgBox OK MsgBox OK 此处可以实

65、现该菜单的功能代码此处可以实现该菜单的功能代码End IfEnd IfEnd SubEnd Sub单据二次开发P36 版权所有 1993-2009 金蝶软件(中国)有限公司范例二改变单据头的改变单据头的FilterFilter属性值,在插件中看到已经改变,属性值,在插件中看到已经改变,为什么没有传到为什么没有传到k3billsk3bills中去,用以下代码即可实现中去,用以下代码即可实现PrivateSubm_BillTransfer_BeforHeadLookUp(ByValCtlIndexPrivateSubm_BillTransfer_BeforHeadLookUp(ByValCtlIn

66、dexAsLong,ByValnLookUpClsIDAsLong,CancelAsBoolAsLong,ByValnLookUpClsIDAsLong,CancelAsBoolean) ean) DimTHeadCtlAsVariant DimTHeadCtlAsVariant DimiAsLong DimiAsLong IfCtlIndex=4Then IfCtlIndex=4Then THeadCtl=m_BillTransfer.HeadCtl THeadCtl=m_BillTransfer.HeadCtl THeadCtl(CtlIndex).Filter=Replace(THead

67、THeadCtl(CtlIndex).Filter=Replace(THeadCtl(CtlInd Ctl(CtlInd ex).Filter,986=986”,“986986”) ex).Filter,986=986”,“986986”) m_BillTransfer.HeadCtl=THeadCtl m_BillTransfer.HeadCtl=THeadCtl 一定一定需要先定义需要先定义 一个一个THeadCtlTHeadCtl的变量的变量, , 最后把该变量赋给最后把该变量赋给 m_BillTransfer.HeadCtl m_BillTransfer.HeadCtl,才能使其真正生

68、效,才能使其真正生效EndIf EndIf EndSubEndSub单据二次开发P37 版权所有 1993-2009 金蝶软件(中国)有限公司范例三在插件中改变辅助属性的值为什么不起作用,插件中对表体的赋值有的在插件中改变辅助属性的值为什么不起作用,插件中对表体的赋值有的不能按照不能按照m_BillTransfer.SetGridTextm_BillTransfer.SetGridText的形式修改,一定要调用的形式修改,一定要调用m_BillTransfer.BillForm.SetBillDataInputm_BillTransfer.BillForm.SetBillDataInput方式

69、才可以真正修改方式才可以真正修改SettmpItemInfo=NewKFO.Dictionary SettmpItemInfo=NewKFO.Dictionary tmpItemInfo(Name)=tmpItemInfo(Name)=黄色黄色辅助属性名称辅助属性名称 tmpItemInfo(Number)=YELLOWtmpItemInfo(Number)=YELLOW辅助属性代码辅助属性代码 tmpItemInfo(Value)=2tmpItemInfo(Value)=2辅助属性内码辅助属性内码 m_BillTransfer.BillForm.SetBillDataInputtmm_Bil

70、lTransfer.BillForm.SetBillDataInputtmpItemInfo,pItemInfo, FAuxPropID,1,1 FAuxPropID,1,1 SettmpItemInfo=Nothing SettmpItemInfo=Nothing SetBillDataInputSetBillDataInput辅助属性包,字段名,单据体(辅助属性包,字段名,单据体(0 0:单据头;:单据头;1 1:单据体),行号:单据体),行号单据二次开发P38 版权所有 1993-2009 金蝶软件(中国)有限公司范例四在插件中填界面字段的三值Private Const OperNo =

71、 22 FOperID的FCtlOrder Private Sub SetOperID(ByVal Row As Long, ByRef dctResult As KFO.Dictionary) On Error GoTo HErr Dim EntryCtl As Variant EntryCtl = m_BillTransfer.EntryCtl EntryCtl(OperNo).DInterID(Row) = dctResult.GetValue(FOperID) EntryCtl(OperNo).DNumber(Row) = dctResult.GetValue(FID) EntryCt

72、l(OperNo).DName(Row) = dctResult.GetValue(FName) m_BillTransfer.EntryCtl = EntryCtl m_BillTransfer.SetGridText Row, OperNo, dctResult.GetValue(FName) HErr: . End Sub单据二次开发P39 版权所有 1993-2009 金蝶软件(中国)有限公司二次开发中间层接口二次开发中间层接口Public Function HookInvoke(ByVal EventID As Long, dctParams As Public Function H

73、ookInvoke(ByVal EventID As Long, dctParams As KFO.Dictionary) As LongKFO.Dictionary) As Long dctParams dctParams参数包里有可能要使用的单据信息操作信息和参数包里有可能要使用的单据信息操作信息和连接串连接串sDsnsDsn连接串连接串OperateCodeOperateCode1 -1 -审核审核 2 -2 -反审核反审核 4 -4 -保存保存 8 -8 -删除删除 16 -16 -反作废反作废 32 -32 -作废作废 64 -64 -单据复制单据复制TranTypeTranType

74、单据类型单据类型InterIDInterID单据内码单据内码ROBROB1-1-蓝字蓝字 -1-1红字红字返回值返回值1 1为正常,返回值为正常,返回值0 0为失败,可以向上抛出异常和提示信息为失败,可以向上抛出异常和提示信息单据二次开发P40 版权所有 1993-2009 金蝶软件(中国)有限公司EventID说明300014单据拆分后事件300013单据拆分前事件300012单据合并后事件300011单据合并前事件300010单据关联反写后事件300009单据关联反写前事件300008关闭/反关闭单据后事件300007关闭/反关闭单据前事件300006作废/反作废单据后事件300005作废

75、/反作废单据前事件300004删除单据后事件300003删除单据前事件300002序时簿复制后事件300001序时簿复制前事件100001生成凭证结束反写事件100000生成凭证结束反写事件200003审核退出前事件200002审核反写事件200001审核前事件单据二次开发P41 版权所有 1993-2009 金蝶软件(中国)有限公司客户端二次开发,先在二次开发模板中插入记录(t_ThirdPartyComponent)delete from t_ThirdPartyComponent where FComponentName=ProBillPlugIns.clsStockIn_PlugIns

76、declare FIndex intset FIndex=(select MAX(FIndex) from t_ThirdPartyComponent WHERE FTypeDetailID=2)INSERT INTO t_ThirdPartyComponent(FTypeID,FTypeDetailID,FIndex,FComponentName,FComponentSrv,FDescription)SELECT 0,2,FIndex+1,ProBillPlugIns.clsStockIn_PlugIns,生产领料单插件GO二次开发实战演练P42 版权所有 1993-2009 金蝶软件(中国

77、)有限公司二次开发实战演练判断生产任务单是否生成领料单先创建工程ProBillPlugIns:P43 版权所有 1993-2009 金蝶软件(中国)有限公司创建好类: clsStockIn_PlugIns二次开发实战演练P44 版权所有 1993-2009 金蝶软件(中国)有限公司业务实现主函数二次开发实战演练P45 版权所有 1993-2009 金蝶软件(中国)有限公司中间层二次开发,先在二次开发模板中插入记录(t_ThirdPartyComponent)DELETE FROM t_ThirdPartyComponent WHERE FComponentSrv=MProSaleBillOut

78、.clsMSaleBillOut_PlugInsdeclare FIndex intset FIndex=(select isnull(MAX(FIndex),0) from t_ThirdPartyComponent WHERE FTypeDetailID=300009)INSERT INTO t_ThirdPartyComponent(FComponentSrv,FTypeID,FTypeDetailID,FIndex,FComponentName,FDescription)SELECT MProSaleBillOut.clsMSaleBillOut_PlugIns,2,300009,FI

79、ndex+1, ,销售出库单审核反写接口- FROM t_ThirdPartyComponent GO二次开发实战演练P46 版权所有 1993-2009 金蝶软件(中国)有限公司注意MTSTransactionMode属性的选择二次开发实战演练P47 版权所有 1993-2009 金蝶软件(中国)有限公司MTSTransactionMode属性可能的值有:0-NotAnMTSObject对象无法识别MTS或者事务处理,而且不参与其中。 1-NoTransactions对象无法在事务处理模式里执行,即使它是由参与事务处理的某个对象调用的。 2-RequiresTransaction对象必须在事

80、务处理里运行。如果对象的创建者有事务处理,那么对象就要在其创建者的事务处理里运行。如果情况不是如此,那么就会为对象创建一个事务处理。 3-UsesTransaction对象需要或者不需要事务处理都可以运行。如果对象的创建者在事务处理里运行,那么对象就会被放在事务处理里。如果其创建者不是在事务处理里运行,那么它也不会创建一个。 4-RequiresNewTransaction对象需要在新的事务处理里运行。对象总是在一个新的事务处理里运行,而不管创建它的对象是否运行在某个事物对象里。 正确使用MTS的事务处理能够让多个对象将数据保存到一个数据库或者多个数据库里,并执行或者返回所有的更改。 二次开发

81、实战演练P48 版权所有 1993-2009 金蝶软件(中国)有限公司中间层组件,以下属性一定要选择二次开发实战演练P49 版权所有 1993-2009 金蝶软件(中国)有限公司字符串连接解析函数二次开发实战演练P50 版权所有 1993-2009 金蝶软件(中国)有限公司中间层主关键调用入口函数,此函数的名字,参数一定要这样写。二次开发实战演练P51 版权所有 1993-2009 金蝶软件(中国)有限公司入口函数中: dictparams字典包中的值 lngoperate = CLng(dictparams(OperateCode) 当 lngoperate =1时,为审核调用 当 lngo

82、perate =2时,为反审核调用 lngTranType = CLng(dictparams(DestTranType) 单据类型 lngFInterID = CLng(dictparams(DestBillInterID) 单据内码二次开发实战演练P52 版权所有 1993-2009 金蝶软件(中国)有限公司组件部署V11多语言之后版本(含本版本):客户端:Program FilesKingdeeK3ERP服务器:Program FilesKingdeeK3ERPKDSYSTEMKDCOMV11多语言之前版本客户端:Program FilesKingdeeK3ERP服务器:Program

83、FilesKingdeeK3ERPKDSYSTEMKDCOM客户端组件及中间层组件编译时,都要设置兼容性客户端组件编译好之后,直接在对应目录下双击或在运行下面使用此命令:组件编译及布署P53 版权所有 1993-2009 金蝶软件(中国)有限公司中间层组件注册相对麻烦一些组件编译及布署P54 版权所有 1993-2009 金蝶软件(中国)有限公司组件编译及布署P55 版权所有 1993-2009 金蝶软件(中国)有限公司把组件拖到组件服务中组件编译及布署P56 版权所有 1993-2009 金蝶软件(中国)有限公司VBR文件注册使用:clireg32.exe组件编译及布署P57 版权所有 1993-2009 金蝶软件(中国)有限公司Question?n问题交流谢 谢! !

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号