如何在项目输入屏幕(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)?
默认开箱排序:
预期排序:
将项目任务分段密钥 (CS202000) 的 Edit Mask
设置为 Unicode
以允许 multi-level 任务 CD(允许值 .
)
要获得预期的排序,
我们将创建自定义 BQL 函数,它将数字部分填充到 out-of-box 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 函数将为 out-of-box TaskCD 值中的任何数字填充零。
我们将在 PMTask
的 DAC 扩展中创建一个新的 un-bound 用户定义字段,并将使用具有自定义 BQL 函数的 PXFormula
进行装饰
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; }
}
我们将使用 PXSelectBase/PXView
的 OrderByNew
方法替换数据视图的排序。
public class ProjectEntryPXDemoExt : PXGraphExtension<ProjectEntry>
{
public override void Initialize()
{
Base.Tasks.OrderByNew<OrderBy<Asc<PMTaskPXExt.usrSortingTaskCD>>>();
}
}
默认开箱排序:
预期排序:
将项目任务分段密钥 (CS202000) 的 Edit Mask
设置为 Unicode
以允许 multi-level 任务 CD(允许值 .
)
要获得预期的排序,
我们将创建自定义 BQL 函数,它将数字部分填充到 out-of-box 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 函数将为 out-of-box TaskCD 值中的任何数字填充零。
我们将在 PMTask
的 DAC 扩展中创建一个新的 un-bound 用户定义字段,并将使用具有自定义 BQL 函数的 PXFormula
进行装饰
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; }
}
我们将使用 PXSelectBase/PXView
的 OrderByNew
方法替换数据视图的排序。
public class ProjectEntryPXDemoExt : PXGraphExtension<ProjectEntry>
{
public override void Initialize()
{
Base.Tasks.OrderByNew<OrderBy<Asc<PMTaskPXExt.usrSortingTaskCD>>>();
}
}