三、K3 Cloud 开发插件《K3 Cloud插件开发新手指导 + K3 Cloud插件开发代码调试》
案例需求:在銷售訂單上新增一個(gè)按鈕,在訂單明細(xì)中新增一個(gè)字段,命名[即時(shí)庫(kù)存]。
點(diǎn)擊按鈕,彈出“Hello World!”,并獲取訂單明細(xì)物料的即時(shí)庫(kù)存,填入字段[即時(shí)庫(kù)存]。
開(kāi)發(fā)工具:Visual Studio 2012
開(kāi)發(fā)語(yǔ)言:Asp.net C#
=================================
目錄:
1、BOS單據(jù)加按鈕 - -【測(cè)試按鈕】
2、BOS單據(jù)加字段 - -[即時(shí)庫(kù)存]
3、創(chuàng)建Visual C#類庫(kù)
4、引入命名空間
5、編寫按鈕點(diǎn)擊事件,建議用不帶任何代碼的空白事件進(jìn)行測(cè)試
6、編譯代碼,生成DLL文件
7、插件注冊(cè)
8、IIS重啟
9、代碼調(diào)試,確保事件是否成功觸發(fā)
10、代碼調(diào)試過(guò)程分析
=================================
1、BOS單據(jù)加按鈕 - - 【測(cè)試按鈕】
?打開(kāi)【金蝶K3 Cloud BOS集成開(kāi)發(fā)平臺(tái)】,右鍵點(diǎn)擊【銷售訂單】,選擇擴(kuò)展(在擴(kuò)展/繼承模板才可加字段),
在【銷售訂單屬性】窗口,點(diǎn)擊【菜單集合】,在單據(jù)頭新增按鈕【測(cè)試按鈕】。
?
在菜單編輯中,右鍵點(diǎn)擊【工具條】,新增按鈕【測(cè)試按鈕】,標(biāo)識(shí)為 “HelloWorld”。標(biāo)識(shí)在插件代碼中識(shí)別。
?
?
2、BOS單據(jù)加字段 - - [即時(shí)庫(kù)存]
?
3、創(chuàng)建Visual C#類庫(kù)
打開(kāi)Visual Studio 2012,在菜單【文件】 - - 【新建】,點(diǎn)擊【項(xiàng)目】,新建Visual C# 類庫(kù)。
?
4、引入命名空間
?
?
?
?
5、編寫按鈕點(diǎn)擊事件,建議用不帶任何代碼的空白事件
沒(méi)有代碼的空白事件如下,并設(shè)置斷點(diǎn)調(diào)試:
?
?
這是完全代碼如下:
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是測(cè)試按鈕的標(biāo)識(shí){this.View.ShowMessage("Hello world!", MessageBoxType.Notice);decimal jskc; //及時(shí)庫(kù)存量string FNumber;//物料代碼string FBillNo = "";DynamicObject docSCDDIds1 = this.View.Model.DataObject;FBillNo = docSCDDIds1["Date"].ToString(); --單據(jù)頭訂單編號(hào)取值,BillNo是訂單編號(hào)的標(biāo)識(shí),在BOS中查看--獲取單據(jù)體對(duì)象,并循環(huán)取單據(jù)體字段。FSaleOrderEntry是銷售訂單明細(xì)的單據(jù)體標(biāo)識(shí),在BOS中查看EntryEntity entryEntity = this.View.BusinessInfo.GetEntryEntity("FSaleOrderEntry");DynamicObjectCollection docCGSQIds = this.View.Model.GetEntityDataObject(entryEntity);StringBuilder sb = new StringBuilder();OrganizationInfo og = this.Context.CurrentOrganizationInfo;--取當(dāng)前組織機(jī)構(gòu)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的方法//更新及時(shí)庫(kù)存,排除報(bào)廢倉(cāng)、不良品倉(cāng)、默認(rèn)庫(kù)存狀態(tài):不良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); --單據(jù)體即時(shí)庫(kù)存賦值}this.View.UpdateView("F_Dnk_JSKC");}}} }
?
6、編譯代碼,生成DLL文件
右鍵點(diǎn)擊【類庫(kù)】,選擇【屬性】,在【生成】頁(yè)簽中,瀏覽DLL生成路徑(安裝根目錄下):
?
?
DLL生成路徑如下:C:\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin
?
在解決方案,右鍵點(diǎn)擊【生成解決方案】或【重新生成解決方案】,成功生成MyTest.K3.FIN.SE.FirstPlugIn.DLL
?
?
7、插件注冊(cè)
在BOS開(kāi)發(fā)平臺(tái),在銷售訂單屬性中,點(diǎn)擊【表單插件】。打開(kāi)插件注冊(cè)窗口,點(diǎn)擊【注冊(cè)】,瀏覽DLL。并啟用DLL
?
8、IIS重啟
在操作系統(tǒng)的開(kāi)始菜單,打開(kāi)【運(yùn)行】,輸入cmd,打開(kāi)DOS窗口,輸入iisreset命令,重啟IIS
?
9、代碼調(diào)試,確保事件是否成功觸發(fā)
在代碼窗口,點(diǎn)擊菜單【調(diào)試】 - - 【附加到進(jìn)程】,選擇進(jìn)程【w3p】,用戶名為:NetWork Service
重點(diǎn)提示:每次代碼修改,都要點(diǎn)擊【重新生成解決方案】,重新生成DLL,并且IIS要重新重啟,新的改動(dòng)才生效,
調(diào)試也要重新附加進(jìn)程,因?yàn)镮IS重啟后,進(jìn)程ID變更了。
?
?
?
打開(kāi)K3 Cloud客戶端,打開(kāi)銷售訂單新增界面,點(diǎn)擊【按鈕測(cè)試】,觸發(fā)代碼調(diào)試
代碼調(diào)試,按F11逐語(yǔ)句調(diào)試。按F10逐過(guò)程調(diào)試。
?
運(yùn)行完代碼后,彈出“Hello World!”消息框,并把值填入字段【即時(shí)庫(kù)存】。
(由于是個(gè)人自己實(shí)戰(zhàn)訓(xùn)練的帳套,沒(méi)有維護(hù)物料和庫(kù)存,故庫(kù)存沒(méi)有值)
?
10、代碼調(diào)試分析
調(diào)試過(guò)程中,業(yè)務(wù)單據(jù)的所有的對(duì)象、變量和值,都可以在局部變量查看到
?
轉(zhuǎn)載于:https://www.cnblogs.com/star-studio/p/7966903.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的三、K3 Cloud 开发插件《K3 Cloud插件开发新手指导 + K3 Cloud插件开发代码调试》的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: contain_of宏定义
- 下一篇: Tensorflow基础-mnist数据