Я добавил Местоположение клиента в полнотекстовый индекс объекта, но не могу понять, как получить адресную строку 1 из местоположения, чтобы он стал частью полнотекстового индекса. и отображаться в результате.
Как включить поле из связанной сущности в полнотекстовый индекс сущности?
Ответы (1)
Чтобы включить поля связанных сущностей (те, которые находятся в взаимно однозначном отношении с сущностью верхнего уровня на экране ввода данных), необходимо указать, какое поле сущности верхнего уровня следует использовать. вместе с атрибутом PXSelectorAttribute для получения связанной сущности. Сразу после поля объекта верхнего уровня, действующего как мост между связанными объектами, вы должны указать поля вторичного объекта, которые должны быть включены в полнотекстовый индекс и / или отображаться в результате. Имейте в виду, что только поля сущностей верхнего уровня, украшенные атрибутами PXSelectorAttribute или PXDimensionSelectorAttribute, могут действовать как мост между связанными сущностями.
Например, чтобы включить поля из Address DAC в полнотекстовый индекс Местоположение клиента, вы должны добавить поле DefAddressID из < strong> Location DAC перед перечислением полей из Address DAC:
public partial class Location : PX.Data.IBqlTable, IPaymentTypeDetailMaster, ILocation
{
...
public abstract class defAddressID : IBqlField { }
[PXDBInt()]
[PXDBChildIdentity(typeof(Address.addressID))]
[PXUIField(DisplayName = "Default Address", Visibility = PXUIVisibility.Invisible)]
[PXSelector(typeof(Search<Address.addressID>), DirtyRead = true)]
public virtual int? DefAddressID { get; set; }
...
}
DAC CustomerLocation, представленный в следующем фрагменте кода, может служить прекрасным примером настраиваемого DAC, используемого для добавления Местоположение клиента в полнотекстовый индекс сущности:
[Serializable]
[PXCacheName("Customer Location")]
[PXBreakInheritance]
public partial class CustomerLocation : SelectedCustomerLocation
{
public new abstract class bAccountID : IBqlField { }
[Customer(typeof(Search<Customer.bAccountID,
Where<Customer.type, Equal<BAccountType.customerType>,
Or<Customer.type, Equal<BAccountType.prospectType>,
Or<Customer.type, Equal<BAccountType.combinedType>>>>>),
IsKey = true)]
public override int? BAccountID { get; set; }
public new abstract class locationCD : IBqlField { }
public new abstract class descr : IBqlField { }
public new abstract class defAddressID : IBqlField { }
public new abstract class locType : IBqlField { }
public new abstract class noteID : IBqlField { }
[PXNote()]
[PXSearchable(SM.SearchCategory.CR, "{1} {2}: {3}",
new Type[] {
typeof(CustomerLocation.bAccountID),
typeof(Customer.acctCD),
typeof(CustomerLocation.locationCD),
typeof(CustomerLocation.descr) },
new Type[] {
typeof(CustomerLocation.bAccountID),
typeof(Customer.acctCD),
typeof(CustomerLocation.locationCD),
typeof(CustomerLocation.descr),
typeof(CustomerLocation.defAddressID),
typeof(Address.addressLine1),
typeof(Address.addressLine2),
typeof(Address.city),
typeof(Address.countryID) },
Line1Format = "{0} {2}",
Line1Fields = new Type[] {
typeof(CustomerLocation.descr),
typeof(CustomerLocation.defAddressID),
typeof(Address.addressLine1) },
Line2Format = "{1}",
Line2Fields = new Type[] {
typeof(CustomerLocation.defAddressID),
typeof(Address.addressLine2) },
WhereConstraint =
typeof(Where<CustomerLocation.locType, Equal<LocTypeList.customerLoc>,
Or<CustomerLocation.locType, Equal<LocTypeList.combinedLoc>>>),
MatchWithJoin = typeof(InnerJoin<Customer,
On<Customer.bAccountID, Equal<CustomerLocation.bAccountID>>>),
SelectForFastIndexing = typeof(Select2<CustomerLocation,
InnerJoin<Customer,
On<CustomerLocation.bAccountID, Equal<Customer.bAccountID>>>>)
)]
public override Guid? NoteID { get; set; }
}
Помимо поля DefAddressID, которое используется для включения полей из Address DAC в полнотекстовый индекс объекта, CustomerLocation также использует Атрибут CustomerAttribute, прикрепленный к полю BAccountID, для включения естественных прикладных ключей клиента AcctCD вместо суррогатных ключей BAccountID уровня БД. И последнее, о чем следует упомянуть, - это PXBreakInheritanceAttribute, необходимый для предотвращения инициализации объектов PXCache, соответствующих базовым DAC, когда на экране Перестроить полнотекстовый индекс сущностей система генерирует список используемых сущностей. по полнотекстовому индексу сущностей.