如何在项目输入屏幕(PM301000)中正确排序具有多级任务ID(例如1、1.1、1.1.5、1.2、2、2.1.3、2.2、4、11、13、44等)的任务? [英] How to properly sort Tasks having multi-level Task Id like 1, 1.1, 1.1.5, 1.2, 2, 2.1.3, 2.2, 4, 11, 13, 44 etc. in Project Entry screen (PM301000)?

查看:62
本文介绍了如何在项目输入屏幕(PM301000)中正确排序具有多级任务ID(例如1、1.1、1.1.5、1.2、2、2.1.3、2.2、4、11、13、44等)的任务?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

默认开箱即用排序:





预期排序:





要获得预期的排序,



我们将创建自定义BQL函数,该函数将填充数字部分到现成的TaskCD字段。

 公共类HierarchySorting< StringField> :BqlFormulaEvaluator< StringField> ;, IBqlOperand 
其中StringField:IBqlField
{
公共替代对象Evaluate(PXCache缓存,对象项,
Dictionary< Type,object> pars)
{
PXFieldState fState = cache.GetStateExt< StringField>(item)作为PXFieldState;
return GetSortOrderValueExt(Convert.ToString(fState.Value));
}

公共字符串GetSortOrderValueExt(string taskCD)
{
return Regex.Replace(taskCD, [0-9] +,MatchReplacer => MatchReplacer .Value.PadLeft(10,'0'));
}
}

此自定义BQL函数将为其中的任何数字填充零现成的TaskCD值。





我们将在 PMTask 的DAC扩展中创建一个新的未绑定用户定义字段,并将使用具有自定义BQL的 PXFormula 装饰函数

 公共类PMTaskPXExt:PXCacheExtension< PMTask> 
{
公共抽象类usrSortingTaskCD:IBqlField {}

[PXString(IsUnicode = true)]
[PXUIField(DisplayName = Usr Task)]
[PXFormula(typeof(HierarchySorting< PMTask.taskCD>))]]
公共虚拟字符串UsrSortingTaskCD {get;组; }
}

我们将使用<$ c $替换数据视图的排序 PXSelectBase / PXView 的c> OrderByNew 方法。

 公共类ProjectEntryPXDemoExt:PXGraphExtension< ProjectEntry> 
{
公共重写void Initialize()
{
Base.Tasks.OrderByNew< OrderBy< Asc< PMTaskPXExt.usrSortingTaskCD>>>>();
}
}


Default Out-of-box Sorting:

Expected Sorting:

解决方案

Set Edit Mask to Unicode for Project Task Segmented Key (CS202000) in order to allow multi-level Task CD (allowing . in value)

To get the expected sorting,

We will create custom BQL function which will pad the numeric portion to the out-of-box TaskCD field.

public class HierarchySorting<StringField> : BqlFormulaEvaluator<StringField>, IBqlOperand
        where StringField : IBqlField
{
    public override object Evaluate(PXCache cache, object item, 
                                    Dictionary<Type, object> pars)
    {
        PXFieldState fState = cache.GetStateExt<StringField>(item) as PXFieldState;
        return GetSortOrderValueExt(Convert.ToString(fState.Value));
    }

    public string GetSortOrderValueExt(string taskCD)
    {
        return Regex.Replace(taskCD, "[0-9]+", MatchReplacer => MatchReplacer.Value.PadLeft(10, '0'));
    }
}

This custom BQL function will pad zeros for any number in out-of-box TaskCD value.

We will create a new un-bound user defined field in DAC Extension of PMTask and will decorate with PXFormula having custom BQL function

public class PMTaskPXExt : PXCacheExtension<PMTask>
{
    public abstract class usrSortingTaskCD : IBqlField { }

    [PXString(IsUnicode = true)]
    [PXUIField(DisplayName = "Usr Task")]
    [PXFormula(typeof(HierarchySorting<PMTask.taskCD>))]
    public virtual string UsrSortingTaskCD { get; set; }
}

We will replace the sorting for the data view using the OrderByNew method of PXSelectBase/PXView.

public class ProjectEntryPXDemoExt : PXGraphExtension<ProjectEntry>
{
    public override void Initialize()
    {
        Base.Tasks.OrderByNew<OrderBy<Asc<PMTaskPXExt.usrSortingTaskCD>>>();
    }
}

这篇关于如何在项目输入屏幕(PM301000)中正确排序具有多级任务ID(例如1、1.1、1.1.5、1.2、2、2.1.3、2.2、4、11、13、44等)的任务?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆