【问题标题】:How can I enter a value in a Selector that doesn't exist in the selection values如何在选择器中输入选择值中不存在的值
【发布时间】:2021-09-20 22:58:39
【问题描述】:

我不得不问这个问题,因为这种情况下的解决方案(使用 ValidateValue = false)对我不起作用:

Acumatica PXselector, how to type new value into selector control

这是我的选择器

    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; }

编译和部署后,我仍然得到这个:

知道为什么这对我不起作用吗?

错误的痕迹:

【问题讨论】:

  • 查看 Trace 信息时看到了什么?
  • 我将跟踪添加到主要问题中。真的什么都没告诉我。

标签: acumatica


【解决方案1】:

首先简化选择器逻辑: [PXSelector(typeof(Search), ValidateValue = false)]

然后查找对 sourceAccount / SourceAccount 的所有引用以检查其他验证。

并确保输入的值在 DAC 和 DB 端匹配。 当 DAC 字段为整数时,您正在输入字符串值,这将不起作用。

【讨论】:

  • 当底层 DAC 字段是整数时,替代键负责输入字符串。还是我错过了什么?
  • 经过反复试验,我发现如果我将选择器和 DAC 切换到字符串字段并仅使用 Account.accountCD 和 Account.description,ValidateValue 选项会按预期工作。我假设如果我使用 SubstituteKey 的 Acumatica 魔法(即使基础字段是整数,它也允许 UI 字段中的字符串值),ValidateValue 选项不起作用。对吗?
  • 如果您将该字段设为 PXDBString 值,则替换键将不起作用。如果将 DAC 字段设置为 PXDBInt 字段,而数据库字段为 NVARCHAR 字段,则验证值将不起作用。您可能无法在这里两全其美。
  • 一种可能的解决方案是在“AccountCD”上添加一个 FieldUpdated 事件,并手动获取并设置“AccountID”字段值(如果存在)。另请记住,添加新的“AccountCD”而不匹配“AccountID”可能会导致一些损坏。这取决于系统的其他部分将如何使用 AccountID/AccountCD。
  • 当 UI 控件值为字符串且 DB 字段为整数时,替换键负责输入 Int 值。
猜你喜欢
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
  • 2021-11-27
  • 2011-06-30
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 2016-02-27
相关资源
最近更新 更多