Установите Edit Mask
в Unicode
для сегментированного ключа задачи проекта (CS202000), чтобы разрешить многоуровневый компакт-диск с заданием (допускается значение .
)
Чтобы получить ожидаемую сортировку,
Мы создадим пользовательскую функцию 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.
Мы создадим новый пользователь, определенный без привязкиполе в 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>>>();
}
}