Добавление INItemXRef в глобальный поиск с товаром - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь добавить альтернативный идентификатор INItemXRef в глобальный поиск профилей инвентарных наименований. Это соотношение 1: много, поскольку могут быть разные поставщики и единицы измерения с разными альтернативными идентификаторами.

Согласно Acumatica, я пытался заменить NoteID для инвентарного наименования на совпадение с соединением с кодом ниже:

[PXSearchable(SM.SearchCategory.IN, "{0}: {1}", new Type[] { 
  typeof(InventoryItem.itemType), typeof(InventoryItem.inventoryCD) },
  new Type[] { typeof(InventoryItem.descr) },
  NumberFields = new Type[] { typeof(InventoryItem.inventoryCD) },
  Line1Format = "{0}{1}{2}", Line1Fields = new Type[] { 
    typeof(INItemClass.itemClassCD), typeof(INItemClass.descr), 
    typeof(INItemXRef.alternateID) },
  Line2Format = "{0}", Line2Fields = new Type[] { 
    typeof(InventoryItem.descr)},
  MatchWithJoin = typeof(RightJoin<INItemXRef, On<INItemXRef.inventoryID, 
    Equal<InventoryItem.inventoryID>>>),
  WhereConstraint = typeof(Where<Current<InventoryItem.itemStatus>, 
  NotEqual<InventoryItemStatus.unknown>>)
)]
[PXNote(PopupTextEnabled = true)]

Я также последовал примеру из вопроса Как включить поле из связанной сущности в индекс полнотекстовой сущности?

Мой код для этого в расширении ЦАП инвентарного предмета:

public partial class INItemXRef: PX.Data.IBqlTable
{  
  //, IPaymentTypeDetailMaster, ILocation
    public abstract class inventoryID: IBqlField { }
    [PXDBInt()]
    [PXDBChildIdentity(typeof(INItemXRef.inventoryID))]
    [PXUIField(DisplayName = "Xref ID", Visibility = PXUIVisibility.Invisible)]
    [PXSelector(typeof(Search<INItemXRef.inventoryID>), DirtyRead = true)]
    public virtual int? InventoryID{ get; set; } 
    //public virtual void InventoryItem_InventoryID_CacheAttached(PXCache sender)
    //{
    //} 

    public abstract class alternateID: IBqlField { }
    [PXDBString()]
    [PXUIField(DisplayName = "Alternate ID")]
    public virtual int? AlternateID{ get; set; }              
}

Однако правильный способ сделать это - все еще и проблема. Было одно предложение использовать CacheAttached, но я также не смог сделать эту работу.

Действительно ли необходим Cache Attached или я что-то упустил из-за включения связанных сущностей?

Намерение состоит в том, чтобы найти конкретный инвентарный предмет и получить предметы и и альтернативные идентификаторы, которые у них есть, что означает, что предмет может появляться более одного раза в глобальном поиске. Я также удостоверился, что сбросил IIS и перестроил полнотекстовые индексы на случай, если это было проблемой.

...