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

【应用场景】
高级过滤,输入了好多过滤条件,希望列表查询出来的数据,可以按这个高级过滤输入的过滤条件进行排序。
【案例演示】
采购订单,在用户自定义的过滤方案中,高级过滤,输入多个单据编号,列表查询最终显示结果按此单据编号顺序进行排序。

【实现步骤】
<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);
二开案例.列表插件.列表查询按高级过滤设置的数据行顺序进行排序
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



