Как изменить отображаемое имя для одного из полей PXSelector - PullRequest
0 голосов
/ 27 августа 2018

Мне нужно изменить отображаемое имя на «Основной поставщик» для поля BAccount.acctName, которое является последним полем для отображения в PXSelector, который я создал. Я попытался создать поле Extension, которое помогает, но этот параметр также переименовывает поле для другой страницы запроса, поэтому я не могу его использовать.

Вот мой код:

Селектор

[PXNonInstantiatedExtension]
public class SO_SOLine_ExistingColumn : 
PXCacheExtension<PX.Objects.SO.SOLine>
{
    #region InventoryID 
    [PXMergeAttributes(Method = 
    MergeMethod.Append)]

[PXSelector(typeof(Search2<InventoryItem.inventoryCD, 
            LeftJoin<BAccount, On<BAccount.bAccountID, 
                Equal<InventoryItem.preferredVendorID>>>,
        Where<InventoryItem.descr, IsNotNull>>),
        typeof(InventoryItem.inventoryID),
        typeof(InventoryItem.inventoryCD),
        typeof(InventoryItem.descr),
        typeof(InventoryItem.postClassID),
        typeof(InventoryItem.itemStatus),
        typeof(InventoryItem.itemType),
        typeof(InventoryItem.baseUnit),
        typeof(InventoryItem.salesUnit),
        typeof(InventoryItem.purchaseUnit),
        typeof(InventoryItem.basePrice),
        typeof(BAccount.acctName), ValidateValue = false) ]

        public int? InventoryID { get; set; }
        #endregion
}

Расширение поля

public class BAccountExt : PXCacheExtension<PX.Objects.CR.BAccount>
{

    #region UsrCustomField
    [PXDBString(250, IsUnicode = true, BqlField = 
    typeof(BAccountR.acctName))]
    [PXUIField(DisplayName = "Primary Vendor")]
    public virtual string AcctName { get; set; }
    public abstract class acctName : IBqlField
    {
    }
    #endregion

}

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Вы также можете попробовать, как показано ниже, но это ограничено конкретным графиком.

  public class CustomerMaint_Extension : PXGraphExtension<CustomerMaint>
  {
     public override void Initialize()
    {
      PXUIFieldAttribute.SetDisplayName<Customer.acctName>(Base.BAccount.Cache, "Primary Vendor");
    }
  }
0 голосов
/ 27 августа 2018

Как вы узнали, изменения в расширении кэша применяются ко всем экранам, использующим этот ЦАП. Существует еще один механизм расширения, применяемый для каждого графа, называемый CacheAttached, который применяется после расширения кэша.

Чтобы использовать его в первую очередь, вам необходимо определить график экрана, который вы хотите настроить, и поле ЦАП, которое вы хотите изменить. Для этого вы можете использовать функцию проверки элементов. В этом примере график для экрана Customer является «CustomerMaint», а поле DAC - «Customer.acctName»: enter image description here

Получив эту информацию, вы можете создать расширение для этого графика и расширить поле DAC внутри него. Расширения полей DAC, определенные на графике с использованием метода CacheAttached, будут применяться только к экранам, использующим этот график:

public class CustomerMaint_Extension : PXGraphExtension<CustomerMaint>
{
    [PXMergeAttributes(Method = MergeMethod.Merge)]
    [PXUIField(DisplayName = "Display Name For Customers Graph")]
    public virtual void Customer_AcctName_CacheAttached(PXCache sender) 
    {
    }
}

Соглашение о прототипе для расширений CacheAttached:

void DAC_DACField_CacheAttached(PXCache sender) { }

Вы меняете DAC и DACField на поле, на которое вы нацеливаетесь. Определение метода (тело) должно оставаться пустым. Атрибуты, украшающие метод CacheAttached, будут применяться к настраиваемому полю. С атрибутом PXMerge вы можете настроить способ применения расширения CacheAttached, он позволяет объединять новые атрибуты расширения поля с базовыми или полностью заменять базовые атрибуты.

Для получения более подробной информации смотрите этот пост в блоге:

http://asiablog.acumatica.com/2017/01/append-and-replace-of-dacs-attributes.html

...