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

Acumatica中Graph.Caches属性操作其他DAC的正确使用方法咨询

在Acumatica中使用graph.Caches[typeof(MyDac)]操作其他DAC值的正确方式

我经常在Acumatica开发工作里用到graph.Caches[typeof(MyDac)]来处理非当前Graph主视图的DAC,这里给你梳理下正确的使用姿势,以及你关心的几个核心问题解答:

操作其他DAC的标准流程

不管目标DAC是否被添加到当前Graph的任何视图中,你都可以通过Caches集合来安全地操作它的记录,步骤如下:

  1. 获取目标DAC的缓存实例:
    var dacCache = graph.Caches[typeof(MyDac)];
    
  2. 获取或创建DAC记录:
    • 加载已有记录(通过主键值定位):
      var existingRecord = dacCache.SelectSingle<MyDac>(primaryKey1, primaryKey2);
      
    • 创建新的记录实例:
      var newRecord = (MyDac)dacCache.CreateInstance();
      // 给新记录的必填字段赋值
      newRecord.PKField = someValue;
      newRecord.OtherField = "Initial Value";
      
  3. 修改记录并标记状态:
    • 更新已有记录:修改字段后调用Update标记缓存变更
      existingRecord.TargetField = "Updated Value";
      dacCache.Update(existingRecord);
      
    • 新增记录:调用Insert将新记录加入缓存
      dacCache.Insert(newRecord);
      
    • 删除记录:调用Delete标记记录为待删除
      dacCache.Delete(existingRecord);
      

是否需要立即持久化?

不需要手动调用Persist()这类立即持久化的方法,除非你的业务逻辑需要在当前操作流程中途就把变更写入数据库(比如后续步骤依赖这个已持久化的数据)。

正常情况下,当你调用graph.Action.PressSave()时,Acumatica会自动遍历当前Graph所有Caches集合里的变更——不管对应的DAC是否在Graph的视图中——把所有标记为新增、更新、删除的记录批量持久化到数据库。

关于DAC未在Graph视图中的疑问

即使目标DAC没有被添加到当前Graph的任何PXSelect视图中,只要你通过graph.Caches[typeof(MyDac)]操作了它的记录并正确标记了变更状态,PressSave()时依然会将这些变更保存到数据库。

这里有个小细节需要注意:如果该DAC有自定义的业务逻辑事件(比如RowPersisting、RowUpdated),只有当前Graph订阅了这些事件时才会触发;如果当前Graph没有订阅,原DAC所属Graph的事件不会自动触发,这点在复杂业务场景下要格外留意。

简单示例代码

// 在某个自定义Graph中更新另一个独立DAC的记录
public void UpdateRelatedRecord(int targetPK)
{
    var orderCache = Base.Caches[typeof(SalesOrder)];
    var targetOrder = orderCache.SelectSingle<SalesOrder>(targetPK);
    
    if (targetOrder != null)
    {
        targetOrder.OrderStatus = OrderStatus.Completed;
        orderCache.Update(targetOrder);
        // 无需手动Persist,等待PressSave统一提交
    }
}

内容的提问来源于stack exchange,提问作者Stan A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:54:17