You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PM301000项目录入界面正确排序多级任务ID?

解决PM301000项目录入界面多级任务ID的正确排序问题

嘿,我来帮你搞定这个多级任务ID的排序坑!首先得明白为啥默认排序会乱——因为系统把任务ID当成普通字符串来排序了,字符串比较是逐字符比的,比如"11"的第一个字符是"1",比"2"小,所以就会排在2前面,完全不符合我们的层级逻辑。

要实现你想要的那种按层级顺序(1→1.1→1.1.5→1.2→2→2.1.3→2.2→4→11→13→44)的排序,我给你两个靠谱的实操方案:

方法一:自定义排序字段(最推荐,简单易维护)

这个思路是给任务表加一个计算字段,把多级ID转换成"补零对齐"的字符串,让字符串排序能匹配层级逻辑:

  • 打开Acumatica的自定义项目编辑器,找到PMTask这个DAC(数据访问类)
  • 添加一个自定义字符串字段,比如叫UsrTaskIDSortable,长度设50足够用
  • 给这个字段加计算逻辑:把原TaskID按点拆分,每个部分补前导零到固定位数(比如3位,应对三位数的层级编号),再用点拼接回去。举个例子:
    • 原ID"1" → 转成"001"
    • 原ID"1.1" → 转成"001.001"
    • 原ID"11" → 转成"011"
      你可以用DAC的FieldUpdated事件来实现这个转换(代码示例在下面),或者用SQL计算字段
  • 回到PM301000的任务网格,调整排序规则,把这个自定义字段设为升序排序依据,替换原来的TaskID排序

参考代码(C#自定义字段转换)

public class PMTaskExt : PXCacheExtension<PMTask>
{
    public static bool IsActive() => true;

    [PXDBString(50)]
    [PXUIField(DisplayName = "排序用任务ID")]
    public virtual string UsrTaskIDSortable { get; set; }
    public abstract class usrTaskIDSortable : PX.Data.BQL.BqlString.Field<usrTaskIDSortable> { }

    // 当TaskID更新时自动计算排序字段
    protected void _(Events.FieldUpdated<PMTask.taskID> e)
    {
        PMTask task = e.Row;
        if (task == null || string.IsNullOrEmpty(task.TaskID)) return;

        string[] idParts = task.TaskID.Split('.');
        StringBuilder sortedID = new StringBuilder();
        
        foreach (string part in idParts)
        {
            if (sortedID.Length > 0) sortedID.Append('.');
            // 补3位前导零,可根据实际层级长度调整位数
            sortedID.Append(part.PadLeft(3, '0'));
        }
        
        UsrTaskIDSortable = sortedID.ToString();
    }
}

方法二:自定义排序比较器(适合不想加字段的场景)

如果不想新增字段,也可以写一个自定义的排序比较逻辑,直接在代码里对TaskID进行语义化比较:

  • 在PM301000界面的网格事件里,重写排序逻辑,把TaskID拆分成数字数组,逐层级比较数值大小,而不是字符串比较
  • 比如在C#里实现一个IComparer<string>,专门处理这种带点的多级ID排序,然后绑定到网格的排序规则上

不过这种方法相对复杂一点,维护起来不如自定义字段方便,所以更推荐方法一。

用了上面的方法后,你的任务ID就能按照层级逻辑正确排序啦,完全符合你想要的预期效果!

内容的提问来源于stack exchange,提问作者DChhapgar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:35:13