小技巧 - 新建单据时,如何把历史单据的单据体复制过来
金蝶云社区-JohnnyDing
JohnnyDing
1人赞赏了该文章 2,526次浏览 未经作者许可,禁止转载编辑于2015年09月06日 09:53:40

背景说明:
某些单据,单据体的信息,总体来说是非常类似,因此,可以先建立一张单据,维护好单据体行,然后作为模板
之后在新建单据时,可以把模板单据上的单据体行复制过来,减少新单录入工作量。

示例代码:(仅供参考,未调试)

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.Bill;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Orm;
using Kingdee.BOS.Orm.DataEntity;


namespace JDSample.FormPlugIn.Bill
{
///


/// 新建单据时,复制单据体
///

///
/// 场景说明:
/// 某些单据,单据体的信息,总体来说是非常类似,
/// 因此,可以先建立一张单据,维护好单据体行,作为模板
/// 之后新建单据时,可以把模板上的单据体行复制过来,减少新单录入工作量
///

[Description("新建单据时,复制单据体")]
public class S150906CopyEntryRowEdit : AbstractBillPlugIn
{
///
/// 新建单据数据包完毕后触发此事件
///

///
///
/// 系统默认新建的单据数据包,单据体仅包含空白行;
/// 需要在此事件中,复制模板单据的单据体行
///

public override void AfterCreateNewData(EventArgs e)
{
// 单据体元数据定义
Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity");

// 加载作为模板的单据 : 假设FID为100001
DynamicObject templateBillObj = BusinessDataServiceHelper.LoadSingle(
this.Context,
100001,
this.View.BillBusinessInfo.GetDynamicObjectType());


// 获取模板单据的单据体集合
DynamicObjectCollection tempEntryRows = entity.DynamicProperty.GetValue(templateBillObj)
as DynamicObjectCollection;

// 逐行复制模板单据的单据体行,添加到新单据上
for(int rowIndex = 0; rowIndex < tempEntryRows.Count; rowIndex++)
{
// 通过复制对象的方式,复制新行 (using Kingdee.BOS.Orm;)
DynamicObject newEntryRow = (DynamicObject)tempEntryRows[rowIndex].Clone(false, true);
// 把新行添加新单据上
this.Model.CreateNewEntryRow(entity, rowIndex, newEntryRow);
}
}
}
}