金蝶云星空之表单插件的开发

前言:

学习金蝶软件过程中学习到的东西,做总结,方便日后查阅!
新建开发解决方案、调试与值监视
\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((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");

表单插件之Context属性

上下文,记录一些公用的信息,比如当前登陆用户、组织、连接的数据库、区域等等信息,只要是基于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选项卡)打开网页地址金蝶软件学习总结


前言:

学习金蝶软件过程中学习到的东西,做总结,方便日后查阅!

编码规则设置:

  1. 常量+流水号。
  2. 常量+日期+流水号:每天流水号重新开始。
  3. 常量+组织+流水号:

什么是数字化转型?

可以用发展的视角去看待“数字化”,理理相关数字化的概念(信息数字化、流程数字化、业务数字化),就差不多可以清楚数字化、数字化转型是怎么回事儿了。

首先,信息数字化:诸如数字相机,数字电视,微软的办公软件(Word、Excel、PowerPoint)这些将人类通过感官获取的信息转化成计算机可以认知的形式;

其次,流程数字化:比如,生产制造使用的ERP系统,营销使用的CRM系统,供应链管理(SCM)系统,办公流程(OA)系统,能够利用计算机处理已经被数字化的信息,将工作流程数字化,能够提高工作协同和资源利用的效率,一般都是企业在用;

第三,业务数字化:就是商业模式的技术化,涉及到不仅是企业本身,而是一个生态,用企业内部与外部生态的数据支撑,打破企业甚至是行业壁垒,业务+技术缺一不可。

以上,知悉~数字化转型就不难理解了,涉及到其中任意一种,都可称之为转型,只不过层次不同而已。

寄存单:

业务场景:采购寄存业务,某公司采购因为仓库有限,商品比较紧张,需要提前备货,所以每次采购的商品,需要先寄存到供应商那里。等仓库有地方后在进行实际入库。

寄存单的使用流程图如下

image-20200514081858039


金蝶表单插件开发总结

新建开发解决方案、调试与值监视
\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((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");

表单插件之Context属性

上下文,记录一些公用的信息,比如当前登陆用户、组织、连接的数据库、区域等等信息,只要是基于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);

后记:

文章持续更新,如果喜欢,请拿起你们可爱的小手,给我点个赞吧!

点赞是一种积极的生活态度,赞一个吧!

webobj["title"] = "百度";

this.View.AddAction("ShowKDWebbrowseForm", webobj);

this.View.SendDynamicFormAction(this.View);

后记:

文章持续更新,如果喜欢,请拿起你们可爱的小手,给我点个赞吧!

点赞是一种积极的生活态度,赞一个吧!

你可能感兴趣的:(.net,c#)