电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

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

来源:金蝶云社区作者:金蝶2024-09-233

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

【应用场景】

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


【案例演示】

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


【实现步骤】

<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);

 

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

【应用场景】高级过滤,输入了好多过滤条件,希望列表查询出来的数据,可以按这个高级过滤输入的过滤条件进行排序。【案例演示】采购订单,...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信