二开案例.下拉列表.动态填充下拉选项

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

二开案例.下拉列表.动态填充下拉选项

【应用场景】某个字段发生值变化时,动态填充下拉列表字段的下拉选项。

【案例演示】采购订单,新增一个下拉列表字段,给该字段定义枚举类型为【等级】,枚举项为【A、B、C、D、E、F】,切换单据类型后,依据不同的单据类型,给该下拉列表字段填充不同的等级。


【实现步骤】

<1>采购订单,新增一个下拉列表字段,添加枚举类型定义【等级】,添加枚举项。


<2>编写单据插件,实现动态填充下拉列表字段的下拉选项的功能,代码如下。

using Kingdee.BOS.Core.Bill.PlugIn;

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

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

using Kingdee.BOS.Core.Metadata;

using Kingdee.BOS.Core.Metadata.FieldElement;

using Kingdee.BOS.Orm.DataEntity;

using Kingdee.BOS.Util;

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Linq;


namespace Jac.XkDemo.BOS.Business.PlugIn

{

    /// <summary>

    /// 【单据插件】填充下拉列表演示

    /// </summary>

    [Description("【单据插件】填充下拉列表演示"), HotUpdate]

    public class FillComboFieldPlugIn : AbstractBillPlugIn

    {

        public override void DataChanged(DataChangedEventArgs e)

        {

            base.DataChanged(e);

            if (e.Field.Key == "FBillTypeID")

            {

                // 如果是使用单据类型触发下拉列表的填充动作时,此事件不需要执行,此DataChanged事件的代码可整段注释掉,因为单据类型切换会引发整个页面的重新加载,需要在AfterBindData事件中填充下拉列表

                // 如果是使用非单据类型字段触发下拉列表的填充动作时,此事件需要执行,AfterBindData事件中不需要执行,对应代码块可以注释掉。

                BindComboField();

            }

        }


        public override void AfterBindData(EventArgs e)

        {

            base.AfterBindData(e);

            BindComboField();

        }


        private void BindComboField()

        {

            // 获取元数据中设计的等级的枚举项集合

            var levelEnumObjects = (DynamicObjectCollection)((ComboField)this.View.BillBusinessInfo.GetField("F_PAEZ_Combo")).EnumObject["Items"];

            var enumList = new List<EnumItem>();

            // 获取单据类型的内码

            var billTypeId = string.Empty;

            var billTypeObj = this.Model.GetValue("FBillTypeID") as DynamicObject;

            if (billTypeObj != null)

            {

                billTypeId = billTypeObj[0].ToString();

            }

            if (billTypeId == "6d01d059713d42a28bb976c90a121142") // 标准委外订单

            {

                // 当单据类型是【标准委外订单】时,给下拉列表填充A,B两个选项

                var enumObjects = levelEnumObjects.Where(o => Convert.ToInt32(o["Value"]) < 2).Select(o => (EnumItem)o).ToArray();

                enumList.AddRange(enumObjects);

            }

            else if (billTypeId == "b8df755fd92b4c2baedef2439c29f793") // 直运采购订单

            {

                // 当单据类型是【直运采购订单】时,给下拉列表填充A,B,C,D两个选项

                var enumObjects = levelEnumObjects.Where(o => Convert.ToInt32(o["Value"]) < 4).Select(o => (EnumItem)o).ToArray();

                enumList.AddRange(enumObjects);

            }

            else

            {

                // 其它情况,给下拉列表填充E,F两个选项

                var enumObjects = levelEnumObjects.Where(o => Convert.ToInt32(o["Value"]) > 3).Select(o => (EnumItem)o).ToArray();

                enumList.AddRange(enumObjects);

            }

            var comboList = this.View.GetFieldEditor<ComboFieldEditor>("F_PAEZ_Combo", 0);

            if (comboList != null)

            {

                comboList.SetComboItems(enumList);

            }

        }

    }

}


<3>注册单据插件。


<4>保存元数据,拷贝插件组件到应用服务器的WebSite\Bin目录,重启IIS,开发完毕。

现在去运行时打开采购订单检查一下演示效果把:)







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


二开案例.下拉列表.动态填充下拉选项

【应用场景】某个字段发生值变化时,动态填充下拉列表字段的下拉选项。【案例演示】采购订单,新增一个下拉列表字段,给该字段定义枚举类型...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息