常用表单插件

1、常用单据头事件

获取单据标题 this.View.GetFormTitle()

获取表单Fid内码,this.View.Model.DataObject["id"] 或者 this.View.Model.GetPKValue

设置焦点,this.View.GetControl().SetFocus()

例如设置了必录项,没填,自动跳转到必录项上面,判断哪些值没有录入

条码扫描,固定在一个焦点

锁定、隐藏字段,this.View.GetControl()

字段锁定,变成灰色 this.View.GetControl("字段标识").Enabled = false;

单据体行锁定字段 this.View.GetFieldEditor("单据体行字段标识",0).Enabled = false;

隐藏备注字段 this.View.GetControl("字段标识").Visible = false;

锁定、隐藏按钮,this.View.GetMainBarItem()

锁定保存按钮 this.View.GetMainBarItem("tbSplitSave").Enabled = false;

隐藏保存按钮 this.View.GetMainBarItem("tbSplitSave").Visible = false;

刷新,this.View.Refresh,Update

前台刷新,不和服务器交互  this.View.UpdateView("字段标识");

整个页面刷新,要和服务器交互,把后台数据库数据刷新过来 this.View.Refresh();

调用表单事件,this.View.InvokeFormOperation()

调用保存 this.View.InvokeFormOperation("Save");

//插件名字

[Description("表单插件,表单常用方法")]

//热启动,不用重启IIS

[Kingdee.BOS.Util.HotUpdate]

//继承表单插件

public class ClassName:AbstractBillPlugIn

{

//重写按钮点击事件

public override void BarItemClick(BOS.Core.DynamicForm.PlugIn.Args.BarItemClickEventArgs e)

{

base.BarItemClick(e);

//条件判断,当点击YDIE_ tbGetSetValue这个按钮时候触发

if(e.BarItemKey =="YDIE_tbGetSetValue")

{

//获取单据标题 this.View.GetFormTitle()

//string FormTitle = this.View.GetFormTitle();

//显示出来,显示到备注上面,赋值给备注

//this.View.Model.SetValue("FNote", FormTitle);

//获取单据内码,并转换成字符串.ToString()

//string FormTitle = this.View.Model.DataObject["Id"].ToString();

//显示出来,显示到备注上面,赋值给备注

//this.View.Model.SetValue("FNote", FormTitle);

//获取单据内码,并转换成字符串.ToString()

//string FormTitle = this.View.Model.GetPKValue().ToString();

//显示出来,显示到备注上面,赋值给备注

//this.View.Model.SetValue("FNote", FormTitle);

//获取焦点,备注

//this.View.GetControl("FNote").SetFocus();

//点击按钮,备注字段锁定,变成灰色

//this.View.GetControl("FNote").Enabled = false;

//扩展使用,单据体,备注,行锁定字段

//this.View.GetFieldEditor("FEntryNote",0).Enabled = false;

//隐藏备注字段

//this.View.GetControl("FNote").Visible = false;

//锁定,保存按钮

//this.View.GetMainBarItem("tbSplitSave").Enabled = false;

//隐藏,保存按钮

//this.View.GetMainBarItem("tbSplitSave").Visible = false;

//刷新

//this.View.Refresh();

//点击按钮,调用保存

this.View.InvokeFormOperation("Save");

}

}

}

2、常用单据体事件

删除单据体 this.View.Model.DeleteEntryData("单据体标识");

删除某行单据体,0代表第1行 this.View.Model.DeleteEntryRow("单据体标识", 0);

单据体新增行 this.View.Model.CreateNewEntryRow("单据体标识");

复制行 this.View.Model.CopyEntryRow("单据体标识", 0, 1, false); (参数说明: 0代表第1行;  1代表复制到第2行; false代表不携带源单关系)

获取单据体行id  this.View.Model.GetEntryPKValue("FSaleOrderEntry", 0);

获取单据体行数 this.View.Model.GetEntryRowCount("FSaleOrderEntry");

//插件名字

[Description("单据体属性测试")]

//热启动

[Kingdee.BOS.Util.HotUpdate]

//继承表单插件类

public class ClassName:AbstractBillPlugIn

{

//单据体,按钮点击事件

public override void EntryBarItemClick(BOS.Core.DynamicForm.PlugIn.Args.BarItemClickEventArgs e)

{

base.EntryBarItemClick(e);

//if条件判断,当点击YDIE_tbTest这个按钮时候触发

if(e.BarItemKey.Equals("YDIE_tbTest"))

{

//删除单据体信息

//FSaleOrderEntry,代表订单明细

//this.View.Model.DeleteEntryData("FSaleOrderEntry");

//逐行,删除单据体分录,0代表第1行

//this.View.Model.DeleteEntryRow("FSaleOrderEntry", 0);

//新增行

//this.View.Model.CreateNewEntryRow("FSaleOrderEntry");

//类似上一节功能,复制行

//参数说明: 0代表第1行; 1代表复制到第2行; false代表不携带源单关系

//this.View.Model.CopyEntryRow("FSaleOrderEntry", 0, 1, false);

//获取单据体第1到3行内码,方便后续从数据库操作

//this.View.Model.GetEntryPKValue("FSaleOrderEntry", 0);

//this.View.Model.GetEntryPKValue("FSaleOrderEntry", 1);

//this.View.Model.GetEntryPKValue("FSaleOrderEntry", 2);

//赋值this.View.Model.SetValue();获取行的内码,赋值给新增的字段F_YDIE_EntryID

//this.View.Model.SetValue("F_YDIE_EntryID", this.View.Model.GetEntryPKValue("FSaleOrderEntry", 0),0);

//this.View.Model.SetValue("F_YDIE_EntryID", this.View.Model.GetEntryPKValue("FSaleOrderEntry", 1),1);

//this.View.Model.SetValue("F_YDIE_EntryID", this.View.Model.GetEntryPKValue("FSaleOrderEntry", 2),2);

//获取单据体,行数

//this.View.Model.GetEntryRowCount("FSaleOrderEntry");

//展示效果,把获取到的值放到备注FNote里面

this.View.Model.SetValue("FNote", this.View.Model.GetEntryRowCount("FSaleOrderEntry"));

//刷新,单据体界面

this.View.UpdateView("FSaleOrderEntry");

}

}

}

3、其他常用事件

保存前事件 BeforeSave()

保存后触发 AfterSave()

值更新触发 DataChanged()

获取变化的字段标识 :e.Field.Key

获取变化的值:e.NewValue

获取变化前的值:e.OldValue

单据体哪一行变化的值:e.Row

选择基础资料值前触发 BeforeF7Select事件(一般用来为基础资料添加过滤)

数据绑定后插件:单据新增、编辑、查询后的最后一个事件:AfterBindData

分为:新增、编辑、查看、卸载

ADDNEW、EDIT、VIEW、DISASSEMBLY

判断:this.View.OpenParameter.Status.Equals(OperationStatus.ADDNEW)

4、读写数据库

Context属性,上下文,记录一些公用的信息,比如当前登陆用户、组织、连接的数据库、区域等等信息

里面包含的信息

截图.png

执行sql返回影响行数:ExecuteSql(DBUtils.Execute(this.Context, "/*dialect*/update T_SAL_OUTSTOCKENTRY set FNOTE ='测试'");)

执行sql语句返回Int,表示影响了多少行

执行sql语句返回DataSet DataSet(一般用于报表查询)

DataTable dt = DBUtils.ExecuteDataSet(this.Context, 

"/*dialect*/select FMATERIALID,FNumber from T_BD_MATERIAL").Tables[0];

//循环,读取dt表有多少行                

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

}

执行sql语句返回DataSet

DataTable,Tables[0] 操作数据库,读取第一张表,赋值给dt

执行sql语句返回 IEnumerable<IDataRecord> ExecuteEnumerable

 IEnumerable<IDataRecord> itemDataTable = DBUtils.ExecuteEnumerable(this.Context, 

"/*dialect*/select FMATERIALID,FNumber from T_BD_MATERIAL");                                

//循环                

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++;                

}

执行sql语句,返回DynamicObjectCollection ExecuteDynamicObject()

DynamicObjectCollection Dyobj = DBUtils.ExecuteDynamicObject(this.Context, 

"/*dialect*/select FMATERIALID,FNumber from T_BD_MATERIAL");                                

//循环                

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++;                

}

5、跳转页面

打开其他单据:ListShowParameter()

例:通过采购订单,点击按钮,打开销售订单列表

//定义一个字段,新建一个listShowParameter实例

ListShowParameter listShowParameter = new ListShowParameter();

//FormId你要调用那个单据的列表,通过打开未扩展的销售订单,找到唯一标识

listShowParameter.FormId = "SAL_SaleOrder";

//IsLookUp弹出的列表界面是否有“返回数据”按钮

listShowParameter.IsLookUp = true;

//列表显示类型

//只显示基本信息

listShowParameter.ListType = Convert.ToInt32(BOSEnums.Enu_ListType.BaseList);

//全部显示,默认全部显示

listShowParameter.ListType = Convert.ToInt32(BOSEnums.Enu_ListType.List);

//是否显示复选框。默认是true,如果false就是不显示

listShowParameter.MultiSelect = false;

////接收返回值

//this.View.ShowForm(listShowParameter);

//方法2,传result返回

this.View.ShowForm(listShowParameter,delegate(FormResult result)

{

//读取返回值

object returnData = result.ReturnData;

//判断是否是RowCollection

if(returnData is ListSelectedRowCollection)

{

//如果是,执行,转换格式,行选择

ListSelectedRowCollection listSelectedRowCollection = returnData as ListSelectedRowCollection;

//如果不是空值,说明有返回值

if(listSelectedRowCollection !=null)

{

//获取值.0代表第一行值

DynamicObjectDataRow datarow = (DynamicObjectDataRow)listSelectedRowCollection[0].DataRow;

//赋值

//单据日期 F_YDIE_Text62

//单据编号 F_YDIE_Text61

//单据ID F_YDIE_Text6

this.View.Model.SetValue("F_YDIE_Text6", datarow.DynamicObject["FID"].ToString());

this.View.Model.SetValue("F_YDIE_Text61", datarow.DynamicObject["FBillNo"].ToString());

this.View.Model.SetValue("F_YDIE_Text62", datarow.DynamicObject["FDate"].ToString());

}

}

});

打开外部页面

例:打开百度

JSONObject webobj = new JSONObject();                

webobj["source"] = @"http://www.baidu.com";                

webobj["height"] = 600;                

webobj["width"] = 910;                                                

//是否新窗口打开                

webobj["isweb"] = true;                                

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

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

this.View.SendAynDynamicFormAction(this.View);

posted @ 2024-01-25 17:47  lcyyds  阅读(28)  评论(0)    收藏  举报