Показать сообщение отдельно
Старый 12.01.2009, 10:53   #1  
leva is offline
leva
Участник
 
52 / 36 (2) +++
Регистрация: 03.08.2005
Клиент-серверные заморочки JournalErrorTransList
Как известно системный журнал (журнал ошибок) складских (и не только) журналов хранится в таблице JournalError и взаимодействие с ним происходит через класс JournalErrorList и его наследников JournalErrorTransList и JournalErrorVoucherList.

В этих классах инициализация происходит в методе initDb, суть которой - заполнение кэша таблицы JournalError соответствующего журнала в виде RecordSortedList.

Вопрос собственно в реализации этого метода. Возьмём для примера JournalErrorTransList (в JournalErrorVoucherList тоже самое).

X++:
void initDb()
{
    if (xGlobal::clientKind() == ClientType::Client)
    {
        this.unPack(JournalErrorTransList::packInitDb(journalTableData.journalTable()));
        this.selectDbCalled(true);
    }
    else
        this.selectDb(journalTableData.journalTable(),false);

}
Для чего необходимо при вызове метода на клиентской стороне выполнять выборку из таблицы на серверной стороне и упаковывать её в контейнер (это делает статический метод packInitDb), а затем заполнять кэш уже из контейнера?

Выигрыш в скорости? Да неоткуда ему вроде взяться, наоборот лишние шаги.
Уменьшить объем данных, передаваемых между клиентом и сервером? Так всё равно контейнер передастся.
Необходимость создания какого-либо объекта только на серверной стороне? Нет - итоговый результат одинаков.


Аксапта 3 СП4. Что там в более новых версиях возможности посмотреть у меня нет.