Как правильно сортировать задачи с многоуровневым идентификатором задачи, таким как 1, 1.1, 1.1.5, 1.2, 2, 2.1.3, 2.2, 4, 11, 13, 44 и т. Д. На экране ввода проекта (PM301000)? - PullRequest
0 голосов
/ 31 мая 2018

Стандартная сортировка по умолчанию:

enter image description here

Ожидаемая сортировка:

enter image description here

1 Ответ

0 голосов
/ 31 мая 2018

Установите Edit Mask в Unicode для сегментированного ключа задачи проекта (CS202000), чтобы разрешить многоуровневый компакт-диск с заданием (допускается значение .)

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>>>();
    }
}
...