PXFormula未更新

时间:2018-02-27 15:13:33

标签: acumatica

我为BAccount DAC创建了一个新的自定义绑定字段UsrMatchCode。我的目标是创建一个字段,我可以从Web服务调用中查询以识别潜在的"重复的客户记录。我的计划是将以下内容连接成一个9个字符的计算字段:

  • Address.PostalCode的前5个字符
  • Address.AddressLine1的前2个字符
  • Contact.FullName的前2个字符

但是在我能够做到这一点之前,在更新/保存现有记录时,我很难获得PXFormula的值。奇怪的是,它确实输出了新记录的值。 见截图。

enter image description here

我已将PXFormula简化为仅使用常量来排除导致问题的其他字段。

public class BAccountExt : PXCacheExtension<PX.Objects.CR.BAccount>
{
    private class index1 : Constant<int>
    {
        public index1() : base(0) { }
    }
    private class length5 : Constant<int>
    {
        public length5() : base(5) { }
    }
    private class testString : Constant<string>
    {
        public testString() : base("123456789") { }
    }

    #region UsrMatchCode
    public abstract class usrMatchCode : IBqlField { }
    [PXDBString(9)]
    [PXUIField(DisplayName = "Match Code", Enabled = false)]
    [PXFormula(typeof(Substring<testString, index1, length5>))]
    public virtual string UsrMatchCode { get; set; }
    #endregion
}

我觉得我错过了一些明显的东西,但我无法解决这个问题。

1 个答案:

答案 0 :(得分:1)

我避免同时使用PXFormula和PXDBxxx类型。

PXDBxxx属性告诉框架您希望将字段值保存到DB并从DB重新加载它的值,而PXFormula告诉框架需要从公式计算字符串值。这两种方法似乎不兼容,因为在将记录持久保存到DB后,该值是否来自DB或来自公式是不明确的。其他属性如PXDefault更适合PXDBxxx类型,因为它只能在初始化时运行。

我建议将PXFormula与未绑定的PXString类型一起使用,或者使用PXDefault而不是PXFormula来初始化PXDBString。