k3老单二次开发.ppt_第1页
k3老单二次开发.ppt_第2页
k3老单二次开发.ppt_第3页
k3老单二次开发.ppt_第4页
k3老单二次开发.ppt_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

二次开发简介 曹且根,金蝶软件(中国)有限公司,研发中心,提纲,工业老单二次开发 工业老单二次开发所需环境及要点 工业老单序时薄二次开发 工业老单单据二次开发 工业老单实战演练 组件编译及布署 问题交流,二次开发所需环境及要点,单据二次开发是针对现目前单据的一些功能无法满足一些客户的特殊要求,同时分公司又有能力进行二次开发而提出的,这样既可以在现有的系统不做变动的情况下面满足用户的需求,同时也增强了系统的稳定性。 本篇所介绍所用到的动态连接库名为:K3BillTransfer.dll 通过该说明文档,你可以了解到 1.如何通过K3BillTransfer组件在录单过程中对单据上各项目加以控制。 2.如何通过K3BillTransfer组件实现自定义功能菜单。 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中的FcomName填入需要调用组件的名称,注意:不要覆盖原有内容,要在原有内容上用“| ”分割后加入自己的组件,可以加多个组件。第一个插件前一定要加“|”,因为之前的部分是记录了其他信息。 2)二次开发组件必须实现MainFunction(ByVal sKey As string,oList AsObject,Byref bCancel as Boolean)方法。要终止事件,请将bCancel设置为true。 3)oList为一个即是ICList,可以使用其中的任何Public方法。 比方说 GetSelData 为取得选取的对象,序时薄二次开发流程图,序时薄二次开发,范例 增加元数据按钮菜单名“FMenuPC”,新增加一个不存在的FToolID Delete From t_MenuToolBar Where FToolID = 10002 insert 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,FToolCaption_CHT,FToolCaption_EN) values (10002,FMenuPC,外购入库拆分,外购入库拆分,外购入库拆分,39,外购入库拆分,外购入库拆分,外购入库拆分,0,0,1,0,0,0,0,0,外购入库拆分,外购入库拆分,外购入库拆分),序时薄二次开发,范例续 将上面的按钮插入到菜单栏和工具栏 在t_BandToolMapping中的FcomName填入需要调用组件的名称,注意:不要覆盖原有内容,要在原有内容上用“| ”分割后加入自己的组件,可以加多个组件。第一个插件前一定要加“|”,因为之前的部分是记录了其他信息。 FID对应iclisttemplate里的FMenuID, 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 = 82 insert into t_BandToolMapping (FID,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 = 82 insert into t_BandToolMapping (FID,FBandID,FToolID,FSubBandID,FIndex,FComName,FBeginGroup) values (82,52,10002,0,65,|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中添加以下代码,以上只是序时薄二次开发实现的一个简单的例子,具体的二次开发,要根据不同的需求,进行相应的开发,接口都是统一调用MainFunction函数,再根据具体情况进行扩展。,序时薄二次开发,单据二次开发,单据二次开发主要通过K3BillTransfer组件控制单据上一些操作。 其常用属性 1.Property Cnnstring As String 当前数据库的MMTS.PropsString连接串。 2Property SystemName As String 当前系统名称。 3Property LastInfo As String 最后一次系统返回的各种信息 4Property BillForm As 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 对应表头控件数组,记录每个表头项目各属性的数组 如果要改变HeadCtl中的某个属性值,需先对HeadCtl做一个备份,然后修改此备份的相应属性值,再将此备份赋值给HeadCtl。 。,单据二次开发,其常用属性续 10Property EntryCtl As Variant 对应分录各列,记录每个分录列各属性的数组 如果要改变EntryCtl中的某个属性值,需先对EntryCtl做一个备份,然后修改此备份的相应属性值,再将此备份赋值给EntryCtl 11Property 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(“ISRedBill“) :是否红字单据 SaveVect.Item(1).Value(“BillChecked“) :是否审核。,单据二次开发,常用的方法 Function AddUserMenuItem(ByVal Caption As String, 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:表头控件索引 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 Long = 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 Boolean 说明:设置表头某项的值 参数: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 BillTerminate() 单据卸载完成时激发该事件 3Public Event UserMenuClick(ByVal Index As Long, ByVal Caption As String) 说明:当点击用户自定义的菜单时激发这个事件。 参数:Index:表示第几个菜单、由添加菜单的先后顺序决定, Caption:菜单项的标题,如何添加自定义菜单请参见方法 AddUserMenuItem 4.Public Event HeadChange(ByVal CtlIndex As Long, ByVal Value As Variant, ByVal bNewBill As Boolean, Cancel As Boolean) 说明:当表头的一个项目改变时激发这个事件 参数: 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是否取消 6Public 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 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 CtlIndex 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 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 As 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 BeforeFillBillData(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 要设置格式的目标行 19Public 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:取消拆分 false:拆分,单据二次开发,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) 说明:在单据删除指定行之前激发此事件 参数:lRow指定要删除的行,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.Vector, 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) As 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 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。常用值: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),则该属性标示查找的类型 -控件的数据来源属性,单据二次开发,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 选单锁定,单据二次开发,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 Integer 控件在各种状态下的可见性:新增、修改、 察看、审核、下达。用一个五位的二进制数表示,可见则对应 位为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 是否汇总类字段 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数组续 -控件的数据保存属性 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 String Head ItemID 当前数据的内码 ItemName 当前数据的名称 ItemNumber 当前数据的ID Text 控件显示的Text,单据二次开发,Grig控件 Grid SetText(col as Long,Row as Long , var) 方法 给数据控件的第Col列,第Row行赋值var GetText(col as Long,Row as Long , var) 方法 取数据控件的第Col列,第Row行的值var Col 指定起始列 Col2 指定结束列 Row 指定起始行 Row2 指定结束行 Lock 是否锁定 Value 指定行列的单元格的值,单据二次开发,二次开发实现的步骤: 第一步、新建组件工程(假设工程名为ReDevPro,包含一个类名为 clsReDev的类模块),引用k3BillTransfer 组件和其他你要使用的组件例如ADO-Microsoft ActiveX Data Objects 2.1 Library等。 第二步、在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.CursorLocation = adUseClient cn.Open m_BillTransfer.Cnnstring End Sub,单据二次开发,二次开发实现的步骤续: 第五步、编写完成以后编译你的工程 第六步、注册二次开发组件使单据调用时能触发 在表t_ThirdpartyComponent中增加二次开发组件记录,各字段 含义为 FTypeID:二次开发插件类型,0为客户端插件;2为中间层插件 FTypeDetailID:单据类型ID,客户端表示对应表ICTransactionType的 FID,中间层表示事件类型 FIndex:组件调用顺序,按FTypeDetailID排取一个值 FComponentName:客户端二次开发组件,如PrjDemo.clsDemo FComponentSrv:中间层保存二次开发组件名称 FDescription:描述,单据二次开发,举几个二次开发的例子 范例一 在菜单中添加一个菜单,并实现该功能 Private Sub m_BillTransfer _BillInitialize() m_BillTransfer.AddUserMenuItem “ddd“, “dddddd“ End Sub Private Sub m_billtranty_UserMenuClick(ByVal Index As Long, ByVal Caption As String) If Caption = “ddd“ Then MsgBox “OK“ 此处可以实现该菜单的功能代码 End If End Sub,单据二次开发,范例二 改变单据头的Filter 属性值,在插件中看到已经改变, 为什么没有传到k3bills中去,用以下代码即可实现 Private Sub m_BillTransfer_BeforHeadLookUp(ByVal CtlIndex As Long, ByVal nLookUpClsID As Long, Cancel As Boolean) Dim THeadCtl As Variant Dim i As Long If CtlIndex = 4 Then THeadCtl = m_BillTransfer.HeadCtl THeadCtl(CtlIndex).Filter = Replace(THeadCtl(CtlInd ex).Filter, 986=986”, “986986”) m_BillTransfer.HeadCtl = THeadCtl 一定需要先定义 一个THeadCtl的变量, 最后把该变量赋给 m_BillTransfer.HeadCtl,才能使其真正生效 End If End Sub,单据二次开发,范例三 在插件中改变辅助属性的值为什么不起作用,插件中对表体的赋值有的不能按照m_BillTransfer.SetGridText的形式修改,一定要调用m_BillTransfer.BillForm.SetBillDataInput方式才可以真正修改 Set tmpItemInfo = New KFO.Dictionary tmpItemInfo(“Name“) = “黄色“ 辅助属性名称 tmpItemInfo(“Number“) = “YELLOW“ 辅助属性代码 tmpItemInfo(“Value“) = “2“ 辅助属性内码 m_BillTransfer.BillForm.SetBillDataInput tmpItemInfo, “FAuxPropID“, 1, 1 Set tmpItemInfo = Nothing SetBillDataInput 辅助属性包,字段名,单据体(0:单据头;1:单据体),行号,单据二次开发,范例四 在插件中填界面字段的三值 Private Const OperNo = 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“) EntryCtl(OperNo).DName(Row) = 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 连接串 OperateCode 1 -审核 2 -反审核 4 -保存 8 -删除 16 -反作废 32 -作废 64 -单据复制 TranType 单据类型 InterID 单据内码 ROB 1-蓝字 -1红字 返回值1为正常,返回值0为失败,可以向上抛出异常和提示信息,单据二次开发,单据二次开发,客户端二次开发,先在二次开发模板中插入记录(t_ThirdPartyComponent),delete from t_ThirdPartyComponent where FComponentName=ProBillPlugIns.clsStockIn_PlugIns declare FIndex int set 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,二次开发实战演练,二次开发实战演练,判断生产任务单是否生成领料单 先创建工程ProBillPlugIns:,创建好类: clsStockIn_PlugIns,二次开发实战演练,业务实现主函数,二次开发实战演练,中间层二次开发,先在二次开发模板中插入记录(t_ThirdPartyComponent),DELETE FROM t_ThirdPartyComponent WHERE FComponentSrv=MProSaleBillOut.clsMSaleBillOut_PlugIns declare FIndex int set 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,FIndex+1, ,销售出库单审核反写接口- FROM t_ThirdPartyComponent GO,二次开发实战演练,注意MTSTransactionMode属性的选择,二次开发实战演练,MTSTransactionMode属性可能的值有: 0-NotAnMTSObject对象无法识别MTS或者事务处理,而且不参与其中。 1-NoTransactions对象无法在事务处理模式里执行,即使它是由参与事务处理的某个对象调用的。 2-RequiresTransaction对象必须在事务处理里运行。如果对象的创建者有事务处理,那么对象就要在其创建者的事务处理里运行。如果情况不是如此,那么就会为对象创建一个事务处理。 3-UsesTransaction对象需要或者不需要事务处理都可以运行。如果对象的创建者在事务处理里运行,那么对象就会被放在事务处理里。如果其

温馨提示

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

最新文档

评论

0/150

提交评论