金蝶K3工业老单中间层开发示例-2

二次开发实现的步骤:

第一步、新建组件工程(假设工程名为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为失败,可以向上抛出异常和提示信息

 

你可能感兴趣的:(数据库,金蝶)