九、K3 WISE 开发插件《工业单据老单序时薄插件工具栏按钮开发实例》

===============================

目录:

1、添加工具栏按钮

2、查询被添加工具栏按钮的业务单据的FMenuID和FID

3、添加工具栏按钮和业务单据的映射关系

4、工具栏按钮点击激发事件MainFunction

5、工具栏按钮点击激发事件DLL注册

6、测试结果

7、附转载源码

===============================

本例以销售订单为例,已实际测试可行!

 1、添加工具栏按钮

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 
(99999,'NewMenuTest','测试按钮1','测试按钮','测试按钮',
'39','测试按钮','测试按钮','测试按钮',0,
1,1,0,0,'',
'','',0,0,0,
'测试按钮','测试按钮','测试按钮') 

 

2、查询被添加工具栏按钮的业务单据的FMenuID和FID

--查询被添加工具栏按钮的业务单据的FmenuID和FID,分别是100,32
select FID,FmenuID,* from iclisttemplate where Fname LIKE '%销售订单%'

 

3、添加工具栏按钮和业务单据的映射关系

--t_BandToolMapping.FID 对应 iclisttemplate.FMenuID,
--t_BandToolMapping.FToolID 对应 t_MenuToolBar.FToolID
--t_BandToolMapping.FComName 是按钮激发组件DLL中命名空间.类名
insert into t_BandToolMapping 
(FID,FBandID,FToolID,FSubBandID,FIndex,
FComName,FBeginGroup) 
values 
(100,48,99999,0,999,
'|BOS_BillEvent_PlugIns.Class3',0)

 

4、工具栏按钮点击激发事件MainFunction

MainFunction(ByVal sKey As string,oList AsObject,Byref bCancel as Boolean)
sKey :     菜单的Key值,也就是菜单名
oList :     K3List控件
bCancel:是否取消后继操作标志

 

代码如下:

Public Function MainFunction(ByVal sKey As String, oList As Object, ByRef bCancel As Boolean)

'Set InBatch = New InBatch  显示窗体
MsgBox "111"
Dim vectBill As KFO.Vector

--经实际测试K3Connection.AppConnection取不到变量。请使用SQLHelper去连接数据库,代码和使用方法在第一篇插件新手指导里
Set OBJ = CreateObject("K3Connection.AppConnection")   '老单据里的连接字串
'菜单响应
Select Case sKey
Case "NewMenuTest" '和你在数据库里插入的FNAME一样
    '通过Set vectBill = oList.GetSelected 可以获取当前选中序时薄数据
    
    '返回记录集方式
    'Set rs = obj.Execute("select * from t_icitem")
    
    '执行存储过程方式
    ' obj.Execute3 ("exec KY_PlanQty")




End Select
End Function

 

5、工具栏按钮点击激发事件DLL注册

新建批处理文件:注册.bat

文本内容:regsvr32 "BOS_BillEvent_PlugIns.dll"

双击注册.bat,进行DLL注册

 

6、测试结果

 

7、附转载源码

oList.GetSelected 只获取第一行
oList.GetSelData("FBillNo") 可以获取多行

set vectBill=oList.GetSelected'可以获取当前选中序时薄数据

FBillID = m_ListInterface.GetCurrentSelRowInfo("FBillID")  '可以获取当前选中序时薄数据

Public Function MainFunction(ByVal sKey As String, oList As Object, ByRef bCancel As Boolean)
    Dim vectBill As KFO.Vector
    Dim lmul As Long
    Dim rs  As ADODB.Recordset
    Dim InBatch As Form
    Dim J
    Dim I
    Dim Dict As KFO.Dictionary
    Dim DictCheck As KFO.Dictionary
    Dim fiterid As Integer
    Dim fbillno As String
    Dim sqlUpdate As String  
    Dim sqlSelect As String
    Dim strList As String
       
'Set InBatch = New InBatch  显示窗体
 Set OBJ = CreateObject("K3Connection.AppConnection")   '老单据里的连接字串
       
Select Case sKey1 
    Case "PlanUpdate"
        'Set vectBill = New KFO.Vector
:       Set vectBill = oList.GetSelData("FInterID")
        If vectBill.UBound > 0 Then
            frmUpdate.Show 1
            If frmUpdate.dtUpdate = "白班" Then
                 For I = vectBill.LBound To vectBill.UBound  '辅助资料内码  40025=白班
                         Set DictCheck = vectBill(I)
                         sqlUpdate = "Update ICMO set FHeadSelfJ0176 =40025 where finterid = " & DictCheck.GetValue("FInterID")) 
                          OBJ.Execute3 (sqlUpdate)) 
                Next I
               SendKeys ("{F5}")
               MsgBox "生产任务单班别更新成功", vbOKOnly, "金蝶提示"
           End If
           If frmUpdate.dtUpdate = "夜班" Then
                For I = vectBill.LBound To vectBill.UBound  '辅助资料内码  40026=夜班
                        Set DictCheck = vectBill(I)
                        sqlUpdate = "Update ICMO set FHeadSelfJ0176 =40026 where finterid = " & DictCheck.GetValue("FInterID")
                        OBJ.Execute3 (sqlUpdate) `
                Next I 
                SendKeys ("{F5}")
                MsgBox "生产任务单班别更新成功", vbOKOnly, "金蝶提示"
           End If
       End If
 Case "PlanUpdate2"
        Set vectBill = oList.GetSelData("FInterID")
        If vectBill.UBound > 0 Then
             strList = ""
             For I = vectBill.LBound To vectBill.UBound  '辅助资料内码  40025=白班
                   Set DictCheck = vectBill(I)
                   strList = strList & DictCheck.GetValue("FInterID") & ","
             Next I
             strList = Left(strList, Len(Trim(strList)) - 1)
             sqlSelect = "select t2.FNumber,t2.FName,sum(t1.FQty) from ICMO t1 inner join t_icitem t2 on t1.FItemID=t2.FItemID where t1.FInterID in (" & strList & ") group by t2.FNumber,t2.FName"
             Set rs = OBJ.Execute(sqlSelect)
 End Function
--在采购订单序时簿上添加工具栏按钮
INSERT INTO t_BandToolMapping
(FID,FBandID,FToolID,FSubBandID,FIndex,FComName,FBeginGroup)
VALUES
(81,47,1001,0,1001,'&mnuFileUserAdd1',1)
INSERT INTO t_MenuToolBar
(FToolID,FName,FCaption,FCaption_CHT,FCaption_EN,FImageName,FToolTip,FToolTip_CHT,FToolTip_EN,FControlType,
 FVisible,FEnable,FChecked,FShortCut,FShortChar,FCBList,FCBList_CHT,FCBList_EN,FCBStyle,FCBWidth,
 FIndex,FToolCaption,FToolCaption_CHT,FToolCaption_EN )
VALUES
(1001,'UserAdd1','自定义1','自定义1','自定义1',17,'由用户自定义的按钮','由用户自定义的按钮','由用户自定义的按钮',0,
 1,1,0,0,'','','','',0,0,0,'自定义1','自定义1','自定义1')

 

posted on 2017-09-08 10:52  林枫山  阅读(5775)  评论(0编辑  收藏  举报