二开案例.表单插件.多选基础资料字段
【应用场景】
在界面上显示并使用多选基础资料字段。
【案例演示】
采购订单,新增多选基础资料字段,简单演示其使用方法。
【实现步骤】
<1>编写表单插件,代码如下。
using Kingdee.BOS; using Kingdee.BOS.App.Core; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.Metadata.FieldElement; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.Util; using System; using System.ComponentModel; using System.Linq; namespace Jac.XkDemo.BOS.Business.PlugIn { /// <summary> /// 【表单插件】多选基础资料 /// https://vip.kingdee.com/article/141576438863919104 /// </summary> [Description("【表单插件】多选基础资料"), HotUpdate] public class MulBaseDataFieldFormPlugIn : AbstractDynamicFormPlugIn { public override void BarItemClick(BarItemClickEventArgs e) { base.BarItemClick(e); if (e.BarItemKey.EndsWith("tbModelSetValue", StringComparison.OrdinalIgnoreCase)) { // 使用基础资料内码进行赋值 var ids = new[] { "135764", "136446" }; this.Model.SetValue("F_Jac_MulBase", ids, 0); return; } if (e.BarItemKey.EndsWith("tbFieldSetValue", StringComparison.OrdinalIgnoreCase)) { // 使用基础资料内码进行赋值 var ids = new object[] { "135793", "100209" }; // 获取多选基础资料字段 var field = this.View.Model.BillBusinessInfo.GetField("F_Jac_MulBase") as MulBaseDataField; if (field == null) { return; } // 获取多选基础资料字段所在数据行 var entityObj = this.Model.GetEntityDataObject(field.Entity, 0); FieldSetValue(this.Context, field, entityObj, ids); this.View.UpdateView("F_Jac_MulBase"); return; } if (e.BarItemKey.EndsWith("tbDataObjectSetValue", StringComparison.OrdinalIgnoreCase)) { // 使用基础资料内码进行赋值 var ids = new object[] { "100211", "100212" }; // 获取多选基础资料字段 var field = this.View.Model.BillBusinessInfo.GetField("F_Jac_MulBase") as MulBaseDataField; if (field == null) { return; } // 获取多选基础资料字段所在数据行 var entityObj = this.Model.GetEntityDataObject(field.Entity, 0); DataObjectSetValue(this.Context, field, entityObj, ids); this.View.UpdateView("F_Jac_MulBase"); return; } } /// <summary> /// 多选基础资料字段赋值(通过字段修改数据包) /// </summary> /// <param name="ctx">上下文</param> /// <param name="field">多选基础资料字段</param> /// <param name="entityObj">多选基础资料字段所在数据行</param> /// <param name="pkValues">多个基础资料的内码的集合</param> private void FieldSetValue(Context ctx, MulBaseDataField field, DynamicObject entityObj, object[] pkValues) { // 获取多选基础资料字段的数据包集合 var mulBaseDataEntitySet = field.GetFieldValue(entityObj) as DynamicObjectCollection; //var mulBaseDataEntitySet = entityObj[field.PropertyName] as DynamicObjectCollection; if (mulBaseDataEntitySet == null) { mulBaseDataEntitySet = new DynamicObjectCollection(field.RefEntityDynamicObjectType, entityObj); field.RefEntityDynamicProperty.SetValue(entityObj, mulBaseDataEntitySet); } mulBaseDataEntitySet.Clear(); // 从数据库读取指定的基础资料的数据包,并填充到当前多选基础资料字段的数据包集合中 var baseDataObjects = BusinessDataServiceHelper.LoadFromCache(ctx, pkValues, field.RefFormDynamicObjectType); foreach (var baseDataObject in baseDataObjects) { var mulBaseDataEntity = new DynamicObject(field.RefEntityDynamicObjectType); mulBaseDataEntitySet.Add(mulBaseDataEntity); field.RefEntityDynamicObjectType.PrimaryKey.SetValue(mulBaseDataEntity, new SequenceReader(ctx).GetSequence<long>(field.TableName, 1).First()); field.RefIDDynamicProperty.SetValue(mulBaseDataEntity, baseDataObject[0]); field.DynamicProperty.SetValue(mulBaseDataEntity, baseDataObject); } } /// <summary> /// 多选基础资料字段赋值(直接修改数据包) /// </summary> /// <param name="ctx">上下文</param> /// <param name="field">多选基础资料字段</param> /// <param name="entityObj">多选基础资料字段所在数据行</param> /// <param name="pkValues">多个基础资料的内码的集合</param> private void DataObjectSetValue(Context ctx, MulBaseDataField field, DynamicObject entityObj, object[] pkValues) { // 获取多选基础资料字段的数据包集合 var mulBaseDataEntitySet = field.GetFieldValue(entityObj) as DynamicObjectCollection; if (mulBaseDataEntitySet == null) { mulBaseDataEntitySet = new DynamicObjectCollection(field.RefEntityDynamicObjectType, entityObj); entityObj["F_Jac_MulBase"] = mulBaseDataEntitySet; } mulBaseDataEntitySet.Clear(); // 从数据库读取指定的基础资料的数据包,并填充到当前多选基础资料字段的数据包集合中 var baseDataObjects = BusinessDataServiceHelper.LoadFromCache(ctx, pkValues, field.RefFormDynamicObjectType); foreach (var baseDataObject in baseDataObjects) { var mulBaseDataEntity = new DynamicObject(field.RefEntityDynamicObjectType); mulBaseDataEntitySet.Add(mulBaseDataEntity); //mulBaseDataEntity[0] = new SequenceReader(ctx).GetSequence<long>(field.TableName, 1).First(); mulBaseDataEntity["PKId"] = new SequenceReader(ctx).GetSequence<long>(field.TableName, 1).First(); mulBaseDataEntity["F_Jac_MulBase_Id"] = baseDataObject[0]; mulBaseDataEntity["F_Jac_MulBase"] = baseDataObject; } } } }
<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<3>BOSIDE扩展采购订单,添加一个多选基础资料字段,添加菜单子项,注册表单插件,保存元数据,开发完毕。
【功能验证】
现在可以登录业务站点,打开采购订单编辑界面,尝试使用多选基础资料字段啦。
F8开窗给多选基础资料字段赋值:
通过插件给多选基础资料字段赋值:
---------------------------------------------------------------------------------------------------------
【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696
二开案例.表单插件.多选基础资料字段
【应用场景】在界面上显示并使用多选基础资料字段。【案例演示】采购订单,新增多选基础资料字段,简单演示其使用方法。【实现步骤】<1>编...
点击下载文档
上一篇:二开案例.元模型.多选基础资料下一篇:二开案例.元模型.单选辅助资料
本文2024-09-23 03:59:56发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-162447.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章