K3Cloud+BOS+插件开发百问百答(10)

2019-08-20 18:49

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;


K3Cloud+BOS+插件开发百问百答(10).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:建筑电气毕业设计说明书

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: