二开案例.表单插件.获取业务对象的字段集合

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

二开案例.表单插件.获取业务对象的字段集合

【应用场景】获取业务对象的字段集合并填充到下拉列表中。

【案例演示】采购订单,新增一个基础资料字段,用于显示当前账套的所有单据和基础资料业务对象,再新增一个下拉列表字段,用于显示当前基础资料字段选中的业务对象的字段的集合。

【实现步骤】

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

using Kingdee.BOS;

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.Core.Metadata;

using Kingdee.BOS.Orm.DataEntity;

using Kingdee.BOS.ServiceHelper;

using Kingdee.BOS.Util;

using System;

using System.Collections.Generic;

using System.ComponentModel;


namespace Jac.XkDemo.BOS.Business.PlugIn

{

    /// <summary>

    /// 【表单插件】获取业务对象的字段集合

    /// </summary>

    [Description("【表单插件】获取业务对象的字段集合"), HotUpdate]

    public class GetFieldListByFormIdFormPlugIn : AbstractDynamicFormPlugIn

    {

        public override void DataChanged(DataChangedEventArgs e)

        {

            base.DataChanged(e);

            if (e.Field.Key.Equals("F_Jac_Base", StringComparison.OrdinalIgnoreCase))

            {

                // 获取业务对象标识

                var formId = string.Empty;

                var value = (DynamicObject)this.Model.GetValue(e.Field);

                if (value != null)

                {

                    formId = value["Id"].ToString();

                }


                // 绑定下拉列表字段

                BindComboField(this.View, "F_Jac_Combo", formId);

            }

        }


        /// <summary>

        /// 绑定下拉列表字段

        /// </summary>

        /// <param name="view"></param>

        /// <param name="comboFieldKey"></param>

        /// <param name="formId"></param>

        private static void BindComboField(IDynamicFormView view, string comboFieldKey, string formId)

        {

            var enumList = GetEnumItems(view.Context, formId);

            var comboList = view.GetFieldEditor<ComboFieldEditor>(comboFieldKey, 0);

            if (comboList != null)

            {

                comboList.SetComboItems(enumList);

            }

        }


        /// <summary>

        /// 从数据库读取指定枚举类型并转换成枚举项集合

        /// </summary>

        /// <param name="ctx"></param>

        /// <param name="formId">业务对象标识</param>

        /// <returns></returns>

        private static List<EnumItem> GetEnumItems(Context ctx, string formId)

        {

            var enumList = new List<EnumItem>();

            if (string.IsNullOrWhiteSpace(formId))

            {

                return enumList;

            }


            // 获取业务对象的运行时的元数据

            var metadata = MetaDataServiceHelper.GetFormMetaData(ctx, formId);

            if (metadata == null)

            {

                return enumList;

            }


            // 从业务对象的元数据中获取其所有的字段的集合

            var entityAppearances = metadata.LayoutInfos[0].GetEntityAppearances();

            foreach (var entityAppearance in entityAppearances)

            {

                var fieldAppearances = entityAppearance.Layoutinfo.GetFieldAppearances();

                foreach (var fieldAppearance in fieldAppearances)

                {

                    var enumItem = new EnumItem();

                    var fieldCaption = (LocaleValue)entityAppearance.Caption.Clone();

                    fieldCaption.Merger(fieldAppearance.Caption, ".");

                    enumItem.Caption = fieldCaption;

                    enumItem.EnumId = string.Format("{0}.{1}", entityAppearance.EntityKey, fieldAppearance.Key);

                    enumItem.Invalid = false;

                    enumItem.Value = fieldAppearance.Key;

                    enumList.Add(enumItem);

                }

            }


            return enumList;

        }

    }

}


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


<3>BOSIDE扩展采购订单,新增基础资料字段,新增下拉列表字段,注册表单插件,保存元数据,开发完毕。

新增基础资料字段:

设置基础资料类型为:业务对象

设置过滤条件为:FModelTypeID IN (100,400) AND FDevType IN (0,1)

设置即时触发更新事件为:勾选




现在可以登录业务站点,打开采购订单新增界面,选择任意业务对象,该业务对象的字段集合就可以在下拉列表中显示啦。




【参考资料】

【二开案例.元模型.下拉列表】https://vip.kingdee.com/article/134300640749955840

【二开案例.表单插件.下拉列表动态绑定枚举类型】https://vip.kingdee.com/article/137494654802820864

【二开案例.表单插件.下拉列表使用自定义数据源(SQL)】https://vip.kingdee.com/article/137250328441093888













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

二开案例.表单插件.获取业务对象的字段集合

【应用场景】获取业务对象的字段集合并填充到下拉列表中。【案例演示】采购订单,新增一个基础资料字段,用于显示当前账套的所有单据和基础...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息