二开案例.表单插件.可编辑基础资料F8列表返回后使用基础资料名称进行赋值

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

二开案例.表单插件.可编辑基础资料F8列表返回后使用基础资料名称进行赋值

【应用场景】

可编辑基础资料F8列表返回后使用基础资料名称进行赋值。


【案例演示】

采购订单,单据体有一个可编辑基础资料字段,F8列表返回后使用基础资料名称进行赋值。


【实现步骤】

<1>编写表单插件,代码如下。

using Kingdee.BOS.Core.DynamicForm.PlugIn;

using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;

using Kingdee.BOS.Core.Metadata.FieldElement;

using Kingdee.BOS.ServiceHelper;

using Kingdee.BOS.Util;

using System.ComponentModel;

using System.Linq;


namespace Jac.XkDemo.BOS.Business.PlugIn

{

    /// <summary>

    /// 【表单插件】可编辑基础资料F8列表返回后使用基础资料名称进行赋值

    /// </summary>

    [Description("【表单插件】可编辑基础资料F8列表返回后使用基础资料名称进行赋值"), HotUpdate]

    public class BaseDataTextFieldSetValueByNameFormPlugIn : AbstractDynamicFormPlugIn

    {

        public override void AfterF7Select(AfterF7SelectEventArgs e)

        {

            base.AfterF7Select(e);

            if (e.FieldKey.EqualsIgnoreCase("F_Jac_BaseDataText"))

            {

                var selectRows = e.SelectRows;

                if (selectRows == null || selectRows.Count == 0)

                {

                    return;

                }


                var ap = this.View.LayoutInfo.GetFieldAppearance(e.FieldKey);

                var field = ap.Field as BaseDataTextField;

                if (field == null)

                {

                    return;

                }


                if (field.InputModel != BaseDataTextField.Enum_InputModel.OnlyText && field.InputModel != BaseDataTextField.Enum_InputModel.TextAndSelect)

                {

                    return;

                }


                // 取消系统默认的赋值逻辑

                e.Cancel = true;

                // 判断分录行是否够,不够批量创建

                var rowCount = this.Model.GetEntryRowCount(ap.EntityKey);

                var maxRowIndex = e.Row + selectRows.Count;

                if (maxRowIndex > rowCount)

                {

                    this.Model.BatchCreateNewEntryRow(ap.EntityKey, maxRowIndex - rowCount);

                }


                // 开始填充数

                var businessInfo = FormMetaDataCache.GetCachedFormMetaData(Context, field.LookUpObject.FormId).BusinessInfo;

                var nameField = businessInfo.GetField(businessInfo.GetForm().NameFieldKey);

                var pks = selectRows.Select(o => o.PrimaryKeyValue).ToArray();

                var objs = BusinessDataServiceHelper.LoadFromCache(this.Context, pks, ((ILookUpField)ap.Field).RefFormDynamicObjectType);

                var rowIndex = e.Row;

                for (var i = 0; i < objs.Length; i++)

                {

                    // 根据F8返回的数据行数,逐行填充

                    this.Model.SetEntryCurrentRowIndex(ap.EntityKey, rowIndex);

                    this.Model.SetValue(ap.Key, objs[i][nameField.PropertyName].ToString(), rowIndex);

                    this.View.InvokeFieldUpdateService(ap.Key, rowIndex);

                    this.View.UpdateView(ap.Key, rowIndex);

                    rowIndex++;

                }


                // 将分录焦点切换到最后填充的单元格上

                this.View.GetFieldEditor(ap.Key, rowIndex - 1).SetFocus();

            }

        }

    }

}


<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。


<3>BOSIDE扩展采购订单,明细信息单据体增加一个可编辑基础资料字段,注册表单插件,保存元数据,开发完毕。



【功能验证】

<1>登录业务站点,打开采购订单新增界面,可编辑基础资料F8列表选中多行返回,效果如下图。


【参考资料】

【二开案例.元模型.可编辑基础资料】https://vip.kingdee.com/article/127734666328468480

---------------------------------------------------------------------------------------------------------













【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696

二开案例.表单插件.可编辑基础资料F8列表返回后使用基础资料名称进行赋值

【应用场景】可编辑基础资料F8列表返回后使用基础资料名称进行赋值。【案例演示】采购订单,单据体有一个可编辑基础资料字段,F8列表返回后...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息