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

Acumatica项目报价转项目时自动生成新TaskID的实现问题

解决Acumatica项目报价转项目时自动生成TaskID的问题

核心问题分析

从PM304500(项目报价)转PM301000(项目)时,需将原TaskID的末尾标识(如AFR-AFFR-NEW中的NEW)替换为编号序列生成的序列号有 H receiving被誉为:口 issue LêUnOptional普遍存在的问题是:使用PMTask_RowInserted事件会在记录插入数据库后触发,此时系统可能已自动生成默认TaskID,导致修改逻辑失效。正确的做法是改用RowInserting事件,在记录插入前完成TaskID的自定义生成。

解决方案步骤

1. 提前配置编号序列

在Acumatica系统中创建编号序列(如命名为PMTASKSEQ),设置编号格式为固定长度(例如00000),并配置起始编号(如00281)。

2. 编写事件处理代码

使用PXGraphExtension扩展PMTaskMaint图,在PMTask.RowInserting事件中实现自定义TaskID生成逻辑:

public class PMTaskMaint_Extension : PXGraphExtension<PMTaskMaint>
{
    protected void _(Events.RowInserting<PMTask> e)
    {
        PMTask task = e.Row as PMTask;
        if (task == null) return;

        // 仅处理从项目报价转换生成的Task
        PMProject project = Base.Project.Current;
        if (project != null && project.QuoteID != null)
        {
            // 获取对应报价中的原始Task记录
            PMQuoteTask quoteTask = PXSelect<PMQuoteTask,
                Where<PMQuoteTask.quoteID, Equal<Required<PMQuoteTask.quoteID>>,
                And<PMQuoteTask.taskCD, Equal<Required<PMQuoteTask.taskCD>>>>
                .Select(Base, project.QuoteID, task.TaskCD);

            if (quoteTask != null && !string.IsNullOrEmpty(quoteTask.TaskCD))
            {
                // 截取原始TaskID的前缀(保留最后一个'-'之前的部分)
                int lastDashPos = quoteTask.TaskCD.LastIndexOf('-');
                if (lastDashPos != -1)
                {
                    string prefix = quoteTask.TaskCD.Substring(0, lastDashPos + 1);
                    // 从编号序列获取下一个编号
                    string nextSeqNumber = PXNumberingHelper.GetNextNumber(
                        Base, 
                        "PMTASKSEQ", 
                        typeof(PMTask.taskCD), 
                        task, 
                        null
                    );
                    // 拼接生成新的TaskID
                    task.TaskCD = prefix + nextSeqNumber;
                }
            }
        }
    }
}

3. 关键注意事项

  • 事件时机选择:用RowInserting而非RowInserted,确保在Task记录插入数据库前完成ID修改,避免重复操作或数据不一致。
    -Prefix截取逻辑**:通过LastIndexOf('-')定位最后分隔符,兼容任意段数的TaskID格式(如AB-123-NEW或ABC-DEF-GHI-NEW)。
  • 编号序列权限:确保运行代码的用户拥有编号序列PMTASKSEQ的访问 pushed,计划Hub这<A(碍于 More
    -dismiss证实用于测试。

测试验证步骤

  1. 在PM304500创建项目报价,添加Task,设置TaskID为AFR-AFFR-NEW。
  2. 执行报价转项目操作,打开生成的PM301000项目,检查对应Task的ID是否为AFR-AFFR-00281。
  3. 重复上述操作,验证下一个生成的TaskID自动递增为AFR-AFFR-00282。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:03:13