二开案例.表单插件.可编辑基础资料F8列表返回后使用基础资料名称进行赋值
【应用场景】
可编辑基础资料F8列表返回后使用基础资料名称进行赋值。
【案例演示】
采购订单,单据体有一个可编辑基础资料字段,F8列表返回后使用基础资料名称进行赋值。
【实现步骤】
<1>编写表单插件,代码如下。
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using System.ComponentModel;
using System.Linq;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
/// <summary>
/// 【表单插件】可编辑基础资料F8列表返回后使用基础资料名称进行赋值
/// </summary>
[Description("【表单插件】可编辑基础资料F8列表返回后使用基础资料名称进行赋值"), HotUpdate]
public class BaseDataTextFieldSetValueByNameFormPlugIn : AbstractDynamicFormPlugIn
{
public override void AfterF7Select(AfterF7SelectEventArgs e)
{
base.AfterF7Select(e);
if (e.FieldKey.EqualsIgnoreCase("F_Jac_BaseDataText"))
{
var selectRows = e.SelectRows;
if (selectRows == null || selectRows.Count == 0)
{
return;
}
var ap = this.View.LayoutInfo.GetFieldAppearance(e.FieldKey);
var field = ap.Field as BaseDataTextField;
if (field == null)
{
return;
}
if (field.InputModel != BaseDataTextField.Enum_InputModel.OnlyText && field.InputModel != BaseDataTextField.Enum_InputModel.TextAndSelect)
{
return;
}
// 取消系统默认的赋值逻辑
e.Cancel = true;
// 判断分录行是否够,不够批量创建
var rowCount = this.Model.GetEntryRowCount(ap.EntityKey);
var maxRowIndex = e.Row + selectRows.Count;
if (maxRowIndex > rowCount)
{
this.Model.BatchCreateNewEntryRow(ap.EntityKey, maxRowIndex - rowCount);
}
// 开始填充数
var businessInfo = FormMetaDataCache.GetCachedFormMetaData(Context, field.LookUpObject.FormId).BusinessInfo;
var nameField = businessInfo.GetField(businessInfo.GetForm().NameFieldKey);
var pks = selectRows.Select(o => o.PrimaryKeyValue).ToArray();
var objs = BusinessDataServiceHelper.LoadFromCache(this.Context, pks, ((ILookUpField)ap.Field).RefFormDynamicObjectType);
var rowIndex = e.Row;
for (var i = 0; i < objs.Length; i++)
{
// 根据F8返回的数据行数,逐行填充
this.Model.SetEntryCurrentRowIndex(ap.EntityKey, rowIndex);
this.Model.SetValue(ap.Key, objs[i][nameField.PropertyName].ToString(), rowIndex);
this.View.InvokeFieldUpdateService(ap.Key, rowIndex);
this.View.UpdateView(ap.Key, rowIndex);
rowIndex++;
}
// 将分录焦点切换到最后填充的单元格上
this.View.GetFieldEditor(ap.Key, rowIndex - 1).SetFocus();
}
}
}
}
<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<3>BOSIDE扩展采购订单,明细信息单据体增加一个可编辑基础资料字段,注册表单插件,保存元数据,开发完毕。
【功能验证】
<1>登录业务站点,打开采购订单新增界面,可编辑基础资料F8列表选中多行返回,效果如下图。
【参考资料】
【二开案例.元模型.可编辑基础资料】https://vip.kingdee.com/article/127734666328468480
---------------------------------------------------------------------------------------------------------
【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696
二开案例.表单插件.可编辑基础资料F8列表返回后使用基础资料名称进行赋值
本文2024-09-23 04:08:11发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-163369.html