Это немного сложно, потому что возможность изменять список столбцов защищена. Мы можем изменить столбцы, создав собственный атрибут идентификатора местоположения, который наследует тот, который нам нужно изменить, и затем заменить селектор Dimension, который в то время может добавить столбцы для отображения. Нам также нужно присоединиться к таблице адресов, чтобы отобразить поля, которые вы хотите добавить, поскольку их нет в Location DA C.
. Вот рабочие примеры:
Новый атрибут который мы будем использовать для замены текущего атрибута в SOOrder CustomerLocaitonID
public class LocationIDExtensionAttribute : LocationIDAttribute
{
public LocationIDExtensionAttribute(params Type[] fieldList)
: this(typeof(Where<boolTrue, Equal<boolTrue>>), fieldList)
{
}
public LocationIDExtensionAttribute(Type WhereType, params Type[] fieldList)
: base(WhereType)
{
AddColumns(WhereType, fieldList);
}
public LocationIDExtensionAttribute(Type WhereType, Type JoinType, params Type[] fieldList)
: base(WhereType, JoinType)
{
AddColumns(WhereType, JoinType, fieldList);
}
protected void AddColumns(Type WhereType, params Type[] fieldList)
{
var dimensionSelector = _Attributes[_SelAttrIndex];
if (dimensionSelector == null)
{
return;
}
_Attributes[_SelAttrIndex] = (PXEventSubscriberAttribute)new PXDimensionSelectorAttribute("LOCATION", BqlCommand.Compose(typeof(Search<,>), typeof(Location.locationID), WhereType), typeof(Location.locationCD), fieldList);
}
protected void AddColumns(Type WhereType, Type JoinType, System.Type[] fieldList)
{
var dimensionSelector = _Attributes[_SelAttrIndex];
if (dimensionSelector == null)
{
return;
}
_Attributes[_SelAttrIndex] = (PXEventSubscriberAttribute)new PXDimensionSelectorAttribute("LOCATION", BqlCommand.Compose(typeof(Search2<,,>), typeof(Location.locationID), JoinType, WhereType), typeof(Location.locationCD), fieldList);
}
}
Затем мы будем использовать этот атрибут следующим образом:
[LocationIDExtension(typeof(Where<Location.bAccountID, Equal<Current<SOOrder.customerID>>,
And<Location.isActive, Equal<True>,
And<MatchWithBranch<Location.cBranchID>>>>),
typeof(LeftJoin<Address, On<Location.defAddressID, Equal<Address.addressID>>>),
typeof(Location.locationCD),
typeof(Location.descr),
typeof(Address.addressLine1),
typeof(Address.addressLine2),
typeof(Address.city),
typeof(Address.state),
typeof(Address.postalCode),
DescriptionField = typeof(Location.descr),
Visibility = PXUIVisibility.SelectorVisible)]
И мы получим следующее: