SO301000界面调用自定义代码打开弹窗时出现Update selected failed错误
求助:Acumatica SO301000界面更新失败问题
我在SO301000界面中使用以下代码打开另一个界面,当选择其中一个选项时,出现了“Update selected failed”错误。
代码实现:
public virtual IEnumerable EcrListemodele(PXAdapter adapter) { var cmdencours = TransactionsOrder.Current; if (cmdencours==null) return adapter.Get(); ZMODELEFILTER.Current.Immatriculation=cmdencours.GetExtension<SOOrderExt>().UsrImmatriculation; ZMODELEFILTER.AskExt(); foreach (ZMODELE un_modele in SOZmodele.Select()) { if (un_modele.Selected == true) { cmdencours.GetExtension<SOOrderExt>().Usrlistmodele=un_modele.Modele; cmdencours.GetExtension<SOOrderExt>().Usrlistpiece=un_modele.Piece; TransactionsOrder.Update(cmdencours); } } //} return adapter.Get(); }
错误截图:


恳请协助解决该问题,谢谢!
可能的解决方向:
- 确认缓存实例有效性:调用
Update前,重新从视图获取当前记录,避免使用已过期的实例:var currentOrder = TransactionsOrder.Current; if (currentOrder == null) return adapter.Get(); // 后续逻辑使用currentOrder而非cmdencours - 优化多选处理逻辑:如果允许多选,当前代码会多次覆盖字段值,且多次Update易引发缓存冲突,建议先获取选中项,统一赋值后仅执行一次Update:
var selectedModel = SOZmodele.Select().FirstOrDefault(m => m.Selected == true); if (selectedModel != null) { var ext = currentOrder.GetExtension<SOOrderExt>(); ext.Usrlistmodele = selectedModel.Modele; ext.Usrlistpiece = selectedModel.Piece; TransactionsOrder.Update(currentOrder); } - 检查字段与记录状态:确认
Usrlistmodele、Usrlistpiece字段具备编辑权限,同时检查SOOrder主记录是否存在未填充的必填项,导致更新无法提交。 - 添加异常排查代码:加入异常捕获,输出详细错误信息定位问题:
try { // 更新逻辑代码块 } catch (Exception ex) { PXTrace.WriteError($"更新失败详情:{ex.Message}\n{ex.StackTrace}"); throw new PXException("更新失败,请查看系统日志获取详细信息"); } - 使用视图扩展更新字段:避免直接修改实例,通过视图Current对象的扩展字段赋值,确保缓存同步:
var orderExt = TransactionsOrder.Current.GetExtension<SOOrderExt>(); orderExt.Usrlistmodele = selectedModel.Modele; orderExt.Usrlistpiece = selectedModel.Piece; TransactionsOrder.Update(TransactionsOrder.Current);
内容的提问来源于stack exchange,提问作者Xavier LARTEM
相关产品推荐
相关产品推荐

