二开案例.列表插件.列表查询按高级过滤设置的数据行顺序进行排序

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

二开案例.列表插件.列表查询按高级过滤设置的数据行顺序进行排序

【应用场景】

高级过滤,输入了好多过滤条件,希望列表查询出来的数据,可以按这个高级过滤输入的过滤条件进行排序。


【案例演示】

采购订单,在用户自定义的过滤方案中,高级过滤,输入多个单据编号,列表查询最终显示结果按此单据编号顺序进行排序。


【实现步骤】

<1>编写列表插件,代码如下。

using Kingdee.BOS.App.Core;

using Kingdee.BOS.App.Data;

using Kingdee.BOS.Core.List.PlugIn;

using Kingdee.BOS.Core.List.PlugIn.Args;

using Kingdee.BOS.Core.ListFilter;

using Kingdee.BOS.Core.SqlBuilder;

using Kingdee.BOS.Util;

using Newtonsoft.Json;

using System.ComponentModel;

using System.Data;


namespace Jac.XkDemo.BOS.Business.PlugIn

{

    /// <summary>

    /// 【列表插件】列表查询按高级过滤设置的数据行顺序进行排序

    /// </summary>

    [Description("【列表插件】列表查询按高级过滤设置的数据行顺序进行排序"), HotUpdate]

    public class SortByBatchFilterRowDataListPlugIn : AbstractListPlugIn

    {

        public override void PrepareFilterParameter(FilterArgs e)

        {

            base.PrepareFilterParameter(e);


            #region 合法性校验


            var filterModel = this.ListModel.GetService<IListFilterModelService>();

            if (filterModel == null

                || filterModel.BatchFilterObject == null

                || filterModel.BatchFilterObject.FilterRows == null)

            {

                return;

            }


            if (filterModel.BatchFilterObject.MakeUpType != "Column")

            {

                // 组合方式必须是列组合

                return;

            }


            if (filterModel.BatchFilterObject.FilterRows == null || filterModel.BatchFilterObject.FilterRows.Count != 1)

            {

                // 排序只支持一个字段

                return;

            }


            if (string.IsNullOrWhiteSpace(filterModel.BatchFilterObject.FilterRows[0].Value))

            {

                // 高级过滤未设置过滤条件

                return;

            }


            var filterRow = filterModel.BatchFilterObject.FilterRows[0];

            var fieldName = filterRow.FilterField.FieldName;

            var values = JsonConvert.DeserializeObject<string[]>(filterRow.Value);

            if (values == null || values.Length == 0)

            {

                // 高级过滤未设置过滤条件

                return;

            }


            #endregion


            #region 将高级过滤的数据行插入临时表


            // 创建临时表,用于暂存高级过滤条件中的数据行,最终会用于列表查询结果的排序

            var sortTableName = TemporaryTableUtil.CreateTemporaryTableName(this.Context);

            //this.View.ShowMessage(sortTableName);

            var createTableSql = string.Format(@"CREATE TABLE {0}

(

FID INT NOT NULL,

FDATA NVARCHAR(36)

)", sortTableName);

            DBUtils.Execute(this.Context, createTableSql);

            var insertSql = string.Format("INSERT INTO {0} (FID,FDATA) VALUES (@FID,@FDATA)", sortTableName);

            // 填充数据到临时表

            var dt = new DataTable(sortTableName);

            dt.Columns.Add(new DataColumn("FID", typeof(int)));

            dt.Columns.Add(new DataColumn("FDATA", typeof(string)));

            foreach (var value in values)

            {

                if (string.IsNullOrWhiteSpace(value))

                {

                    continue;

                }


                var dr = dt.NewRow();

                dr["FID"] = dt.Rows.Count + 1;

                dr["FDATA"] = value;

                dt.Rows.Add(dr);

            }


            if (dt.Rows.Count == 0)

            {

                return;

            }


            DBUtils.BulkInserts(this.Context, dt);


            #endregion


            #region 调整高级过滤条件和排序


            // 列表查询,关联临时表

            e.ExtJoinTables.Add(new ExtJoinTableDescription

            {

                TableName = sortTableName,

                TableNameAs = "ListSortTempTable",

                FieldName = "FDATA",

                ScourceKey = fieldName

            });

            // 列表排序,强制按高级过滤的数据行顺序进行排序

            e.SortString = "ListSortTempTable.FID";


            #endregion

        }

    }

}


<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。


<3>BOSIDE扩展采购订单,注册列表插件,保存元数据,开发完毕。


【功能验证】

<1>登录业务站点,打开采购订单列表,设置自定义过滤方案并在高级过滤条件中,输入多个单据编号,此时的列表查询结果会按高级过滤的单据编号顺序排序,如下图所示。

---------------------------------------------------------------------------------------------------------













【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696

【C#】【列表插件】列表查询按高级过滤设置的数据行顺序进行排序.rar

二开案例.列表插件.列表查询按高级过滤设置的数据行顺序进行排序

【应用场景】高级过滤,输入了好多过滤条件,希望列表查询出来的数据,可以按这个高级过滤输入的过滤条件进行排序。【案例演示】采购订单,...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息