PXPersistingCheck.NullOrBlank устанавливается во время выполнения - PullRequest
0 голосов
/ 19 сентября 2019

Экран: AR303000 Версия / сборка 19.104.0024

Мне нужно задать для поля «Внимание, поле данных, свойства» значение PXPersistingCheck.NullOrBlank во время выполнения.

Логика: когда CustomerClassID = 2, Вниманиеполе должно быть изменено на обязательное.В противном случае в поле CustomerClassID <> 2 поле устанавливается как не обязательное.(это должно быть рассчитано во время выполнения и после загрузки)

Я пытался использовать:

 PXDefaultAttribute.SetPersistingCheck<Contact.attention>(cache, row, PXPersistingCheck.NullOrBlank); 
 PXUIFieldAttribute.SetRequired<Contact.attention>(cache, true);

Мой текущий код:

namespace PX.Objects.AR
{
  public class CustomerMaint_Extension : PXGraphExtension<CustomerMaint>
  {
 protected void Customer_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
    {      
      var row = (Customer)e.Row;
      CustomerClassID =row.CustomerClassID;
      if (row.CustomerClassID == "02")
      {
         //throw new PXException("Test if you hit this code at runtime");           
         PXDefaultAttribute.SetPersistingCheck<Contact.attention>(cache, row, PXPersistingCheck.NullOrBlank); 
      }
      else 
      {
        PXDefaultAttribute.SetPersistingCheck<Contact.attention>(cache, row, PXPersistingCheck.NullOrBlank); 
      }    
    }
}
}

///Я также попытался переопределить атрибут на уровне экрана:

namespace PX.Objects.AR
{
  public class CustomerMaint_Extension : PXGraphExtension<CustomerMaint>
  {
    [PXDBString(255, IsUnicode = true)]
    [PXUIField(DisplayName = "Attention")]
    [PXMassMergableField]
    [PXMassUpdatableField]
    [PXPersonalDataField]
    [PXDefault(false, PersistingCheck = PXPersistingCheck.Nothing)]
    [PXUIRequired(typeof(Where<Customer.customerClassID, Greater<decimal_1>>))]
    protected virtual void Contact_Attention_CacheAttached(PXCache cache)
    { }
}}

Это первый раз, когда мне приходится изменять свойства во время выполнения, поэтому я не знаю, чего не знаю.

1 Ответ

1 голос
/ 19 сентября 2019

Я бы использовал событие, связанное с кешем, чтобы прикрепить набор атрибутов по умолчанию / обязательно.Вы должны объединить атрибуты и следовать за селектором из контакта в учетную запись BA.Затем он сравнит его с созданной константой.Этот код работал в моей демонстрационной среде, все на графике CustomerMaint.

//create constant class to check the CustomerClassID that is a string
public const string AttentionRequiredCustomerClass = "2";
public class attentionRequiredCustomerClass : PX.Data.BQL.BqlString.Constant<attentionRequiredCustomerClass>
{
    public attentionRequiredCustomerClass() : base(AttentionRequiredCustomerClass) {; }
}

//////merge the attribute with the existing, setting the making Attention required when CustomerClassID = 2
[PXDefault(PersistingCheck = PXPersistingCheck.Nothing)]
[PXMergeAttributes(Method = MergeMethod.Merge)]
//selector follows the contact's baccount to get the customer class, and compares it to the bql constant created above.
[PXUIRequired(typeof(Where<Selector<Contact.bAccountID, Customer.customerClassID>, Equal<attentionRequiredCustomerClass>>))]
protected virtual void Contact_Attention_CacheAttached(PXCache cache)
{ }
...