Acumatica销售订单行项目添加备注功能定制问题
Acumatica销售订单行导入时添加备注失败的解决方法
原代码中使用PXNoteAttribute.SetNote未生效的核心问题是参数使用错误,以及缺少缓存更新操作。以下是修正后的实现方案:
问题根源
PXNoteAttribute.SetNote的第一个参数必须是对应本地销售订单行(SalesOrderDetail/SOLine)的PXCache,而非sender或其他无关缓存- 第二个参数需要传入Acumatica本地的
SalesOrderDetail实体对象,不能用外部电商平台的OrdersProductData - 设置备注后未触发缓存更新,导致备注未被持久化
修正后的代码
public virtual void SaveBucketImport(BCSalesOrderBucket bucket, IMappedEntity existing, String operation, SaveBucketImportDelegate baseMethod) { MappedOrder order = bucket.Order; // 获取销售订单行对应的PXCache PXCache<SOLine> soLineCache = PXCache<SOLine>.GetCache(sender.Graph); for (int i = 0; i < (order.Extern.OrderProducts?.Count ?? 0); i++) { OrdersProductData data = order.Extern.OrderProducts[i]; // 按索引匹配行项目(若有外部ID可改用更可靠的匹配逻辑) SalesOrderDetail detail = order.Local.Details.Where(x => !x.Delete.HasValue || !x.Delete.Value).Skip(i).Take(1).FirstOrDefault(); if (detail != null) { // 替换为实际的电商产品属性字段,比如data.ProductAttributes或对应的DisplayName string noteContent = data.YourProductAttributeField; // 给本地行项目设置备注 PXNoteAttribute.SetNote(soLineCache, detail, noteContent); // 更新缓存,确保备注被保存 soLineCache.Update(detail); } } // 执行基础导入逻辑 baseMethod(bucket, existing, operation); }
额外注意事项
- 确保
SalesOrderDetail(即SOLine DAC)已启用备注功能:检查DAC中是否有标记[PXNote]的NoteID字段,默认Acumatica的SOLine已包含该字段 - 若行项目匹配不准确(比如导入时存在删除行),建议改用外部订单产品ID匹配本地行项目的对应字段(如
detail.ExternalRefID),避免索引匹配的误差 - 调试时可确认
detail对象非空、noteContent有有效值,且soLineCache.Update被执行
内容的提问来源于stack exchange,提问作者drake.loop
相关产品推荐
相关产品推荐

