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
相关产品推荐
相关产品推荐

