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

Acumatica PXSelector设ValidateValue=false仍无法输入非选项值如何解决?

问题:Acumatica PXSelector设置ValidateValue=false不生效

我需要提出这个问题,因为此前查到的解决方案(设置ValidateValue = false)在我的场景中没有生效。
我的Selector定义如下:

public abstract class sourceAccount : PX.Data.BQL.BqlString.Field<sourceAccount> { }
[PXDBInt]
[PXUIField(DisplayName = "Source Account")]
[PXSelector(typeof(Search<Account.accountID,Where<Account.active, Equal<True>>>),
    typeof(Account.accountCD),
    typeof(Account.description),
    SubstituteKey = typeof(Account.accountCD),
    DescriptionField = typeof(Account.description),
    ValidateValue = false)]
public virtual Int32? SourceAccount { get; set; }

上述代码编译部署后,输入不在选择器选项范围内的值时依然出现报错。
请问是什么原因导致该配置不生效?


原因及解决方案

该问题由3个常见配置错误导致,按优先级排查如下:

  • 字段抽象类类型不匹配:你的SourceAccount属性是Int32?类型,但对应的抽象类sourceAccount继承自BqlString.Field,类型不匹配会导致字段特性的逻辑执行异常,校验规则无法按预期生效。需要先将抽象类的基类修改为BqlInt.Field。
  • 缺失文本校验关闭配置:当PXSelector设置了SubstituteKey属性时,控件会单独校验输入的显示值(即你配置的Account.accountCD)是否存在,ValidateValue=false仅关闭存储值(accountID)的校验,还需要追加ValidateText=false关闭显示值的校验。
  • 页面控件配置覆盖:若对应页面的aspx文件中,该选择器控件手动设置了Validate="True",页面配置的优先级高于字段特性的配置,会导致你的设置不生效,需要检查页面配置删除该属性或设置为False。

修正后的代码示例:

// 修正抽象类类型为BqlInt
public abstract class sourceAccount : PX.Data.BQL.BqlInt.Field<sourceAccount> { }
[PXDBInt]
[PXUIField(DisplayName = "Source Account")]
[PXSelector(typeof(Search<Account.accountID,Where<Account.active, Equal<True>>>),
    typeof(Account.accountCD),
    typeof(Account.description),
    SubstituteKey = typeof(Account.accountCD),
    DescriptionField = typeof(Account.description),
    ValidateValue = false,
    ValidateText = false)] // 追加关闭文本校验的配置
public virtual Int32? SourceAccount { get; set; }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:15:04