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

