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
相关产品推荐
相关产品推荐

