Acumatica: разница между новым PXSelectJoin - PullRequest
0 голосов
/ 02 апреля 2020

Вопрос носит теоретический характер, и я хочу понять общие различия и особенности производительности, в частности, между двумя различными определениями, которые дают одинаковый результат. У меня есть класс GLProcessingModel, который имеет ссылку на график (поэтому он не имеет прямых ссылок на пользовательский интерфейс). В классе есть метод, который определяет, что элемент имеет какое-то значение (в настоящее время мой код выглядит так):

 private bool IsEmployerSuperWorkCover(MPCurrentPayPayItem payItem)
    {

        return PXSelectJoin<MPPayItem,
               InnerJoin<MPPayItemType, On<MPPayItemType.payItemTypeID, Equal<MPPayItem.payItemTypeID>>,

                   InnerJoin<MPRollupItem, On<MPRollupItem.payItemID, Equal<MPPayItem.payItemID>>,
                       InnerJoin<MPRollup, On<MPRollup.rollupID, Equal<MPRollupItem.rollupID>>>>>,

                              Where<MPRollup.name, Equal<Required<MPRollup.name>>,
                                   And<MPRollupItem.payItemID, Equal<Required<MPRollupItem.payItemID>>,
                                     And<MPPayItemType.payItemTypeCD, Equal<Required<MPPayItemType.payItemTypeCD>>>>>>
                                         .Select(Graph, MPPayItem.WORCOVER_AU, payItem.PayItemID, MPPayItemType.EMPLOYER_SUPER)
                                             .AsEnumerable()
                                                 .Any();
    }

Какая разница, если я определяю одно и то же выражение по-другому (или что-то в этом роде) ):

 PXSelectJoin<MPPayItem, InnerJoin<MPPayItemType, On<MPPayItemType.payItemTypeID, Equal<MPPayItem.payItemTypeID>>,

                                 InnerJoin<MPRollupItem, On<MPRollupItem.payItemID, Equal<MPPayItem.payItemID>>,
                                     InnerJoin<MPRollup, On<MPRollup.rollupID, Equal<MPRollupItem.rollupID>>>>>,

                                            Where<MPRollup.name, Equal<Required<MPRollup.name>>,
                                                 And<MPRollupItem.payItemID, Equal<Required<MPRollupItem.payItemID>>,
                                                   And<MPPayItemType.payItemTypeCD, Equal<Required<MPPayItemType.payItemTypeCD>>>>>> EmployerSuperWorkCoverQuery;

    private bool IsEmployerSuperWorkCover(MPCurrentPayPayItem payItem)
    {
        if (EmployerSuperWorkCoverQuery == null)
        {
            EmployerSuperWorkCoverQuery = new PXSelectJoin<MPPayItem, InnerJoin<MPPayItemType, On<MPPayItemType.payItemTypeID, Equal<MPPayItem.payItemTypeID>>,

                                 InnerJoin<MPRollupItem, On<MPRollupItem.payItemID, Equal<MPPayItem.payItemID>>,
                                     InnerJoin<MPRollup, On<MPRollup.rollupID, Equal<MPRollupItem.rollupID>>>>>,

                                            Where<MPRollup.name, Equal<Required<MPRollup.name>>,
                                                 And<MPRollupItem.payItemID, Equal<Required<MPRollupItem.payItemID>>,
                                                   And<MPPayItemType.payItemTypeCD, Equal<Required<MPPayItemType.payItemTypeCD>>>>>>(Graph);
        }

        return EmployerSuperWorkCoverQuery.Select(MPPayItem.WORCOVER_AU, payItem.PayItemID, MPPayItemType.EMPLOYER_SUPER)
                                             .AsEnumerable()
                                                 .Any();

    }

Я считаю, что каждый раз, когда graph вызывает метод в классе GLProcessingModel, EmployerSuperWorkCoverQuery будет иметь значение null и должен его инициализировать.

Я считаю, что есть лучший вариант для определения того же поведения. return PXSelectJoin<MPPayItem, ... выглядит как соединение с БД, sql генерация и т.д. c и не лучший вариант.

Как это меняет механизм кэширования? Каков оптимальный способ реализовать такое поведение с наилучшей производительностью?

1 Ответ

0 голосов
/ 03 апреля 2020

Создание объекта C# (представление данных) не окажет существенного влияния на производительность.

Существует только два подхода, которые приведут к ощутимым различиям:

...