二次开发实现的步骤:
第一步、新建组件工程(假设工程名为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”, “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.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为失败,可以向上抛出异常和提示信息