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

Acumatica从2020R2升级到2022R2后UpdateServiceOrderHeader调用报错

Acumatica 2020R2升级至2022R2后UpdateServiceOrderHeader调用报错解决方案

问题背景

将Acumatica从2020R2升级到2022R2后,原CRExtensionHelper.UpdateServiceOrderHeader()方法已被移除,该功能迁移至SM_CRCaseMaint和SM_SOOrderEntry类中。修改代码调用SM_CRCaseMaint.UpdateServiceOrderHeader()后,出现参数不匹配、上下文引用错误的新报错。

报错原因

2022R2版本中SM_CRCaseMaint.UpdateServiceOrderHeader()的方法签名与原CRExtensionHelper版本存在差异,主要是参数顺序、上下文实例引用的变化,导致现有调用的参数无法匹配方法要求。

解决步骤

1. 修正方法调用的参数引用

原调用中使用Base.Case.Cache作为上下文缓存,但当前方法已传入CRCaseMaint实例graphCRCaseMaint,需替换为该实例的缓存以保证上下文一致性;同时调整参数顺序匹配2022R2的方法定义。

2. 调整后的代码示例

将原错误调用替换为以下代码:

// 替换Base.Case.Cache为传入的graphCRCaseMaint实例缓存,调整参数顺序匹配方法签名
SM_CRCaseMaint.UpdateServiceOrderHeader(
    graphCRCaseMaint,
    graphServiceOrderEntry,
    crCaseRow,
    fsCreateServiceOrderOnCaseFilterRow,
    graphServiceOrderEntry.ServiceOrderRecords.Current,
    true);

3. 额外检查项

  • 确保代码已引入正确命名空间:using PX.Objects.SM;
  • 验证FSCreateServiceOrderOnCaseFilter类型是否与SM_CRCaseMaint.UpdateServiceOrderHeader()要求的参数类型一致,若类型不匹配,需从FSxCRCase实例中提取对应字段传入
  • 确认CRExtensionHelper.InitNewServiceOrder()方法在2022R2中仍可用,若已被迁移,需同步替换为对应类的方法

完整修改后的核心代码片段

private void CreateServiceOrderDocument(CRCaseMaint graphCRCaseMaint, CRCase crCaseRow, FSCreateServiceOrderOnCaseFilter fsCreateServiceOrderOnCaseFilterRow)
{
    if (graphCRCaseMaint == null || crCaseRow == null || fsCreateServiceOrderOnCaseFilterRow == null)
    {
        return;
    }

    ServiceOrderEntry graphServiceOrderEntry = PXGraph.CreateInstance<ServiceOrderEntry>();

    FSServiceOrder newServiceOrderRow = CRExtensionHelper.InitNewServiceOrder(CreateServiceOrderFilter.Current.SrvOrdType, ID.SourceType_ServiceOrder.CASE);

    graphServiceOrderEntry.ServiceOrderRecords.Current = graphServiceOrderEntry.ServiceOrderRecords.Insert(newServiceOrderRow);

    // 修正后的方法调用
    SM_CRCaseMaint.UpdateServiceOrderHeader(
        graphCRCaseMaint,
        graphServiceOrderEntry,
        crCaseRow,
        fsCreateServiceOrderOnCaseFilterRow,
        graphServiceOrderEntry.ServiceOrderRecords.Current,
        true);

    graphServiceOrderEntry.ServiceOrderRecords.Current.SourceRefNbr = crCaseRow.CaseCD;

    if (!Base.IsContractBasedAPI)
    {
        throw new PXRedirectRequiredException(graphServiceOrderEntry, null);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:55:25