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

如何在Acumatica AM207500页面配置PXFormulaCombo并保留OnRootFieldsNeeded属性?

解决Acumatica AM207500配置维护界面公式字段缺失字段选择的问题

核心原因

手动在ASPX添加OnRootFieldsNeeded属性后被自动清除,是因为Acumatica会根据DAC(数据访问类)和Graph(业务逻辑类)的元数据自动同步ASPX控件属性,直接修改ASPX的属性会被系统覆盖。

正确实现步骤

1. 在自定义DAC字段中绑定公式编辑器事件

如果你的自定义字段是在DAC中定义的,给字段添加PXFormulaEditorAttribute并指定事件处理方法:

[PXFormulaEditor(RootFieldsNeeded = nameof(MyCustomRootFieldsNeeded))]
[PXDecimal(6)]
[PXUIField(DisplayName = "自定义公式字段")]
public virtual decimal? UsrCustomFormulaField { get; set; }
public abstract class usrCustomFormulaField : PX.Data.BQL.BqlDecimal.Field<usrCustomFormulaField> { }

// 实现字段选择列表的事件方法
protected virtual IEnumerable MyCustomRootFieldsNeeded(PXCache cache, object item)
{
    // 返回可供选择的字段,参考QtyRequired的逻辑
    yield return new PXFormulaField(nameof(AMConfigurationItem.QtyRequired), "需求数量");
    yield return new PXFormulaField(nameof(AMConfigurationItem.InventoryID), "物料ID");
    // 添加其他需要展示的字段
}

2. 针对DAC扩展字段的Graph事件注册

如果是通过DAC扩展添加的字段,在对应的Graph扩展类中注册事件:

public class AMConfigurationMaint_Extension : PXGraphExtension<AMConfigurationMaint>
{
    public override void Initialize()
    {
        base.Initialize();
        // 绑定自定义字段的RootFieldsNeeded事件
        Base.ConfigurationItem.Cache.GetAttributes<AMConfigurationItemExt.usrCustomFormulaField>(null)
            .OfType<PXFormulaEditorAttribute>()
            .FirstOrDefault()?.SetRootFieldsNeededHandler(Base.ConfigurationItem.Cache, nameof(MyCustomRootFieldsNeeded));
    }

    protected virtual IEnumerable MyCustomRootFieldsNeeded(PXCache cache, object item)
    {
        // 返回字段列表,示例同上
        yield return new PXFormulaField(nameof(AMConfigurationItem.QtyRequired), "需求数量");
        yield return new PXFormulaField(nameof(AMConfigurationItem.InventoryID), "物料ID");
    }
}

3. 通过自定义项目修改ASPX(确保属性不被覆盖)

完成后端事件绑定后,在Acumatica自定义项目中打开AM207500的ASPX,找到自定义字段控件并添加属性:

<px:PXFormulaEditor ID="edUsrCustomFormulaField" runat="server" DataField="UsrCustomFormulaField" OnRootFieldsNeeded="MyCustomRootFieldsNeeded" />

此时后端已注册对应事件,Acumatica会保留该属性,不会自动清除。

关键注意事项

  • 必须通过Acumatica自定义项目修改ASPX,不能直接修改服务器原始文件,否则会被系统覆盖。
  • RootFieldsNeeded方法需返回PXFormulaField对象集合,每个对象对应一个可选字段,包含字段名和显示名称。
  • 参考标准字段QtyRequired的实现逻辑,确保返回的字段在当前界面数据源中可用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:31:11