二开案例.单据插件.基于列表过滤模型使用过滤条件表格和批量过滤条件表格
【应用场景】
在单据上使用过滤条件表格和批量过滤条件表格。
【案例演示】
采购订单,新增一个页签,演示如何在单据上使用过滤条件表格和批量过滤条件表格。
【实现步骤】
<1>编写单据插件,代码如下。
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
using Kingdee.BOS.JSON;
using Kingdee.BOS.Model.ListFilter;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using System.ComponentModel;
using System.Linq;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
/// <summary>
/// 【单据插件】基于列表过滤模型使用过滤条件表格和批量过滤条件表格
/// </summary>
[Description("【单据插件】基于列表过滤模型使用过滤条件表格和批量过滤条件表格"), HotUpdate]
public class FilterGridBillPlugIn : AbstractBillPlugIn
{
public override void DataChanged(DataChangedEventArgs e)
{
base.DataChanged(e);
if (e.Field.Key.EqualsIgnoreCase("F_Jac_Base"))
{
var formId = e.NewValue as string;
if (!string.IsNullOrWhiteSpace(formId))
{
SetFilterData(formId);
}
}
}
/// <summary>
/// 设置过滤数据
/// </summary>
/// <param name="objectTypeId">对象Id</param>
private void SetFilterData(string objectTypeId)
{
// 创建列表过滤模型
var listFilterModel = this.CreateListFilterModel(objectTypeId);
// 设置过滤条件表格
SetFilterGrid(listFilterModel);
// 设置可选分录
SetEntitySelect(listFilterModel);
}
/// <summary>
/// 创建列表过滤模型
/// </summary>
/// <param name="objectTypeId">业务对象Id</param>
/// <returns>列表过滤模型</returns>
private ListFilterModel CreateListFilterModel(string objectTypeId)
{
var listFilterModel = new ListFilterModel();
var formMetaData = FormMetaDataCache.GetCachedFormMetaData(this.Context, objectTypeId);
listFilterModel.FilterObject.FilterMetaData = CommonFilterServiceHelper.GetFilterMetaData(this.Context, string.Empty);
listFilterModel.SetContext(this.Context, formMetaData.BusinessInfo, formMetaData.BusinessInfo.GetForm().GetFormServiceProvider());
listFilterModel.InitFieldList(formMetaData, null);
return listFilterModel;
}
/// <summary>
/// 设置过滤条件表格
/// </summary>
/// <param name="listFilterModel"></param>
/// <returns></returns>
private void SetFilterGrid(ListFilterModel listFilterModel)
{
// 分录集合
var entityKeys = listFilterModel.BillBusinessInfo.Entrys.Select(o => o.Key).ToArray();
// 设置过滤行
listFilterModel.FilterObject.SetSelectEntity(entityKeys[0]);
var filterGrid = this.View.GetControl<FilterGrid>("FFilterGrid");
// 设置过滤字段
filterGrid.SetFilterFields(listFilterModel.FilterObject.GetAllFilterFieldList());
// 设置可选分录
filterGrid.SetSelectEntities(entityKeys[0]);
var filterRows = listFilterModel.FilterObject.GetFilterRows();
if (filterRows != null)
{
filterGrid.SetFilterRows(filterRows);
}
filterGrid.Enabled = true;
// 设置批量过滤条件表格
var batchFilterGrid = this.View.GetControl<BatchFilterGrid>("FBatchFilterGrid");
batchFilterGrid.SetFilterFields(listFilterModel.BatchFilterObject.GetAllFilterFieldList());
batchFilterGrid.SetSelectEntities(string.Join(",", entityKeys));
}
/// <summary>
/// 设置可选分录(单据体)
/// </summary>
/// <param name="listFilterModel"></param>
private void SetEntitySelect(ListFilterModel listFilterModel)
{
var entitySelect = this.View.GetControl<EntitySelect>("FEntitySelect");
var entities = listFilterModel.EntityObject.GetAllEntities();
entitySelect.SetEntities(entities);
entitySelect.SetSelectEntities(listFilterModel.EntityObject.Setting);
// 添加监视,让分录选择和过滤条件表格可以联动。
var listeners = new JSONArray();
listeners.Add("FFilterGrid");
listeners.Add("FBatchFilterGrid");
entitySelect.SetListeners(listeners);
}
}
}
<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<3>BOSIDE扩展采购订单,新增页签,在新页签上新增分割容器控件,在分割容器上分别新增基础资料字段,分录选择,过滤条件表格和批量过滤条件表格,注册表单插件,保存元数据,开发完毕。
【功能验证】
<1>登录业务站点,打开采购订单新增界面,选择业务对象,过滤条件表格即可使用当前选择的业务对象的过滤字段进行过滤条件的组装。
---------------------------------------------------------------------------------------------------------
【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696
二开案例.单据插件.基于列表过滤模型使用过滤条件表格和批量过滤条件表格
本文2024-09-23 04:08:01发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-163348.html