二开案例.表单插件.批量复制单据体的数据行到子单据体
【应用场景】
批量复制单据体的数据行到子单据体。
【案例演示】
采购订单,将明细信息单据体选中数据行复制新增到子单据体。
【实现步骤】
<1>编写表单插件,代码如下。
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
/// <summary>
/// 【表单插件】批量复制单据体的数据行到子单据体
/// </summary>
[Description("【表单插件】批量复制单据体的数据行到子单据体"), HotUpdate]
public class CopyEntityDataToSubEntityFormPlugIn : AbstractDynamicFormPlugIn
{
public override void EntryBarItemClick(BarItemClickEventArgs e)
{
base.EntryBarItemClick(e);
if (e.BarItemKey.EqualsIgnoreCase("BatchCopyAdd"))
{
var fieldMaps = new List<Tuple<string, string>>();
// 单据体.字段标识=>子单据体.字段标识
fieldMaps.Add(new Tuple<string, string>("FMaterialId", "F_Jac_Base"));
fieldMaps.Add(new Tuple<string, string>("FQty", "F_Jac_Qty"));
CopyEntityDataToSubEntity(this.View, "FPOOrderEntry", "F_Jac_SubEntity", fieldMaps);
}
}
private void CopyEntityDataToSubEntity(IDynamicFormView view, string entityKey, string subEntityKey, List<Tuple<string, string>> fieldMaps)
{
var entity = view.BusinessInfo.GetEntity(entityKey);
//var subEntity = view.BusinessInfo.GetEntity(subEntityKey);
var entryGrid = view.GetControl<EntryGrid>(entityKey);
var selectedRows = entryGrid.GetSelectedRows();
if (selectedRows == null)
{
view.ShowMessage("请选择分录数据行!");
return;
}
selectedRows = selectedRows.OrderBy(o => o).ToArray();
var currentRowIndex = view.Model.GetEntryCurrentRowIndex(entityKey);
// 逐行复制指定字段的数据到子单据体
foreach (var rowIndex in selectedRows)
{
view.Model.SetEntryCurrentRowIndex(entityKey, rowIndex);
var dataObject = view.Model.GetEntityDataObject(entity, rowIndex);
// 子单据体新增一行
view.Model.CreateNewEntryRow(subEntityKey);
var subEntityNewRowIndex = view.Model.GetEntryRowCount(subEntityKey) - 1;
foreach (var fieldMap in fieldMaps)
{
var val = view.Model.GetValue(fieldMap.Item1, rowIndex);
if (val != null)
{
view.Model.SetValue(fieldMap.Item2, val, subEntityNewRowIndex);
}
}
}
// 复制完后,切换回单据体当前行
view.Model.SetEntryCurrentRowIndex(entityKey, currentRowIndex);
view.UpdateView(subEntityKey);
}
}
}
<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<3>BOSIDE扩展采购订单,新增子单据体,子单据体新增基础资料字段和数量字段,子单据体菜单新增菜单项,注册表单插件,保存元数据,开发完毕。
【功能验证】
<1>登录业务站点,打开采购订单编辑界面,点击批量复制新增。
---------------------------------------------------------------------------------------------------------
【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696
二开案例.表单插件.批量复制单据体的数据行到子单据体
本文2024-09-23 04:08:25发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-163393.html