服务插件中获取单据体删除行、新增行及编辑行集合原创
4人赞赏了该文章
456次浏览
编辑于2024年03月06日 15:10:17
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; using Kingdee.BOS; using Kingdee.BOS.Util; using Kingdee.BOS.Core; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.Orm.DataEntity; namespace JDSample.ServicePlugIn.Operation { [Description("在单据保存操作插件中,获取增、删、改的单据体行")] public class S160810AEDRowOpPlug : AbstractOperationServicePlugIn { /// /// 在单据数据,提交到数据库之前触发此事件: /// /// 需要在执行保存前,数据还没有提交到数据库时,对单据数据包进行分析,得出增、删、改的单据体行 /// /// /// <summary> /// /// 在单据数据,提交到数据库之前触发此事件: /// </summary> /// <param name="e"></param> public override void BeginOperationTransaction(BeginOperationTransactionArgs e) { List addRows = new List(); List editRows = new List(); List delRows = new List(); Entity entity = this.BusinessInfo.GetEntity("FPOOrderEntry"); foreach (var billObj in e.DataEntitys) { // 1. 获取单据体行集合 DynamicObjectCollection rows = entity.DynamicProperty.GetValue(billObj) as DynamicObjectCollection; // 2. 获取被删除的行 foreach (var row in rows.DeleteRows) { // 判断此行,是不是从数据库读取出来,然后被删除了 // 用户可能会在界面上,点新增行,随后点删除行,这种数据行,不需要关注 if (row.DataEntityState.FromDatabase == true) { delRows.Add(row); } } // 2. 获取新增的行、修改的行 foreach (var row in rows) { if (row.DataEntityState.FromDatabase == true) { // 本行是来自于数据库的,属于被修改的历史行 editRows.Add(row); } else { // 本行不是来自于数据库,应该是用户点新增行创建的 addRows.Add(row); } } } } } }
参照原贴地址:如何获取采购订单修改明细行记录和被删除的明细行记录
推荐阅读