二次开发实现的步骤:
第一步、新建组件工程(假设工程名为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 VariantDim i As LongIf CtlIndex = 4 ThenTHeadCtl = m_BillTransfer.HeadCtlTHeadCtl(CtlIndex).Filter = Replace(THeadCtl(CtlInd
ex).Filter, 986=986”, “986<>986”)m_BillTransfer.HeadCtl = THeadCtl‘一定需要先定义
一个THeadCtl的变量, 最后把该变量赋给
m_BillTransfer.HeadCtl,才能使其真正生效End If
End Sub
范例三
在插件中改变辅助属性的值为什么不起作用,插件中对表体的赋值有的不能按照m_BillTransfer.SetGridText的形式修改,一定要调用m_BillTransfer.BillForm.SetBillDataInput方式才可以真正修改
Set tmpItemInfo = New KFO.DictionarytmpItemInfo("Name") = "黄色"’辅助属性名称tmpItemInfo("Number") = "YELLOW"’辅助属性代码tmpItemInfo("Value") = "2"’辅助属性内码m_BillTransfer.BillForm.SetBillDataInput tmpItemInfo,
"FAuxPropID", 1, 1Set tmpItemInfo = Nothing’SetBillDataInput 辅助属性包,字段名,单据体(0:单据头;1:单据体),行号
范例四
在插件中填界面字段的三值
Private Const OperNo = 22’FOperID的FCtlOrder
Private Sub SetOperID(ByVal Row As Long, ByRef dctResultAs KFO.Dictionary)
On Error GoTo HErr
Dim EntryCtl As Variant
EntryCtl = m_BillTransfer.EntryCtl
EntryCtl(OperNo).DInterID(Row) =
肯承认错误则错已改了一半