При использовании атрибута [VendorActive] в ExpenseClaim отображается только сотрудник - PullRequest
0 голосов
/ 10 апреля 2019

Использование атрибута [VendorActive] в ExpenseClaim отображает только сотрудника, я прочитал статью о наследовании ЦАП, мне нужно использовать BAccount2, я попробовал эту опцию, но, кажется, мое поле не читает мой селектор, мой вопрос, как я будуиспользовать VendorActive, как если бы он был в модуле AP?

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Это происходит из-за наследования кэша.Сотрудник унаследован от Продавца.Если первый инициализированный кэш - это Employee, запись Vendor не будет инициализировать свой собственный кэш.Вместо этого он использует Employee, что приводит к описанному поведению.Попробуйте добавить следующий код в метод Extension Initialize графа:

    public override void Initialize()
    {
        var cache = Base.Caches[typeof(Vendor)];
        PXTrace.WriteWarning(cache.GetType().ToString());
    }

Это позволит вам наблюдать тип кэша в окне Trace, а также инициализировать кэш Vendor перед кэшем Employee.

0 голосов
/ 10 апреля 2019

Я тоже столкнулся с этим, но не смог найти правильного решения, потому что не смог воспроизвести проблему постоянно.Это либо ошибка в атрибуте vendor, либо ORM.

Я думаю, что ошибка возникает в сочетании с другой операцией, которая изменяет кэш BAccount.Когда я сделал IISReset / Restart Application, чтобы очистить все кэши, поведение селектора изменилось.Поведение также было затронуто, когда я открывал селектор сотрудников перед селектором поставщиков.

Поскольку я не могу легко воспроизвести проблему, я не могу предоставить надежное решение, но вы можете попробовать установить CacheGlobal = false и DirtyRead = false.Если ошибка связана с кэшем ORM, это поможет, если данные будут взяты непосредственно из базы данных:

public abstract class vendorID : IBqlField { }

[PXUIField(DisplayName = "Vendor", Enabled = true)]
[VendorActive(Visibility = PXUIVisibility.SelectorVisible,
                DescriptionField = typeof(Vendor.acctName),
                Filterable = true, 
                CacheGlobal = false,
                DirtyRead = false)]
public virtual int? VendorID { get; set; }
...