三、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、代碼調試分析

調試過程中,業務單據的所有的對象、變量和值,都可以在局部變量查看到

 


免責聲明!

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



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