二开案例.下拉列表.动态填充下拉选项
【应用场景】某个字段发生值变化时,动态填充下拉列表字段的下拉选项。
【案例演示】采购订单,新增一个下拉列表字段,给该字段定义枚举类型为【等级】,枚举项为【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
二开案例.下拉列表.动态填充下拉选项
本文2024-09-23 04:21:40发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-164810.html
- 鼎新e-GoB2雲端ERP B2 線上課程F7進貨單.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程C7會計-自動分錄參數、科目設定.pdf
- 鼎捷OpenAPI應用場景說明_生產管理.pdf
- 鼎捷T100 API設計器T100_APIDesigner_20201023.pptx
- 鼎捷OpenAPI應用場景說明_銷售管理.pdf
- 鼎捷OpenAPI應用場景說明_庫存管理.pdf
- 鼎捷API-T100-1.企业基础API-更新币别数据-t100.oapi.currency.data.update-wssp00034CN02_s.pdf
- 鼎捷API-T100-2.采购信息API-查询请购单清单数据-t100.oapi.purchase.requisitions.list.data.query.get-wssp00060CN02_s.pdf
- 鼎捷API-T100-5.生产信息API-作废工单变更单数据-t100.oapi.wo.change.data.invalid-wssp00241CN02_s.pdf
- 鼎捷API-T100-1.企业基础API-查询BOM列表数据-t100.oapi.bom.data.list.data.query.get-wssp00351CN02_s.pdf