如何在项目输入屏幕 (PM301000) 中正确对具有多级任务 ID(如 1、1.1、1.1.5、1.2、2、2.1.3、2.2、4、11、13、44 等)的任务进行排序?

2023-12-15

默认开箱排序:

enter image description here

预期排序:

enter image description here


Set Edit Mask to Unicode项目任务分段密钥 (CS202000),以便允许多级任务 CD(允许.值)

enter image description here

为了获得预期的排序,

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

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

此自定义 BQL 函数将为开箱即用的 TaskCD 值中的任何数字填充零。

enter image description here

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

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

我们将使用以下方式替换数据视图的排序OrderByNew的方法PXSelectBase/PXView.

public class ProjectEntryPXDemoExt : PXGraphExtension<ProjectEntry>
{
    public override void Initialize()
    {
        Base.Tasks.OrderByNew<OrderBy<Asc<PMTaskPXExt.usrSortingTaskCD>>>();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在项目输入屏幕 (PM301000) 中正确对具有多级任务 ID(如 1、1.1、1.1.5、1.2、2、2.1.3、2.2、4、11、13、44 等)的任务进行排序? 的相关文章

随机推荐