二开案例.表单插件.获取业务对象的字段集合
【应用场景】获取业务对象的字段集合并填充到下拉列表中。
【案例演示】采购订单,新增一个基础资料字段,用于显示当前账套的所有单据和基础资料业务对象,再新增一个下拉列表字段,用于显示当前基础资料字段选中的业务对象的字段的集合。
【实现步骤】
<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
二开案例.表单插件.获取业务对象的字段集合
本文2024-09-23 04:20:16发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-164660.html