二开案例.表单插件.树形单据体支持块粘贴
【应用场景】
树形单据体,默认不支持块粘贴,需要在插件中对块粘贴新增的数据行设置正确的行主键后,才能正常的显示。
【案例演示】
采购合同,新增树形单据体,对物料字段进行块粘贴后能正常显示数据行。
【实现步骤】
<1>编写表单插件,代码如下。
using Kingdee.BOS.App.Core.Utils;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Util;
using System.ComponentModel;
using System.Linq;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
/// <summary>
/// 【表单插件】树形单据体支持块粘贴
/// </summary>
[Description("【表单插件】树形单据体支持块粘贴"), HotUpdate]
public class TreeEntryEntityBlockPastingFormPlugIn : AbstractDynamicFormPlugIn
{
#region var
/// <summary>
/// 树形单据体的Key
/// </summary>
private string TreeEntryEntityKey = "F_Jac_Entity";
#endregion
#region 插件事件
/// <summary>
/// 分录行创建后事件
/// </summary>
/// <param name="e"></param>
public override void AfterCreateNewEntryRow(CreateNewEntryEventArgs e)
{
base.AfterCreateNewEntryRow(e);
if (e.Entity.Key.EqualsIgnoreCase(TreeEntryEntityKey))
{
NewEntryRowSetRowIdFieldValue(this.View, TreeEntryEntityKey, e.Row);
}
}
/// <summary>
/// 分录行复制后事件
/// </summary>
/// <param name="e"></param>
public override void AfterCopyRow(AfterCopyRowEventArgs e)
{
base.AfterCopyRow(e);
if (e.EntityKey.EqualsIgnoreCase(TreeEntryEntityKey))
{
// 新行需要重新设置行标识
NewEntryRowSetRowIdFieldValue(this.View, TreeEntryEntityKey, e.NewRow);
return;
}
}
/// <summary>
/// 给新增分录行设置行标识
/// </summary>
/// <param name="view"></param>
/// <param name="key"></param>
/// <param name="rowIndex"></param>
private static void NewEntryRowSetRowIdFieldValue(IDynamicFormView view, string key, int rowIndex)
{
var entity = view.BillBusinessInfo.GetEntity(key);
var entityDataObject = view.Model.GetEntityDataObject(entity);
if (entityDataObject == null || entityDataObject.Count == 0)
{
return;
}
// 新增的分录行的行号取当前最大行号+1
var newRowId = entityDataObject.Max(o =>
{
int result;
// ROWID来自树形单据体的主键列的属性【绑定实体属性】
int.TryParse(o.GetDynamicObjectItemValue("ROWID", "0"), out result);
return result;
}) + 1;
// FROWID对应BOSIDE中的树形单据体的属性【主键字段名称】
view.Model.SetValue("FROWID", newRowId.ToString("D5"), rowIndex);
// FROWEXPANDTYPE对应BOSIDE中的树形单据体的属性【行类型字段名称】
view.Model.SetValue("FROWEXPANDTYPE", "0", rowIndex);
}
#endregion
}
}
<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<3>BOSIDE扩展采购合同,新增页签,新增树形单据体,注册表单插件,保存元数据,开发完毕。
【功能验证】
<1>登录业务站点,打开采购合同编辑界面,对树形单据体的物料字段进行块粘贴,单据体能正常创建和显示数据行。
---------------------------------------------------------------------------------------------------------
【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696
二开案例.表单插件.树形单据体支持块粘贴
本文2024-09-23 04:08:34发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-163400.html