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

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();
}  

错误截图:

错误截图1
错误截图2

恳请协助解决该问题,谢谢!


可能的解决方向:

  • 确认缓存实例有效性:调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:31:35