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

前言:

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

新建开发解决方案、调试与值监视

\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);

后记:

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

​ 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);

后记:

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

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

你可能感兴趣的:(金蝶开发)