学习金蝶软件过程中学习到的东西,做总结,方便日后查阅!
\1. 新建解决方案。
名称空间:命名要求表达准确,无歧义
\2. 断点调试。
\3. 值监控。
FCustomerID
this.View.Model.GetValue(“FCustomerID”)
引用
using Kingdee.BOS.Core.Bill.PlugIn;this.View.Model.SetValue
this.View.Model.GetValue–插件说明
[Description(“表单插件”)]–热启动
[Kingdee.BOS.Util.HotUpdate]
表单插件
引用
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
((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@TS00002 1.01.231-0298-000@20181202@191202@TS00003 CH4441@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
((result) => { this.Model.SetValue("F_SB_TM", ""); this.View.GetControl("F_SB_TM").SetFocus(); }));
引用dll Kingdee.BOS.dll Kingdee.BOS.Core.dll Kingdee.BOS.App.dll Kingdee.BOS.Orm.DataEntity.dll 使用using using 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
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");
上下文,记录一些公用的信息,比如当前登陆用户、组织、连接的数据库、区域等等信息,只要是基于Cloud的开发,基本很少有不用的时候。
CurrentOrganizationInfo | 当前组织信息 |
---|---|
CurrentOrganizationInfo.ID | 当前登录组织id |
CurrentOrganizationInfo.Name | 当前登录组织的名称 |
CurrentUserTimeZone | 当前用户时区 |
DatabaseType | 数据库类型 |
IsMultiOrg | 是否是多组织数据中心 |
UserId | 当前用户Id |
UserName | 当前用户名称 |
DBId | 数据库ID |
UserEmail | 登录用户邮箱 |
UserPhone | 登录用户移动电话 |
引用: Kingdee.BOS.dll Kingdee.BOS.Core.dll Kingdee.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);
文章持续更新,如果喜欢,请拿起你们可爱的小手,给我点个赞吧!
点赞是一种积极的生活态度,赞一个吧!