升级后供应商界面自定义按钮创建Location记录报错求助
供应商屏幕自定义按钮插入Location记录报错排查方案
问题描述
- 系统升级后,供应商屏幕(Supplier Screen)上绑定「Create Locations」和「Update Banking Details」操作的自定义按钮失效
- 执行时抛出错误:
Inserting 'Location' record raised at least one error. Please review the errors. - 尝试移除
VPaymentInfoLocationID参数赋值后,问题仍未解决
排查步骤
定位具体错误原因
系统抛出的是通用提示,需结合Trace日志拆解细节:- 查找Trace日志中
Location插入操作对应的字段校验失败信息,比如必填字段缺失、字段格式不符、关联记录不存在等 - 重点关注升级后新增的必填字段或字段规则变更(Acumatica版本迭代常调整表字段约束)
- 查找Trace日志中
校验Location创建逻辑
检查VendorMaint_Extension扩展代码中的赋值逻辑:- 确认
LocationCD、Descr、VendorID等核心必填字段已正确赋值 - 验证字段值是否符合当前版本的格式要求(如长度限制、枚举值匹配)
- 排查关联字段(如
CountryID、State)是否指向有效系统记录,避免外键约束报错
- 确认
验证基础创建流程
- 手动在Location屏幕为目标供应商创建记录,确认是否能正常保存,排除系统基础配置问题
- 对比手动创建时的字段值,检查代码中是否有字段遗漏或赋值差异
梳理VPaymentInfo关联顺序
即使移除VPaymentInfoLocationID赋值,仍需检查关联逻辑:- 确认代码中是否存在先创建银行信息、再创建Location的顺序错误,导致关联失败
- 调整执行顺序,确保Location记录先完成插入并保存,再关联到
VPaymentInfo
常见修复示例
若Trace日志显示LocationCD字段未赋值,修改代码如下:
// 创建Location记录并赋值必填字段 Location newLoc = new Location(); newLoc.VendorID = Base.BAccount.Current.BAccountID; newLoc.LocationCD = "DEFAULT-" + Base.BAccount.Current.BAccountID.ToString(); // 生成唯一编码 newLoc.Descr = "Default Location"; newLoc.CountryID = "US"; Base.Location_Cache.Insert(newLoc); Base.Location_Cache.Save(); // 关联到VPaymentInfo记录 VPaymentInfo paymentInfo = ...; paymentInfo.LocationID = newLoc.LocationID; Base.VPaymentInfo_Cache.Update(paymentInfo);
注意事项
- 系统升级后需重新验证自定义代码对新版本字段约束的兼容性
- 操作Acumatica缓存时,需先执行
Insert再调用Save,避免未持久化记录被关联 - 多公司环境下,需确认
BranchID等字段是否正确赋值
内容的提问来源于stack exchange,提问作者Tharidhi P
相关产品推荐
相关产品推荐

