using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using System;
using System.Collections.Generic; using System.Linq; using System.Text;
using System.Threading.Tasks;
namespace MyDynamicFormPlugIn {
[System.ComponentModel.Description(\)] publicclassClass8 : AbstractBillPlugIn {
publicoverridevoid BarItemClick(BarItemClickEventArgs e) {
if (e.BarItemKey == \) {
this.View.Model.SetValue(\, 10); //调用乘数字段的值更新服务
//由于乘数字段在单据头,这里的行号传0
this.View.InvokeFieldUpdateService(\, 0); } } } }
2.4. 在动态表单插件中,如何修改界面数据 2.4.1. 如何新增单据体行
? 实现思路
? 调用Model的CreateNewEntryRow方法 ? CreateNewEntryRow介绍
? Model提供了5个重载方法,分别介绍
? publicvoid CreateNewEntryRow(DynamicObject parentRow, SubEntryEntity
entity, int row)
在父单据体对应的子单据体上新增一行 名称 parentRow entity row 类型 DynamicObject SubEntryEntity int 说明 父单据体行实体数据包 子单据体实体元数据描述信息 新创建的子单据体行,在此父分录对应的子单据体中对应的是哪一行,如果传-1,默认新增在子单据体的最后一行 ? publicvoid CreateNewEntryRow(Entity entity)
在指定单据体的最后一行,新增一行分录 名称 entity ? publicvoid CreateNewEntryRow(Entity entity, int row)
在指定单据体的指定行,新增一行分录 名称 entity 类型 Entity 说明 指定需要创建一行分录的单据体的元数据描述信息 类型 Entity int 说明 指定新增行的单据体的元数据描述信息 指定新增的单据体行是当前单据体的第几行 row ? publicvirtualvoid CreateNewEntryRow(Entity entity, int row, DynamicObject
rowDataEntity)
在指定单据体的指定行,新增一行分录 名称 entity row rowDataEntity 类型 Entity int DynamicObject 说明 指定新增行的单据体的元数据描述信息 新增到哪一行 待新增行的单据体实体数据包 ? publicvoid CreateNewEntryRow(string key)
在指定单据体唯一标示的单据体上,新增一行分录,默认新增到最后一行 名称 key
? 示例代码 C#
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.Orm.DataEntity; using System;
using System.Collections.Generic;
类型 string 说明 待新增单据体行的单据体唯一标示
using System.Linq; using System.Text;
using System.Threading.Tasks;
namespace MyDynamicFormPlugIn {
publicclassClass9 : AbstractBillPlugIn {
publicoverridevoid ButtonClick(ButtonClickEventArgs e) {
//entity:单据体唯一标识 //subentity:子单据体唯一标识 //获取单据体元数据描述
Entity entity = this.View.BusinessInfo.GetEntity(\); //获取子单据体元数据描述
SubEntryEntity subentity = this.View.BusinessInfo.GetEntity(\) asSubEntryEntity; //为单据体新增一行分录
this.View.Model.CreateNewEntryRow(\); this.View.Model.CreateNewEntryRow(entity, -1); this.View.Model.CreateNewEntryRow( entity, -1,
this.View.Model.DataObject[\] asDynamicObject); //为子单据体新增一行
this.View.Model.CreateNewEntryRow(
this.View.Model.DataObject[\] asDynamicObject, subentity, -1); } } }
2.4.2. 如何删除单据体行
? 实现思路
? 调用model的DeleteEntryRow方法 ? DeleteEntryRow介绍
? 传递待删除行的单据体唯一标示和要删除行的行号 ? 示例代码 C# using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using System;
using System.Collections.Generic; using System.Linq; using System.Text;
using System.Threading.Tasks;
namespace MyDynamicFormPlugIn {
publicclassClass10 : AbstractBillPlugIn {
publicoverridevoid ButtonClick(ButtonClickEventArgs e) {
//entity:单据体唯一标识 //删除单据体第一行分录
this.View.Model.DeleteEntryRow(\, 1); } } }
2.4.3. 如何给普通字段赋值
普通字段,在单据的数据包中,只是用一个属性(DynamicProperty)存储,赋值比较简单: ? 赋值方法列举
? 调用model的SetValue方法 ? 使用字段元数据的动态属性赋值 ? 直接为DynamicObject对象属性赋值 ? 示例代码 C#
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.Metadata.FieldElement; using System;
using System.Collections.Generic; using System.Linq; using System.Text;
using System.Threading.Tasks;
namespace MyDynamicFormPlugIn {
[System.ComponentModel.Description(\)] publicclassClass11 : AbstractBillPlugIn {
publicoverridevoid ButtonClick(ButtonClickEventArgs e) {
//为数量字段赋值10,数量字段的唯一标示是FQty,其动态绑定属性是Qty
//调用SetValue赋值(推荐)
this.View.Model.SetValue(\, 10);
//调用动态实体属性赋值(仅供参考)
Field field = this.View.BusinessInfo.GetField(\);
field.DynamicProperty.SetValue(this.View.Model.DataObject, 10);
//使用动态实体数据属性,直接赋值(仅供参考,极不推荐) this.View.Model.DataObject[\] = 10; } } }
? 特别说明
? 不同字段类型,赋值方法、接受的值类型有差别
? 使用字段元数据的动态属性赋值与直接使用数据模型的属性赋值,其效果是一样的,
这种赋值方式直接修改模型数据包数据,不触发字段的值改变事件,极不推荐; ? 使用this.View.Model.SetValue方法赋值,除了修改数据包数据,还触发一系列插件
事件,如beforeupdatevalue,datachanged,触发实体服务规则等,推荐使用;
2.4.4. 如何给基础资料字段赋值
基础资料字段,在单据数据包中,会有两个属性(分别为DynamicProperty, RefIDDynamicProperty)存储,直接操作数据包比较复杂。另外,基础资料值是一个DynamicObject类型,获取基础资料值也有些复杂。 ? 实现思路
? 使用基础资料id值,调用Model的SetValue方法
? 使用基础资料完整数据包,调用Model的SetValue方法 ? 使用动态属性赋值
? 使用DynamicObject直接访问属性赋值 ? 示例代码 C#
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.FieldElement; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using System;