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

求助:修改自定义Acumatica屏幕表头关键字段后保存按钮未启用

解决Acumatica自定义屏幕表头关键字段修改后保存按钮不启用的问题

哥们,这个问题我太有共鸣了!之前自定义Acumatica屏幕时,也碰到过修改关键字段后保存按钮死活不亮的情况,折腾了好一阵才搞明白核心原因:Acumatica默认不会把关键字段(带IsKey=true的字段)的修改自动标记为脏数据,毕竟主键通常是不允许修改的,但如果业务需求必须改,就得手动配置几个关键属性。

下面是你需要给这些字段设置的属性和额外配置:

1. 给关键字段添加PXDirty属性

这个属性是核心,它会在字段值发生变化时,强制把当前数据记录标记为“脏”(Dirty),这样框架就会识别到数据已修改,自动启用保存按钮。

如果是在DAC中直接声明字段:

public class MyHeaderDAC : IBqlTable
{
    #region KeyField1
    [PXDBString(20, IsKey = true)]
    [PXUIField(DisplayName = "关键字段1", Enabled = true)]
    [PXDirty] // 关键属性:标记字段修改时触发脏标记
    public virtual string KeyField1 { get; set; }
    public abstract class keyField1 : PX.Data.BQL.BqlString.Field<keyField1> { }
    #endregion

    #region KeyField2
    [PXDBInt(IsKey = true)]
    [PXUIField(DisplayName = "关键字段2", Enabled = true)]
    [PXDirty]
    public virtual int? KeyField2 { get; set; }
    public abstract class keyField2 : PX.Data.BQL.BqlInt.Field<keyField2> { }
    #endregion
}

如果是通过缓存附加的方式(比如在Graph类中扩展现有DAC):

public class MyCustomGraph : PXGraph<MyCustomGraph>
{
    [PXDBString(20, IsKey = true)]
    [PXUIField(DisplayName = "关键字段1", Enabled = true)]
    [PXDirty]
    protected virtual void MyHeaderDAC_KeyField1_CacheAttached(PXCache cache) { }
}

2. 确保字段允许编辑(PXUIField.Enabled = true)

别小看这个,要是字段被设为只读(Enabled=false),用户根本改不了值,自然不会触发脏标记。一定要在PXUIField属性里明确设置Enabled = true,让字段处于可编辑状态。

3. 配置ASPX控件的CommitChanges="True"

在屏幕的ASPX页面中,找到对应关键字段的输入控件(比如PXTextEdit、PXNumberEdit),添加CommitChanges="True"属性。这个设置会让用户修改字段值后,立即把变化提交到服务器,而不是等到失去焦点才提交,这样脏标记能及时被触发。

示例ASPX代码:

<px:PXFormView ID="formHeader" runat="server" DataSourceID="ds" DataMember="MyHeader">
    <Template>
        <px:PXLayoutRule runat="server" StartRow="True" />
        <px:PXTextEdit ID="edKeyField1" runat="server" DataField="KeyField1" CommitChanges="True" />
        <px:PXNumberEdit ID="edKeyField2" runat="server" DataField="KeyField2" CommitChanges="True" />
    </Template>
</px:PXFormView>

4. 检查Graph中的事件处理,避免清除脏标记

如果你的Graph中对这些关键字段写了FieldUpdated或其他事件,要确保没有在事件中调用cache.SetStatus(row, PXEntryStatus.Notchanged)这类代码,这会把记录的状态改回“未修改”,导致保存按钮依然不启用。

比如,下面这种代码要避免:

protected virtual void MyHeaderDAC_KeyField1_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e)
{
    var row = (MyHeaderDAC)e.Row;
    // 错误示例:不要手动把状态设为Notchanged
    cache.SetStatus(row, PXEntryStatus.Notchanged);
}

按照上面的步骤配置后,修改表头关键字段时,保存按钮应该就能自动启用了,亲测有效!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:27:07