前言:
学习金蝶软件过程中学习到的东西,做总结,方便日后查阅!
新建开发解决方案、调试与值监视
\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)
- e.BarItemKey方法
- 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();
}));
表单插件之读写数据库
引用dllKingdee.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选项卡)打开网页地址金蝶软件学习总结
前言:
学习金蝶软件过程中学习到的东西,做总结,方便日后查阅!
编码规则设置:
- 常量+流水号。
- 常量+日期+流水号:每天流水号重新开始。
- 常量+组织+流水号:
什么是数字化转型?
可以用发展的视角去看待“数字化”,理理相关数字化的概念(信息数字化、流程数字化、业务数字化),就差不多可以清楚数字化、数字化转型是怎么回事儿了。首先,信息数字化:诸如数字相机,数字电视,微软的办公软件(Word、Excel、PowerPoint)这些将人类通过感官获取的信息转化成计算机可以认知的形式;
其次,流程数字化:比如,生产制造使用的ERP系统,营销使用的CRM系统,供应链管理(SCM)系统,办公流程(OA)系统,能够利用计算机处理已经被数字化的信息,将工作流程数字化,能够提高工作协同和资源利用的效率,一般都是企业在用;
第三,业务数字化:就是商业模式的技术化,涉及到不仅是企业本身,而是一个生态,用企业内部与外部生态的数据支撑,打破企业甚至是行业壁垒,业务+技术缺一不可。
以上,知悉~数字化转型就不难理解了,涉及到其中任意一种,都可称之为转型,只不过层次不同而已。
寄存单:
业务场景:采购寄存业务,某公司采购因为仓库有限,商品比较紧张,需要提前备货,所以每次采购的商品,需要先寄存到供应商那里。等仓库有地方后在进行实际入库。
寄存单的使用流程图如下
金蝶表单插件开发总结
新建开发解决方案、调试与值监视
\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)
- e.BarItemKey方法
- 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();
}));
表单插件之读写数据库
引用dllKingdee.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);
后记:
文章持续更新,如果喜欢,请拿起你们可爱的小手,给我点个赞吧!点赞是一种积极的生活态度,赞一个吧!