九、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')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM