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

Acumatica:仅修改DAC2时如何让Save按钮持久化数据?

问题解决方法

原因分析

当前使用的PXSave<DAC1>按钮默认以DAC1作为主数据对象,仅修改DAC2时,系统不会自动触发DAC2缓存的持久化;而修改DAC1时,主缓存的持久化操作会连带处理所有已标记为Dirty的缓存,因此DAC2的修改也会被保存。

解决方案

可以通过以下几种方式实现仅修改DAC2时点击Save即可持久化:

方式一:调整Save按钮定义

将原有的PXSave<DAC1>改为不带泛型参数的PXSave,这样Save按钮会处理Graph中所有已修改的缓存:

public PXCancel<DAC1> Cancel;
public PXSave Save; // 移除泛型参数<DAC1>

public PXSelect<DAC1> View;
public PXSelect<DAC2> Entities;
public PXSelect<DAC3> Mappings;

方式二:重写Graph的Persist方法

如果需要精确控制持久化顺序或逻辑,可重写Persist方法显式处理DAC2的缓存:

public override void Persist()
{
    // 先持久化DAC2的修改
    Entities.Cache.Persist(PXDBOperation.Save);
    // 若DAC3也需要同步处理,可添加该行
    Mappings.Cache.Persist(PXDBOperation.Save);
    // 最后处理DAC1的持久化
    base.Persist();
}

方式三:建立DAC关联(子表场景适用)

如果DAC2是DAC1的子表,可在DAC2的关联字段上添加PXParent属性,让PXSave<DAC1>自动级联保存DAC2的修改:

public class DAC2 : IBqlTable
{
    [PXDBInt]
    [PXParent(typeof(Select<DAC1, Where<DAC1.ID, Equal<Current<DAC2.DAC1ID>>>>))]
    public virtual int? DAC1ID { get; set; }
    // 其他字段定义...
}

内容的提问来源于stack exchange,提问作者Kyle Vanderstoep

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:25:36