二开案例.列表插件.列表查询隐藏指定分录下的所有列
【应用场景】
列表查询隐藏指定分录下的所有列。
【案例演示】
采购订单列表,过滤方案设置了列表显示单据头和单据体的字段,通过列表插件,控制列表最终仅显示单据头的字段。
【实现步骤】
<1>编写列表插件,代码如下。
using Kingdee.BOS.Core.List.PlugIn;
using Kingdee.BOS.Core.List.PlugIn.Args;
using Kingdee.BOS.Core.Metadata.QueryElement;
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 HideEntryListPlugIn : AbstractListPlugIn
{
public override void PrepareFilterParameter(FilterArgs e)
{
base.PrepareFilterParameter(e);
var showEntityKeys = new[] { "FBILLHEAD" }; // 可显示的分录的Key
// 移除不显示的分录
this.ListModel.FilterParameter.SelectedEntities.RemoveAll(o => !showEntityKeys.Contains(o.Key, StringComparer.OrdinalIgnoreCase));
// 移除不显示的分录下的所有字段
this.ListModel.FilterParameter.ColumnInfo.RemoveAll(o => !showEntityKeys.Contains(o.EntityKey, StringComparer.OrdinalIgnoreCase));
// TODO
var filterString = e.FilterString;
// TODO 过滤条件不能有要隐藏的分录的字段,否则可能会因为主表关联分录表而产生重复数据行
var sortString = e.SortString;
// TODO 排序字段不能有要隐藏的分录的字段,否则可能会因为主表关联分录表而产生重复数据行
e.SortString = ResetSortString(this.ListModel.QueryInfo, showEntityKeys, sortString);
}
/// <summary>
/// 移除排序字段中不允许显示的字段
/// </summary>
/// <param name="queryInfo"></param>
/// <param name="showEntityKeys"></param>
/// <param name="sortString"></param>
/// <returns></returns>
private string ResetSortString(QueryInfo queryInfo, string[] showEntityKeys, string sortString)
{
if (string.IsNullOrWhiteSpace(sortString))
{
return string.Empty;
}
var newSortFields = new List<string>();
var sortFields = sortString.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);
foreach (var sortField in sortFields)
{
var args = sortField.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
var fieldKey = args[0];
var column = queryInfo.SelectFields.FirstOrDefault(o => (o.Key.EqualsIgnoreCase(fieldKey) || o.FullFieldName.EqualsIgnoreCase(fieldKey)));
if (column != null && !showEntityKeys.Contains(column.EntityTable.Key, StringComparer.OrdinalIgnoreCase))
{
// 无效排序列,移除
continue;
}
newSortFields.Add(sortField);
}
return string.Join(",", newSortFields);
}
}
}
<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<3>BOSIDE扩展采购订单,注册列表插件,保存元数据,开发完毕。
【功能验证】
<1>登录业务站点,打开采购订单列表,切换任意过滤方案,此时列表都只显示单据头的列。
---------------------------------------------------------------------------------------------------------
【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696
二开案例.列表插件.列表查询隐藏指定分录下的所有列
本文2024-09-23 04:19:11发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-164546.html