服务插件中获取单据体删除行、新增行及编辑行集合原创
金蝶云社区-lvys
lvys
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);
                    }
                }
            }
        }
    }
}

参照原贴地址:如何获取采购订单修改明细行记录和被删除的明细行记录

赞 4