金蝶云星空之表单插件的开发
前言:
學習金蝶軟件過程中學習到的東西,做總結,方便日后查閱!
新建開發解決方案、調試與值監視
\1. 新建解決方案。
名稱空間:命名要求表達準確,無歧義
\2. 斷點調試。
\3. 值監控。
FCustomerID
this.View.Model.GetValue(“FCustomerID”)
表單插件的賦值與取值GetValue和SetValue
引用
using Kingdee.BOS.Core.Bill.PlugIn;
this.View.Model.SetValue
this.View.Model.GetValue
–插件說明
[Description(“表單插件”)]
–熱啟動
[Kingdee.BOS.Util.HotUpdate]
單據體取值和賦值GetValue和SetValue
表單插件
引用
using Kingdee.BOS.Core.Bill.PlugIn;
this.View.Model.SetValue
this.View.Model.GetValue
–插件說明
[Description(“表單插件”)]
–熱啟動
[Kingdee.BOS.Util.HotUpdate]
–調用值更新事件
this.View.InvokeFieldUpdateService
表單插件的常用方法
常用的表單插件屬性
this.View.GetFormTitle()------獲取單據標題
this.View.Model.DataObject[“Id”]—獲取表單Fid
this.View.Model.GetPKValue—獲取表單Fid
this.View.GetControl("F_PAEZ_Remarks ").SetFocus()-------設置焦點
this.View.GetControl(“F_PAEZ_Remarks”).Enabled = false; ----鎖定字段
this.View.GetFieldEditor("F_PAEZ_Remarks ", 0).Enabled = false;----單據體行鎖定字段
this.View.GetControl(“F_PAEZ_Remarks”).Visible = false; ----隱藏字段
this.View.GetMainBarItem(“tbSave”).Enabled = false;----鎖定按鈕
this.View.GetMainBarItem(“tbSave”).Visible = false;---- 隱藏按鈕
this.View.UpdateView(“F_SB_SumOutAmount”)前臺刷新,不和服務器交互。
this.View.Refresh----整個頁面刷新,要和服務器交互,把后臺數據庫數據刷新過來
this.View.InvokeFormOperation(“Save”)—調用表單事件
常用的單據體屬性插件
this.View.Model.DeleteEntryData(“FEntity”);–刪除單據體信息
this.View.Model.DeleteEntryRow(“FEntity”,0);–刪除單據體信息
this.View.Model.CreateNewEntryRow(“FEntity”);-創建新行
this.View.Model.CopyEntryRow(“FEntity”,0,1,false);–復制一行。
this.View.Model.GetEntryPKValue(“FEntity”, 0);–獲取單據體FENTRYID內碼
this.View.Model.GetEntryRowCount(“FEntity”)—獲取單據體行數。
表單插件的常用提示框
常用的提示信息框
\1.
this.View.ShowMessage("你好");\2.
this.View.ShowErrMessage("錯誤信息提示");\3.
引用using Kingdee.BOS.Core.DynamicForm;this.View.ShowMessage("信息提示?",MessageBoxOptions.YesNo, new Action<MessageBoxResult>((result) =>{if (result == MessageBoxResult.Yes){ }else if (result == MessageBoxResult.No){return;}}));提示信息:終止、重試、忽略是、否、取消\4. 警告
this.View.ShowWarnningMessage("不能對其進行操作,請確認。", action:(result) => {this.View.Close(); });表單插件之常用事件
BarItemClick點擊事件
public override void BarItemClick(Core.DynamicForm.PlugIn.Args.BarItemClickEventArgs e)1. e.BarItemKey方法2. e.Cancel方法BeforeSave點擊事件
public override void BeforeSave (Core.DynamicForm.PlugIn.Args.BeforeSaveEventArgs e)\1. e.Cancel方法AfterSave點擊事件
public override void AfterSave(Kingdee.BOS.Core.Bill.PlugIn.Args.AfterSaveEventArgs e)e.OperationResult.IsSuccess方法引用using Kingdee.BOS.App.Data;執行sql語句 /*dialect*/DataChanged點擊事件
public override void DataChanged(DataChangedEventArgs e)e.Field.Key---變化的值e.NewValue---變化后的值e.OldValue---變化前的值e.Row----單據體變化的行。AfterBindData事件
public override void AfterBindData(EventArgs e)這個是一個數據綁定后事件。這個事件是單據新增,編輯,查詢加載后最后一個事件。this.View.OpenParameter.Status.Equals(OperationStatus.ADDNEW)這個方法是判斷單據狀態。有四種:ADDNEW、EDIT、VIEW、DISASSEMBLY新增、編輯、查看、卸載CustomEvents事件之簡單的條碼掃描實例:
---用到的事件public override void CustomEvents(CustomEventsArgs e)條碼示例:[1.01.001@20190102@190102@TS00001](mailto:1.01.001@20190102@190102@TS00001)1.01.002@20190202@190202@TS000021.01.231-0298-000@20181202@191202@TS00003CH4441@20181202@191202@TS00004用到以下方法:e.Key.Equals("F_SB_TM")----判斷變更的是那個元素控件e.EventName == "EnterKeyPressed"----捕獲回車事件this.View.GetControl("F_SB_TM").SetFocus();----設置焦點-----字符串拆分數組string[] strArray = this.View.Model.GetValue("FScomOne").ToString().Trim().Split('@');--獲取單據體行數this.Model.GetEntryRowCount("FEntity");-----創建新行this.View.Model.CreateNewEntryRow("FEntity");-----彈出錯誤提示,清空數據,指向焦點。this.View.ShowMessage("條碼位數出錯,請檢查。。。", MessageBoxOptions.OK,new Action<MessageBoxResult>((result) =>{this.Model.SetValue("F_SB_TM", "");this.View.GetControl("F_SB_TM").SetFocus();}));表單插件之讀寫數據庫
引用dllKingdee.BOS.dllKingdee.BOS.Core.dllKingdee.BOS.App.dllKingdee.BOS.Orm.DataEntity.dll使用usingusing System;using System.Collections.Generic;using Kingdee.BOS.Core.Bill.PlugIn;using Kingdee.BOS.Core.DynamicForm;using Kingdee.BOS.App.Data;using System.Data;using Kingdee.BOS.Orm.DataEntity;**一.執行sql語句返回Int,表示影響了多少行**DBUtils.Execute(this.Context, "/*dialect*/update T_SAL_OUTSTOCKENTRY set FNOTE='測試'");**二.執行sql語句返回DataSet**DataTable dt = DBUtils.ExecuteDataSet(this.Context, "/*dialect*/select FMATERIALID,FNumber from T_BD_MATERIAL where FUSEORGID=100006").Tables[0];? for (int i = 0; i < dt.Rows.Count; i++)? {? this.View.Model.CreateNewEntryRow("FEntity");? this.View.Model.SetValue("FMaterialID", dt.Rows[i]["FMATERIALID"].ToString(), i);? this.View.InvokeFieldUpdateService("FMaterialID", i);? this.View.Model.SetValue("FEntrynote", dt.Rows[i]["FNumber"].ToString(), i);? }? this.View.UpdateView("FEntity");**三.執行sql語句返回IEnumerable**? IEnumerable<IDataRecord> itemDataTable = DBUtils.ExecuteEnumerable(this.Context, "/*dialect*/select FMATERIALID,FNumber from T_BD_MATERIAL where FUSEORGID=100006");? int i = 0;? foreach (IDataRecord drItem in itemDataTable)? {? this.View.Model.CreateNewEntryRow("FEntity");? this.View.Model.SetValue("FMaterialID", drItem["FMATERIALID"].ToString(), i);? this.View.InvokeFieldUpdateService("FMaterialID", i);? this.View.Model.SetValue("FEntrynote", drItem["FNumber"].ToString(), i);? i++;? }? this.View.UpdateView("FEntity");**四.執行sql語句返回DynamicObjectCollection**? DynamicObjectCollection Dyobj = DBUtils.ExecuteDynamicObject(this.Context, "/*dialect*/select FMATERIALID,FNumber from T_BD_MATERIAL where FUSEORGID=100006");int j = 0;? foreach(DynamicObject obj in Dyobj)? {? this.View.Model.CreateNewEntryRow("FEntity");? this.View.Model.SetValue("FMaterialID", obj["FMATERIALID"].ToString(), j);? this.View.InvokeFieldUpdateService("FMaterialID", j);? this.View.Model.SetValue("FEntrynote", obj["FNumber"].ToString(), j);? j++;? }? this.View.UpdateView("FEntity");表單插件之Context屬性
上下文,記錄一些公用的信息,比如當前登陸用戶、組織、連接的數據庫、區域等等信息,只要是基于Cloud的開發,基本很少有不用的時候。
| CurrentOrganizationInfo.ID | 當前登錄組織id |
| CurrentOrganizationInfo.Name | 當前登錄組織的名稱 |
| CurrentUserTimeZone | 當前用戶時區 |
| DatabaseType | 數據庫類型 |
| IsMultiOrg | 是否是多組織數據中心 |
| UserId | 當前用戶Id |
| UserName | 當前用戶名稱 |
| DBId | 數據庫ID |
| UserEmail | 登錄用戶郵箱 |
| UserPhone | 登錄用戶移動電話 |
調用系統單據列表界面并返回數據
引用:Kingdee.BOS.dllKingdee.BOS.Core.dllKingdee.BOS.DataEntity使用using System;using Kingdee.BOS;using Kingdee.BOS.Core.Bill.PlugIn;using System.ComponentModel;using Kingdee.BOS.Core.List;using Kingdee.BOS.Core.Enums;using Kingdee.BOS.Core.DynamicForm;新建一個listShowParameter實例ListShowParameter listShowParameter = new ListShowParameter();\1. FormId你要調用那個單據的列表。listShowParameter.FormId = "SAL_SaleOrder";\2. IsLookUp彈出的列表界面是否有“返回數據”按鈕listShowParameter.IsLookUp = true;\3. 列表顯示類型顯示基本信息listShowParameter.ListType = Convert.ToInt32(BOSEnums.Enu_ListType.BaseList);全部顯示listShowParameter.ListType = Convert.ToInt32(BOSEnums.Enu_ListType.List);\4. 是否顯示復選框。默認是true,如果false就是不顯示listShowParameter.MultiSelect = false;\5. 接受返回值this.View.ShowForm(listShowParameter, delegate(FormResult result)? {? object returnData = result.ReturnData;? if (returnData is ListSelectedRowCollection)? {? ListSelectedRowCollection listSelectedRowCollection = returnData as ListSelectedRowCollection;? if (listSelectedRowCollection != null)? {DynamicObjectDataRow datarow = (DynamicObjectDataRow)listSelectedRowCollection[0].DataRow;? this.View.Model.SetValue("F_PAEZ_Text",datarow.DynamicObject["FID"].ToString()) ;? }? }? });表單插件之打開外部頁面
JSONObject webobj = new JSONObject();webobj["source"] = @"http://www.baidu.com";webobj["height"] = 600;webobj["width"] = 910;webobj["isweb"] = false; //是否新彈出一個瀏覽器窗(or選項卡)打開網頁地址webobj["title"] = "百度";this.View.AddAction("ShowKDWebbrowseForm", webobj);this.View.SendDynamicFormAction(this.View);后記:
? 文章持續更新,如果喜歡,請拿起你們可愛的小手,給我點個贊吧!
? this.View.Model.SetValue(“F_PAEZ_Text”,datarow.DynamicObject[“FID”].ToString()) ;
? }
? }
? });
表單插件之打開外部頁面
JSONObject webobj = new JSONObject();webobj["source"] = @"http://www.baidu.com";webobj["height"] = 600;webobj["width"] = 910;webobj["isweb"] = false; //是否新彈出一個瀏覽器窗(or選項卡)打開網頁地址webobj["title"] = "百度";this.View.AddAction("ShowKDWebbrowseForm", webobj);this.View.SendDynamicFormAction(this.View);后記:
? 文章持續更新,如果喜歡,請拿起你們可愛的小手,給我點個贊吧!
點贊是一種積極的生活態度,贊一個吧!
總結
以上是生活随笔為你收集整理的金蝶云星空之表单插件的开发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python继承属性_Python中的属
- 下一篇: invalid floating poi