k3老单二次开发课件.ppt

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

《k3老单二次开发课件.ppt》由会员分享,可在线阅读,更多相关《k3老单二次开发课件.ppt(59页珍藏版)》请在三一办公上搜索。

1、二次开发简介 曹且根,金蝶软件(中国)有限公司,研发中心,提纲,工业老单二次开发工业老单二次开发所需环境及要点工业老单序时薄二次开发工业老单单据二次开发工业老单实战演练组件编译及布署问题交流,二次开发所需环境及要点,单据二次开发是针对现目前单据的一些功能无法满足一些客户的特殊要求,同时分公司又有能力进行二次开发而提出的,这样既可以在现有的系统不做变动的情况下面满足用户的需求,同时也增强了系统的稳定性。本篇所介绍所用到的动态连接库名为:K3BillTransfer.dll 通过该说明文档,你可以了解到1.如何通过K3BillTransfer组件在录单过程中对单据上各项目加以控制。2.如何通过K3

2、BillTransfer组件实现自定义功能菜单。3.如何通过K3BillTransfer组件控制数据的保存。4.如何在序时薄上增加菜单及应用。5.应用示例实战演练。适用对象 需要在K/3供应链系统单据上进行二次开发的开发者 开发环境 1.安装过K/3ERP 9.41以后的版本且购买过供应链系统。2.VB6.0企业版+SP1 3.SQL SERVER 2000及后续版本(SQL SERVER 2005,SQL SERVER 2008),序时薄二次开发,老单序时薄开发相对简单,它只能在序时薄上增加菜单,通过菜单去实现一些二次开发功能.使用方法:1.)在t_BandToolMapping中的Fcom

3、Name填入需要调用组件的名称,注意:不要覆盖原有内容,要在原有内容上用“|”分割后加入自己的组件,可以加多个组件。第一个插件前一定要加“|”,因为之前的部分是记录了其他信息。2)二次开发组件必须实现MainFunction(ByVal sKey As string,oList AsObject,Byref bCancel as Boolean)方法。要终止事件,请将bCancel设置为true。3)oList为一个即是ICList,可以使用其中的任何Public方法。比方说 GetSelData 为取得选取的对象,序时薄二次开发流程图,序时薄二次开发,范例增加元数据按钮菜单名“FMenuPC

4、”,新增加一个不存在的FToolIDDelete From t_MenuToolBar Where FToolID=10002insert into t_MenuToolBar(FToolID,FName,FCaption,FCaption_CHT,FCaption_EN,FImageName,FToolTip,FToolTip_CHT,FToolTip_EN,FControlType,FVisible,FEnable,FChecked,FShortCut,FCBList,FCBList_CHT,FCBList_EN,FCBStyle,FCBWidth,FIndex,FToolCaption,

5、FToolCaption_CHT,FToolCaption_EN)values(10002,FMenuPC,外购入库拆分,外购入库拆分,外购入库拆分,39,外购入库拆分,外购入库拆分,外购入库拆分,0,0,1,0,0,0,0,0,外购入库拆分,外购入库拆分,外购入库拆分),序时薄二次开发,范例续 将上面的按钮插入到菜单栏和工具栏在t_BandToolMapping中的FcomName填入需要调用组件的名称,注意:不要覆盖原有内容,要在原有内容上用“|”分割后加入自己的组件,可以加多个组件。第一个插件前一定要加“|”,因为之前的部分是记录了其他信息。FID对应iclisttemplate里的FM

6、enuID,FBandID表示放在哪个菜单下(对应t_BandToolMapping.FSubBandID),可以通过以下语句关联得到是哪个菜单 select a.*,b.fname,b.FCaption From t_BandToolMapping a,t_MenuToolBar b where a.FID=82 and a.ftoolid=b.ftoolid 将按钮插入到菜单栏 Delete From t_BandToolMapping where FBandID=3 and FToolID=10002 and FID=82insert into t_BandToolMapping(FID

7、,FBandID,FToolID,FSubBandID,FIndex,FComName,FBeginGroup)values(82,3,10002,0,65,|K3ListPlug.List,0),范例续将按钮插入到工具栏Delete From t_BandToolMapping where FBandID=52 and FToolID=10002 and FID=82insert into t_BandToolMapping(FID,FBandID,FToolID,FSubBandID,FIndex,FComName,FBeginGroup)values(82,52,10002,0,65,|

8、K3ListPlug.List,0)在外购入库序时薄显示按钮(如果里面有|V,则只能在后面加菜单项)Update IclistTemplate set FLogicStr=FLogicStr+Case When Right(FLogicStr,1)=|then V:FMenuPC else|V:FMenuPC end where FID=1 and not FLogicStr like%FMenuPC%,序时薄二次开发,数据元建好之后,再新建一个工程文件。如:新建一个vb工程,命名为:ProListBill,在工程中新建一个类命名为:ListBill,序时薄二次开发,在类ListBill中添加

9、以下代码,以上只是序时薄二次开发实现的一个简单的例子,具体的二次开发,要根据不同的需求,进行相应的开发,接口都是统一调用MainFunction函数,再根据具体情况进行扩展。,序时薄二次开发,单据二次开发,单据二次开发主要通过K3BillTransfer组件控制单据上一些操作。其常用属性1.Property Cnnstring As String当前数据库的MMTS.PropsString连接串。2Property SystemName As String当前系统名称。3Property LastInfo As String 最后一次系统返回的各种信息4Property BillForm As

10、 Object 整个单据窗体对象。可通过该对象访问单据上的任何一个对象,包括控件,菜单。共有的方法有:InsertRow(),在Grid的当前行追加一行,它没有参数。5Property BillFunc as Object代表单据对象。目前没什么用途。,其常用属性续6Property Head As Object 单据表头控件,是一个KDText控件数组7Property Grid As Object 单据分录控件,为FpSpread控件8Property SumGrid As Object单据分录合计控件,为FpSpread控件9Property HeadCtl As Variant对应表头

11、控件数组,记录每个表头项目各属性的数组如果要改变HeadCtl中的某个属性值,需先对HeadCtl做一个备份,然后修改此备份的相应属性值,再将此备份赋值给HeadCtl。,单据二次开发,其常用属性续10Property EntryCtl As Variant对应分录各列,记录每个分录列各属性的数组如果要改变EntryCtl中的某个属性值,需先对EntryCtl做一个备份,然后修改此备份的相应属性值,再将此备份赋值给EntryCtl11Property SaveVect As KFO.Vector二次开发外部数据存取接口。在录单过程中,用户可将某些数据保存在此Vector中,在单据保存时,再通过

12、二次开发中间层组件,将此Vector中的数据保存到指定位置。SaveVect.Item(1)为一个KFO.Dictionary对象该对象包含以下四个系统数据 SaveVect.Item(1).Value(FInterID):单据内码 SaveVect.Item(1).Value(FTransType):单据事务类型 SaveVect.Item(1).Value(ISRedBill):是否红字单据 SaveVect.Item(1).Value(BillChecked):是否审核。,单据二次开发,常用的方法Function AddUserMenuItem(ByVal Caption As Stri

13、ng,ByVal RootMenuCaption As String=)说明:添加一个用户自定义菜单项,系统一共预设了五个菜单项供二次开发使用参数:Caption:菜单名称 RootMenuCaption:根菜单名称。缺省为“自定义菜单”2Function GetGridText(ByVal Row As Long,ByVal Col As Long)As String说明:获取分录某单元格的值参数:Row:分录行,Col:分录列3Function GetHeadNumber(ByVal CtlIndex As Long)As String说明:获取表头某项的代码参数:CtlIndex:表头控

14、件索引4Function GetHeadText(ByVal CtlIndex As Long)As String说明:获取表头某项的文本参数:CtlIndex:表头控件索引,单据二次开发,单据二次开发,常用的方法续5.Function GetSumGridText(ByVal Row As Long,ByVal Col As Long)As String说明:获取合计行某列的值参数:Row:行。一般为1,Col:分录列6Function SetGridText(ByVal Row As Long,ByVal Col As Long,ByVal Value,ByVal InterID As L

15、ong=0,ByVal sName As String=)As Boolean说明:设置分录某单元格的值,当分录为查找类型时,会把相应的信息一起 携带到相应的位置,如当为物料代码时,它会携带物料的一些基本 信息物料名称等。参数:Row:分录行,Col:分录列,Value:设置的值。如果该单元格是查找 类型的,Value应设置为代码。InterID:暂未使用,sName:暂未使用,常用的方法续7Function SetHead(ByVal Index As Long,ByVal Value,ByVal InterID As Long=0,ByVal sName As String=)As Boo

16、lean说明:设置表头某项的值参数:Index:表头控件索引,Value:设置的值。如果该表头项是查找类型的,Value应设置为代码,InterID:暂未使用,sName:暂未使用8Function SetSumGridText(ByVal Row As Long,ByVal Col As Long,ByVal Value)As Boolean说明:设置分录合计某列的值参数:Row:分录行。一般为1 Col:分录列 Value:设置的值。,单据二次开发,常用的事件1.Public Event BillInitialize()单据初始化完成时激发该事件2Public Event BillTerm

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

18、ean)说明:当表头的一个项目改变时激发这个事件参数:ctlIndex 表头字段索引 Value 当前值 bNewBill是否是新增单据 Cancel是否取消,单据二次开发,常用的事件续5.Public Event LeveCell(ByVal Col As Long,ByVal Row As Long,_ ByVal NewCol As Long,ByVal NewRow As Long,Cancel As Boolean)说明:当离开分录的一个单元格的时候激发这个事件参数:Col 分录的要离开列 Row分录的要离开行 NewCol 新的列 NewRow新的行 Cancel是否取消6Publ

19、ic Event GridChange(ByVal Col As Long,ByVal Row As Long,ByVal Value As Variant,ByVal bNewBill As Boolean,Cancel As Boolean)说明:当表体的一个项目改变时激发这个事件参数:Col 分录的当前列 Row分录的当前行 Value 当前值 bNewBill是否是新增单据 Cancel是否取消,单据二次开发,常用的事件续Public Event BeforGridLookUp(ByVal Row As Long,ByVal Col As Long,ByVal nLookUpClsID

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

21、Index As Long,ByVal nLookUpClsID As Long,Cancel As Boolean)说明:在表头的一个项目执行查找功能之前激发这个事件参数:ctlIndex表头字段索引 nLookUpClsID 当前查询的资料类型 Cancel是否取消,单据二次开发,常用的事件续Public Event EndHeadLookUp(ByVal CtlIndex As Long,ByVal nLookUpClsID As Long)说明:在表头的一个项目完成查找功能之后激发这个事件,参数:ctlIndex表头字段索引nLookUpClsID 当前查询的资料类型11Public

22、Event BeforeSave(ByVal bNew As Boolean,ByRef ReturnCode As Long)说明:在单据执行保存功能的时候激发这个事件参数:bNew 表示是否是新增单据,ReturnCode 返回参数-1:失败,结束 单据保存;0:成功,继续单据保存,1:成功返回,结束单据保存12Public Event EndSave(ByVal BillNo As String)说明:在单据执行完成保存功能的时候激发这个事件参数:BillNo表示单据的编号,单据二次开发,常用的事件续13.Public Event LoadBillEnd(ByVal ShowType A

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

24、reFillBillData(ByVal BillTransType As Long,ByVal BillInterID As Long)说明:在装载某张单据之前激发这个事件参数:BillTransType 单据事务类型 BillInterID单据内码,单据二次开发,常用的事件续17Public Event EndBillFormActive()说明:在显示单据之后激发这个事件18Public Event GridFormat(ByVal Col As Long,ByVal Row As Long)说明:在设置单据体格式后激发这个事件参数:Col要设置格式的目标列 Row要设置格式的目标行19

25、Public Event RefreshControl()说明:在设置单据的单元格和单据头的锁定状态后激发这个事件20Public Event BeforeEntrySplit(ByVal pCurRow As Long,ByVal pSplitCount As Long,ByVal pSplitMethod As Long,ByRef pCancel As Boolean)说明:在单据的拆分操作之前激发此事件参数:pCurRow要拆分的当前分录行 pSplitCount拆分的数目 pSplitMethod拆分分录位置 0 插入式,1追加式 pCancel是否取消拆分 true:取消拆分fal

26、se:拆分,单据二次开发,21Public Event AfterEntrySplit(ByVal pCurRow As Long,ByVal pSplitCount As Long,ByVal pSplitMethod As Long)说明:在单据的拆分操作之后激发此事件参数:pCurRow被拆分的分录行 pSplitCount被拆分成的数目 pSplitMethod拆分分录位置 0:插入式,1:追加式22Public Event OnBeforeDelRow(ByVal lRow As Long,ByRef bCancel As Boolean)说明:在单据删除指定行之前激发此事件参数:l

27、Row指定要删除的行,bCancel是否取消删除,true:取消删除 false:删除23.Public Event OnAfterDelRow(ByVal lRow As Long,ByRef bCancel As Boolean)说明:在单据删除指定行后激发此事件参数:lRow被删除的行 bCancel备用参数,目前没用到,单据二次开发,中间层事件如果需要在单据保存的事务处理过程中插入一些用户处理过程,可以编写一个用户中间层,必须包含以下两个函数:1Public Function BeginSave(ByVal Sdsn As String,ByRef SaveVect As KFO.Ve

28、ctor,ByRef ReturnMsg As String)As Boolean说明:在单据保存的事务处理中,在单据数据保存到数据库之前,调用 该函数。返回值:FALSE 保存事务终止,返回错误。TRUE 单据继续保存事务 处理。参数:Sdsn:MMTS.PropsString,SaveVect:二次开发外部数据存取接口。ReturnMsg:失败时返回的错误信息。,单据二次开发,中间层事件续2Public Function EndSave(ByVal Sdsn As String,ByRef SaveVect As KFO.Vector,ByRef ReturnMsg As String)A

29、s Boolean说明:在单据保存的事务处理中,在单据数据保存到数据库之后,调 用该函数。返回值:FALSE 保存事务终止,返回错误。TRUE单据继续保存事务处理。参数:Sdsn:MMTS.PropsString SaveVect:二次开发外部数据存取接口。ReturnMsg:失败时返回的错误信息。,单据二次开发,关于HeadCtl、EntryCtl数组属性和Head控件数组、Grid的简要说明HeadCtl ID As Integer 数组的Index与KDCtl的Index相对应,(FCtlIndex)Caption As String KDCtl的Caption FontName As

30、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 Boolean 控件是否Locked与KDCtl的Locked属性相对应 EnableValue As Integer件在各种状态下的可用性:新增、修改、察看、审核、下达。,单据二次开发,HeadCtl数组续用一个五位的二进制数表示,可见则对应位为1,否则为0。常用

31、值:0、31。bPrint As Boolean 是否打印 Visible As Boolean 是否可见 VisibleValue As Integer 控件在各种状态下的可见性:新增、修改、察看、审核、下达。用一个五位的二进制数表示,可见则对应位为1,否则为0。常用值:0、31。NeedSave As Boolean 该控件的值是否保存 RelateOutTbl As Boolean 该控件的值是否来自其他表 MustInput As Boolean 该控件是否必须输入 LookUpCls As Integer 如果控件的类型是查找类型的(LookUpCls=ctlLookUp),则该属性

32、标示查找的类型-控件的数据来源属性,单据二次开发,HeadCtl数组续 InterID As Long FInterID As String nterID 对应的字段名 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 选单锁定,

33、单据二次开发,EntryCtl 数组ID As Integer 数组的Index与KDCtl的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 Int

34、eger 控件在各种状态下的可见性:新增、修改、察看、审核、下达。用一个五位的二进制数表示,可见则对应 位为1,否则为0。常用值:0、31。NeedSave As Boolean 该控件的值是否保存RelateOutTbl As Boolean 该控件的值是否来自其他表MustInput As Boolean 该控件是否必须输入LookUpCls As Integer 如果控件的类型是查找类型的(LookUpCls=ctlLookUp),,单据二次开发,EntryCtl数组续则该属性标示查找的类型 NeedCount As Boolean 是否需要合计 StatCount As Boolean

35、 是否汇总类字段 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的值,其他的值直接从界面中取得,单据二次开发,EntryCtl数组

36、续-控件的数据保存属性 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 StringHeadItemID 当前数据的内码ItemName当前数据的名称 ItemNumber当前数据的ID Text控件显示的Text,单据二次开发,Grig控件GridSetText(col as L

37、ong,Row as Long,var)方法给数据控件的第Col列,第Row行赋值varGetText(col as Long,Row as Long,var)方法取数据控件的第Col列,第Row行的值varCol指定起始列Col2指定结束列Row指定起始行Row2 指定结束行Lock是否锁定Value 指定行列的单元格的值,单据二次开发,二次开发实现的步骤:第一步、新建组件工程(假设工程名为ReDevPro,包含一个类名为 clsReDev的类模块),引用k3BillTransfer 组件和其他你要使用的组件例如ADO-Microsoft ActiveX Data Objects 2.1 L

38、ibrary等。第二步、在clsReDev类代码中声明 Private WithEvents m_BillTransfer As k3BillTransfer.Bill。第三步、必须添加以下代码否则系统不能够传递事件到你的组件中 Public Sub Show(ByVal o As Object)Set m_BillTransfer=o End Sub第四步、在m_BillTransfer的各事件中编写相应处理代码。例如 Private Sub m_BillTransfer_BillInitialize()Set cn=New ADODB.Connection cn.CursorLocatio

39、n=adUseClient cn.Open m_BillTransfer.Cnnstring End Sub,单据二次开发,二次开发实现的步骤续:第五步、编写完成以后编译你的工程第六步、注册二次开发组件使单据调用时能触发在表t_ThirdpartyComponent中增加二次开发组件记录,各字段 含义为FTypeID:二次开发插件类型,0为客户端插件;2为中间层插件FTypeDetailID:单据类型ID,客户端表示对应表ICTransactionType的 FID,中间层表示事件类型FIndex:组件调用顺序,按FTypeDetailID排取一个值FComponentName:客户端二次开发

40、组件,如PrjDemo.clsDemoFComponentSrv:中间层保存二次开发组件名称FDescription:描述,单据二次开发,举几个二次开发的例子范例一在菜单中添加一个菜单,并实现该功能Private Sub m_BillTransfer _BillInitialize()m_BillTransfer.AddUserMenuItem ddd,dddddd End SubPrivate Sub m_billtranty_UserMenuClick(ByVal Index As Long,ByVal Caption As String)If Caption=ddd Then MsgBo

41、x OK 此处可以实现该菜单的功能代码End IfEnd Sub,单据二次开发,范例二改变单据头的Filter属性值,在插件中看到已经改变,为什么没有传到k3bills中去,用以下代码即可实现PrivateSubm_BillTransfer_BeforHeadLookUp(ByValCtlIndexAsLong,ByValnLookUpClsIDAsLong,CancelAsBoolean)DimTHeadCtlAsVariant DimiAsLong IfCtlIndex=4Then THeadCtl=m_BillTransfer.HeadCtl THeadCtl(CtlIndex).Fil

42、ter=Replace(THeadCtl(CtlInd ex).Filter,986=986”,“986986”)m_BillTransfer.HeadCtl=THeadCtl 一定需要先定义 一个THeadCtl的变量,最后把该变量赋给 m_BillTransfer.HeadCtl,才能使其真正生效EndIf EndSub,单据二次开发,范例三在插件中改变辅助属性的值为什么不起作用,插件中对表体的赋值有的不能按照m_BillTransfer.SetGridText的形式修改,一定要调用m_BillTransfer.BillForm.SetBillDataInput方式才可以真正修改Settm

43、pItemInfo=NewKFO.Dictionary tmpItemInfo(Name)=黄色辅助属性名称 tmpItemInfo(Number)=YELLOW辅助属性代码 tmpItemInfo(Value)=2辅助属性内码 m_BillTransfer.BillForm.SetBillDataInputtmpItemInfo,FAuxPropID,1,1 SettmpItemInfo=Nothing SetBillDataInput辅助属性包,字段名,单据体(0:单据头;1:单据体),行号,单据二次开发,范例四在插件中填界面字段的三值Private Const OperNo=22 FOp

44、erID的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)EntryCtl(OperNo).DName(R

45、ow)=dctResult.GetValue(FName)m_BillTransfer.EntryCtl=EntryCtl m_BillTransfer.SetGridText Row,OperNo,dctResult.GetValue(FName)HErr:.End Sub,单据二次开发,二次开发中间层接口Public Function HookInvoke(ByVal EventID As Long,dctParams As KFO.Dictionary)As Long dctParams参数包里有可能要使用的单据信息操作信息和连接串sDsn连接串OperateCode1-审核 2-反审核

46、 4-保存 8-删除 16-反作废 32-作废 64-单据复制TranType单据类型InterID单据内码ROB1-蓝字-1红字返回值1为正常,返回值0为失败,可以向上抛出异常和提示信息,单据二次开发,单据二次开发,客户端二次开发,先在二次开发模板中插入记录(t_ThirdPartyComponent),delete from t_ThirdPartyComponent where FComponentName=ProBillPlugIns.clsStockIn_PlugInsdeclare FIndex intset FIndex=(select MAX(FIndex)from t_Thi

47、rdPartyComponent WHERE FTypeDetailID=2)INSERT INTO t_ThirdPartyComponent(FTypeID,FTypeDetailID,FIndex,FComponentName,FComponentSrv,FDescription)SELECT 0,2,FIndex+1,ProBillPlugIns.clsStockIn_PlugIns,生产领料单插件GO,二次开发实战演练,二次开发实战演练,判断生产任务单是否生成领料单先创建工程ProBillPlugIns:,创建好类:clsStockIn_PlugIns,二次开发实战演练,业务实现主函

48、数,二次开发实战演练,中间层二次开发,先在二次开发模板中插入记录(t_ThirdPartyComponent),DELETE FROM t_ThirdPartyComponent WHERE FComponentSrv=MProSaleBillOut.clsMSaleBillOut_PlugInsdeclare FIndex intset FIndex=(select isnull(MAX(FIndex),0)from t_ThirdPartyComponent WHERE FTypeDetailID=300009)INSERT INTO t_ThirdPartyComponent(FComp

49、onentSrv,FTypeID,FTypeDetailID,FIndex,FComponentName,FDescription)SELECT MProSaleBillOut.clsMSaleBillOut_PlugIns,2,300009,FIndex+1,销售出库单审核反写接口-FROM t_ThirdPartyComponent GO,二次开发实战演练,注意MTSTransactionMode属性的选择,二次开发实战演练,MTSTransactionMode属性可能的值有:0-NotAnMTSObject对象无法识别MTS或者事务处理,而且不参与其中。1-NoTransactions对

50、象无法在事务处理模式里执行,即使它是由参与事务处理的某个对象调用的。2-RequiresTransaction对象必须在事务处理里运行。如果对象的创建者有事务处理,那么对象就要在其创建者的事务处理里运行。如果情况不是如此,那么就会为对象创建一个事务处理。3-UsesTransaction对象需要或者不需要事务处理都可以运行。如果对象的创建者在事务处理里运行,那么对象就会被放在事务处理里。如果其创建者不是在事务处理里运行,那么它也不会创建一个。4-RequiresNewTransaction对象需要在新的事务处理里运行。对象总是在一个新的事务处理里运行,而不管创建它的对象是否运行在某个事物对象里

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号