电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

二开案例.表单插件.动态创建下拉列表字段

来源:金蝶云社区作者:金蝶2024-09-2311

二开案例.表单插件.动态创建下拉列表字段

【应用场景】使用插件,给表单动态的创建下拉列表字段。

【案例演示】新建动态表单,通过插件动态创建下拉列表字段。

【实现步骤】

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

using Kingdee.BOS;

using Kingdee.BOS.Core.DynamicForm.PlugIn;

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

using Kingdee.BOS.Core.Metadata;

using Kingdee.BOS.Core.Metadata.ControlElement;

using Kingdee.BOS.Core.Metadata.FieldElement;

using Kingdee.BOS.Orm.DataEntity;

using Kingdee.BOS.Util;

using Kingdee.BOS.Web.DynamicForm;

using System;

using System.ComponentModel;

using System.Reflection;


namespace Jac.XkDemo.BOS.Business.PlugIn

{

    /// <summary>

    /// 【表单插件】动态创建下拉列表字段

    /// </summary>

    [Description("【表单插件】动态创建下拉列表字段"), HotUpdate]

    public class CreateComboFieldFormPlugIn : AbstractDynamicFormPlugIn

    {

        #region event


        /// <summary>

        /// 动态构造表单元数据

        /// </summary>

        /// <param name="e"></param>

        public override void OnSetLayoutInfo(SetLayoutInfoArgs e)

        {

            base.OnSetLayoutInfo(e);

            // 创建元数据副本

            var metadataCopy = (FormMetadata)ObjectUtils.CreateCopy(this.View.OpenParameter.FormMetaData);

            // 动态创建BusinessInfo

            var businessInfo = metadataCopy.BusinessInfo; //(BusinessInfo)ObjectUtils.CreateCopy(this.View.BusinessInfo);

            // 动态创建LayoutInfo

            var layoutInfo = metadataCopy.GetLayoutInfo(); //ObjectUtils.CreateCopy(this.View.LayoutInfo);

            // 动态创建下拉列表字段

            var fieldAp = MetadataUtils.CreateField<ComboField, ComboFieldAppearance>(this.Context, businessInfo, "FBillHead", "F_Jac_Combo_Country", "F_Jac_Combo_Country", "国家(动态)", 200, 10);

            var field = (ComboField)fieldAp.Field;

            field.MustInput = 1;

            field.FireUpdateEvent = 1;

            field.EnumType = "8a6e30f0-2c26-4639-aff5-76749daa355e";

            var enumObject = new EnumObject(new DynamicObject(EnumObject.EnumObjectType));

            enumObject.Id = ((ComboField)fieldAp.Field).EnumType;

            var enumItem = new EnumItem();

            enumItem.EnumId = "China";

            enumItem.Caption = new LocaleValue("中国");

            enumItem.Value = Convert.ToString("1");

            enumItem.Seq = 1;

            enumObject.Items.Add(enumItem);

            enumItem = new EnumItem();

            enumItem.EnumId = "America";

            enumItem.Caption = new LocaleValue("美国");

            enumItem.Value = Convert.ToString("2");

            enumItem.Seq = 2;

            enumObject.Items.Add(enumItem);

            field.EnumObject = enumObject;

            // 将动态字段注入业务元数据

            businessInfo.Add(fieldAp.Field);

            // 将动态字段注入外观元数据

            layoutInfo.Add(fieldAp);

            // 借助容器控件输出动态字段

            var parentPanel = this.View.GetControl<Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel.Container>("F_Jac_Panel");

            var layout = new LayoutInfo();

            layout.Add(fieldAp);

            parentPanel.AddControls(layout);

            // 重建元数据的动态类型

            businessInfo.GetDynamicObjectType(true);

            // 使用动态构建的元数据替换现有元数据

            MetadataUtils.SetProperty(this.View, "BusinessInfo", businessInfo);

            MetadataUtils.SetProperty(this.View, "BillBusinessInfo", businessInfo);

            MetadataUtils.SetProperty(this.View, "LayoutInfo", layoutInfo);

            MetadataUtils.SetProperty(this.View, "BillLayoutInfo", layoutInfo);

        }


        public override void BarItemClick(BarItemClickEventArgs e)

        {

            base.BarItemClick(e);

            if (e.BarItemKey.EqualsIgnoreCase("tbGetValue"))

            {

                var val1 = (string)this.Model.GetValue("F_Jac_Combo");

                var val2 = (string)this.Model.GetValue("F_Jac_Combo_Country");

                var msg = string.Format("发货状态:{0};国家:{1}", val1, val2);

                this.View.ShowMessage(msg);

                return;

            }

        }


        #endregion


        #region 元数据操作辅助类


        /// <summary>

        /// 元数据操作辅助类

        /// </summary>

        public static class MetadataUtils

        {

            /// <summary>

            /// 创建字段

            /// </summary>

            /// <typeparam name="TField"></typeparam>

            /// <typeparam name="TFieldAppearance"></typeparam>

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

            /// <param name="businessInfo"></param>

            /// <param name="entityKey"></param>

            /// <param name="caption"></param>

            /// <param name="propName"></param>

            /// <param name="fieldName"></param>

            /// <param name="top"></param>

            /// <param name="left"></param>

            /// <returns></returns>


            public static TFieldAppearance CreateField<TField, TFieldAppearance>(Context ctx, BusinessInfo businessInfo, string entityKey, string fieldName, string propName, string caption, int top = 0, int left = 0)

                where TFieldAppearance : FieldAppearance, new()

       

二开案例.表单插件.动态创建下拉列表字段

【应用场景】使用插件,给表单动态的创建下拉列表字段。【案例演示】新建动态表单,通过插件动态创建下拉列表字段。【实现步骤】<1>编写表...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信