自动验证机会主记录保存时不同选项卡上的字段

Auto validate fields on different tab on Save of main record on Opportunity

我想在机会(屏幕 ID - CR304000)的联系人信息选项卡上强制设置几个字段,以便用户必须在保存主要机会记录之前输入它。我看到主要是来自CRContact和CRAddress。我已经为两者创建了一个 DAC 扩展,并在其中包含了所有要验证的字段。下面是相同的代码。

public class CROpportunityExtension : PXCacheExtension<PX.Objects.CR.CROpportunity>
{
    [PXDBGuid(false)]
    [PX.Objects.CR.MassProcess.PXMassUpdatableField]
    [PXOwnerSelector(typeof(PX.Objects.CR.CROpportunity.workgroupID))]
    [PXUIField(DisplayName = "Owner", Required = true)]
    [PXDefault(PersistingCheck = PXPersistingCheck.NullOrBlank)]
    public virtual Guid? OwnerID { get; set; }

    [CROpportunityAddress(typeof(Select<Address, Where<True, Equal<False>>>))]
    [PXDBInt]
    [PXDefault(PersistingCheck = PXPersistingCheck.NullOrBlank)]
    public virtual int? OpportunityAddressID { get; set; }

    [CROpportunityContact(typeof(Select<Contact, Where<True, Equal<False>>>))]
    [PXDBInt]
    [PXDefault(PersistingCheck = PXPersistingCheck.NullOrBlank)]
    public virtual int? OpportunityContactID { get; set; }
}

public class CRContactExtension : PXCacheExtension<PX.Objects.CR.CRContact>
{
    [PXDBString(50, IsUnicode = true)]
    [PXUIField(DisplayName = "First Name", Required = true)]
    [PXDefault(PersistingCheck = PXPersistingCheck.NullOrBlank)]
    public virtual string FirstName { get; set; }

    [PXDBString(100, IsUnicode = true)]
    [PXUIField(DisplayName = "Last Name", Required = true)]
    [PXDefault(PersistingCheck = PXPersistingCheck.NullOrBlank)]
    public virtual string LastName { get; set; }

    [PXDBEmail]
    [PXUIField(DisplayName = "Email", Visibility = PXUIVisibility.SelectorVisible, Required = true)]
    [PXDefault(PersistingCheck = PXPersistingCheck.NullOrBlank)]
    public virtual string Email { get; set; }

    [PhoneValidation]
    [PXDBString(50)]
    [PXUIField(DisplayName = "Phone 1", Visibility = PXUIVisibility.SelectorVisible, Required = true)]
    [PXDefault(PersistingCheck = PXPersistingCheck.NullOrBlank)]
    public virtual string Phone1 { get; set; }
}

public class CRAddressExtension : PXCacheExtension<PX.Objects.CR.CRAddress>
{
    [PXDBString(50, IsUnicode = true)]
    [PXUIField(DisplayName = "City", Visibility = PXUIVisibility.SelectorVisible, Required = true)]
    [PXDefault(PersistingCheck = PXPersistingCheck.NullOrBlank)]
    public virtual string City { get; set; }

    [PXDBString(20)]
    [PXUIField(DisplayName = "Postal Code", Required = true)]
    [PXZipValidation(typeof(Country.zipCodeRegexp), typeof(Country.zipCodeMask), typeof(PX.Objects.CR.CRAddress.countryID))]
    [PXDefault(PersistingCheck = PXPersistingCheck.NullOrBlank)]
    public virtual string PostalCode { get; set; }
}

但是,它不直接在主记录保存上验证。相反,如果我尝试在“联系人信息”选项卡中保存任何值,那么它将在主记录保存时进行验证。以下是步骤。

  1. 它不验证什么时候 一种。创造新机会 b.填写上半部分和详细信息选项卡上的所有必填字段 C。保存机会记录。
  2. 它在什么时候验证 一种。创造新机会 b.在上部和详细信息选项卡上填写所有必填字段 C。在联系人信息选项卡上填写必填字段以外的字段 d.尝试保存机会记录。它将验证联系人信息选项卡上的必填字段。

我需要它应该在第一种情况下验证。请提出建议。

它无法验证现有记录,但如果未输入已创建和必填的字段,它仍会验证新记录。理想的解决方案是创建一个 GI 并更新现有记录的所有必填字段,这样就不会产生任何问题。对于新记录,它无论如何都会正确验证。