二开案例.列表插件.列表查询隐藏指定分录下的所有列

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

二开案例.列表插件.列表查询隐藏指定分录下的所有列

【应用场景】

列表查询隐藏指定分录下的所有列。


【案例演示】

采购订单列表,过滤方案设置了列表显示单据头和单据体的字段,通过列表插件,控制列表最终仅显示单据头的字段。


【实现步骤】

<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

二开案例.列表插件.列表查询隐藏指定分录下的所有列

【应用场景】列表查询隐藏指定分录下的所有列。【案例演示】采购订单列表,过滤方案设置了列表显示单据头和单据体的字段,通过列表插件,控...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息