二开案例.表单插件.树形单据体支持块粘贴

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

二开案例.表单插件.树形单据体支持块粘贴

【应用场景】

树形单据体,默认不支持块粘贴,需要在插件中对块粘贴新增的数据行设置正确的行主键后,才能正常的显示。


【案例演示】

采购合同,新增树形单据体,对物料字段进行块粘贴后能正常显示数据行。


【实现步骤】

<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

二开案例.表单插件.树形单据体支持块粘贴

【应用场景】树形单据体,默认不支持块粘贴,需要在插件中对块粘贴新增的数据行设置正确的行主键后,才能正常的显示。【案例演示】采购合同...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息