三、K3 Cloud 开发插件《K3 Cloud插件开发新手指导 + K3 Cloud插件开发代码调试》
案例需求:在銷售訂單上新增一個按鈕,在訂單明細中新增一個字段,命名[即時庫存]。
點擊按鈕,彈出“Hello World!”,并獲取訂單明細物料的即時庫存,填入字段[即時庫存]。
開發工具:Visual Studio 2012
開發語言:Asp.net C#
=================================
目錄:
1、BOS單據加按鈕 - -【測試按鈕】
2、BOS單據加字段 - -[即時庫存]
3、創建Visual C#類庫
4、引入命名空間
5、編寫按鈕點擊事件,建議用不帶任何代碼的空白事件進行測試
6、編譯代碼,生成DLL文件
7、插件注冊
8、IIS重啟
9、代碼調試,確保事件是否成功觸發
10、代碼調試過程分析
=================================
1、BOS單據加按鈕 - - 【測試按鈕】
?打開【金蝶K3 Cloud BOS集成開發平臺】,右鍵點擊【銷售訂單】,選擇擴展(在擴展/繼承模板才可加字段),
在【銷售訂單屬性】窗口,點擊【菜單集合】,在單據頭新增按鈕【測試按鈕】。
?
在菜單編輯中,右鍵點擊【工具條】,新增按鈕【測試按鈕】,標識為 “HelloWorld”。標識在插件代碼中識別。
?
?
2、BOS單據加字段 - - [即時庫存]
?
3、創建Visual C#類庫
打開Visual Studio 2012,在菜單【文件】 - - 【新建】,點擊【項目】,新建Visual C# 類庫。
?
4、引入命名空間
?
?
?
?
5、編寫按鈕點擊事件,建議用不帶任何代碼的空白事件
沒有代碼的空白事件如下,并設置斷點調試:
?
?
這是完全代碼如下:
using System; using System.Collections.Generic; using System.Text; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS; using Kingdee.K3.MFG.App; using System.Data;namespace MyTest.K3.FIN.SE.FirstPlugIn {public class Class1:AbstractBillPlugIn{public override void BarItemClick(BarItemClickEventArgs e){base.BarItemClick(e);if (e.BarItemKey == "HelloWorld") --HelloWorld是測試按鈕的標識{this.View.ShowMessage("Hello world!", MessageBoxType.Notice);decimal jskc; //及時庫存量string FNumber;//物料代碼string FBillNo = "";DynamicObject docSCDDIds1 = this.View.Model.DataObject;FBillNo = docSCDDIds1["Date"].ToString(); --單據頭訂單編號取值,BillNo是訂單編號的標識,在BOS中查看--獲取單據體對象,并循環取單據體字段。FSaleOrderEntry是銷售訂單明細的單據體標識,在BOS中查看EntryEntity entryEntity = this.View.BusinessInfo.GetEntryEntity("FSaleOrderEntry");DynamicObjectCollection docCGSQIds = this.View.Model.GetEntityDataObject(entryEntity);StringBuilder sb = new StringBuilder();OrganizationInfo og = this.Context.CurrentOrganizationInfo;--取當前組織機構for (int i = 0; i < docCGSQIds.Count; i++){jskc = 0;FNumber = "";//算出物料代碼sb.AppendLine("select FNumber from T_BD_Material ");sb.AppendLine("where (1=1) ");sb.AppendLine(string.Format("and FMaterialID={0}", docCGSQIds[i]["MaterialId_Id"]));FNumber = AppServiceContext.DbUtils.ExecuteScalar<string>(Context, sb.ToString(), "0", null);sb.Remove(0, sb.Length);//清空StringBuilder的方法//更新及時庫存,排除報廢倉、不良品倉、默認庫存狀態:不良sb.AppendLine("select isnull(SUM(t1.FBASEQTY),0) from T_STK_INVENTORY t1 ");sb.AppendLine("inner join t_BD_Material t2 on t1.FMaterialID=t2.FMaterialID ");sb.AppendLine("where (1=1) ");sb.AppendLine(string.Format("and t2.FNumber='{0}' and t1.FKEEPERID={1} ", FNumber, og.ID));using (IDataReader dr = AppServiceContext.DbUtils.ExecuteReader(Context, sb.ToString())){while (dr.Read()){//entity.DataEntity["F_Dnk_JSKC"] = dr[0];jskc = Convert.ToDecimal(dr[0]);}}sb.Remove(0, sb.Length);//清空StringBuilder的方法this.View.Model.SetValue("F_Dnk_JSKC", jskc, i); --單據體即時庫存賦值}this.View.UpdateView("F_Dnk_JSKC");}}} }
?
6、編譯代碼,生成DLL文件
右鍵點擊【類庫】,選擇【屬性】,在【生成】頁簽中,瀏覽DLL生成路徑(安裝根目錄下):
?
?
DLL生成路徑如下:C:\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin
?
在解決方案,右鍵點擊【生成解決方案】或【重新生成解決方案】,成功生成MyTest.K3.FIN.SE.FirstPlugIn.DLL
?
?
7、插件注冊
在BOS開發平臺,在銷售訂單屬性中,點擊【表單插件】。打開插件注冊窗口,點擊【注冊】,瀏覽DLL。并啟用DLL
?
8、IIS重啟
在操作系統的開始菜單,打開【運行】,輸入cmd,打開DOS窗口,輸入iisreset命令,重啟IIS
?
9、代碼調試,確保事件是否成功觸發
在代碼窗口,點擊菜單【調試】 - - 【附加到進程】,選擇進程【w3p】,用戶名為:NetWork Service
重點提示:每次代碼修改,都要點擊【重新生成解決方案】,重新生成DLL,并且IIS要重新重啟,新的改動才生效,
調試也要重新附加進程,因為IIS重啟后,進程ID變更了。
?
?
?
打開K3 Cloud客戶端,打開銷售訂單新增界面,點擊【按鈕測試】,觸發代碼調試
代碼調試,按F11逐語句調試。按F10逐過程調試。
?
運行完代碼后,彈出“Hello World!”消息框,并把值填入字段【即時庫存】。
(由于是個人自己實戰訓練的帳套,沒有維護物料和庫存,故庫存沒有值)
?
10、代碼調試分析
調試過程中,業務單據的所有的對象、變量和值,都可以在局部變量查看到
?
轉載于:https://www.cnblogs.com/star-studio/p/7966903.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的三、K3 Cloud 开发插件《K3 Cloud插件开发新手指导 + K3 Cloud插件开发代码调试》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: contain_of宏定义
- 下一篇: Tensorflow基础-mnist数据