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

获取新插入INTran行的LineNbr值的技术疑问

解决Acumatica中INTran新行LineNbr获取为空的问题

我之前在Acumatica开发时也遇到过类似的INTran LineNbr获取问题,结合我的经验给你几个可行的解决方向:

  • 不要依赖原缓存对象,重新获取最新行
    Acumatica的缓存在保存后,不会自动更新原有对象的系统生成字段(比如LineNbr)——你手里的那个INTran对象是插入前的实例,自然没有LineNbr值。保存完成后,你需要从graph的缓存或数据库重新查询最新的行数据:

    // 执行保存操作
    graph.Actions.PressSave();
    
    // 方式1:从当前graph的缓存中获取最新行
    INTran latestTran = graph.INTran.SelectSingle();
    
    // 方式2:通过单据类型和单号精准查询(更可靠)
    INTran latestTran = PXSelect<INTran, 
        Where<INTran.tranType, Equal<Required<INTran.tranType>>, 
            And<INTran.refNbr, Equal<Required<INTran.refNbr>>>>>
        .Select(graph, yourTranType, yourRefNbr);
    
  • 确保事务已提交
    如果你是在自定义事务块中操作,一定要确认事务已经提交到数据库,否则PXSelect可能查不到最新数据:

    using (var transactionScope = new PXTransactionScope())
    {
        // 插入新INTran行的逻辑
        graph.Actions.PressSave();
        // 提交事务,让数据写入数据库
        transactionScope.Complete();
    }
    
  • 手动刷新缓存中的当前行
    如果不想重新查询,也可以尝试手动刷新缓存里的当前行,强制同步数据库中的最新值:

    graph.Actions.PressSave();
    // 重新加载当前行的缓存数据
    graph.INTran.Cache.Reload(graph.INTran.Current);
    // 此时graph.INTran.Current.LineNbr应该有值了
    

核心原因在于:你最初创建的INTran对象是插入前的状态,LineNbr是数据库/系统在保存时生成的,原有对象不会自动更新这个值。必须通过重新查询或刷新缓存,才能拿到带LineNbr的最新实例。

内容的提问来源于stack exchange,提问作者EricP.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:20:01