===============================
目錄:
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')
