|
20.02.2015, 14:39 | #1 |
Участник
|
buf2con() -> GlobalCache -> con2Buf()
AX 2012 R2
Обнаружил, что класс Common запакованный в контейнер при помощи метода buf2con() и помещенный внутрь GlobalCash не распаковыватся обратно в запись. Контейнер "порится" в GlobalCash. А у вас, код ниже, работает правильно? X++: #Define.Key('Key') Common record; container recordCon; ClassFactory.globalCache().set(curUserId(), #Key, buf2con(record)); recordCon= ClassFactory.globalCache().get(curUserId(), #Key, conNull()); record = con2Buf(recordCon); |
|
20.02.2015, 14:55 | #2 |
Участник
|
Код работает правильно, если перед помещением в кэш буфер типа Common инициализировать чем-нить осмысленным - иначе какой толк его кэшировать?
|
|
|
За это сообщение автора поблагодарили: Morpheus (3). |
20.02.2015, 16:07 | #3 |
Участник
|
Цитата:
Источник проблемы выявить и устранить не удалось. А класс SysGlobalobjectCache работает исправно. |
|
20.02.2015, 16:28 | #4 |
Участник
|
Таблица, чей буфер кэшируется, использует наследование? Как именно вообще проявляется то, что контейнер "портится"? Как он выглядит до помещения в кэш и после извлечения? Ситуация несколько странная, поскольку в SysGlobalCache используется обычный Map, где в данном случае контейнер хранится в качестве значения. Я вот с ходу не припомню случаев, чтобы Map как-либо портил положенный в него контейнер. Может, дело в распаковке?..
PS. В вашем примере используется classFactory, т.о. может использоваться два независимых SysGlobalCache'а в зависимости от того, где выполняется код. Может, дело в этом? Может, код кладет контейнер, скажем, в клиентский SysGlobalCache, а затем другой код пытается извлечь его из серверного SysGlobalCache и просто не находит там? Последний раз редактировалось gl00mie; 20.02.2015 в 16:32. |
|
20.02.2015, 17:31 | #5 |
Участник
|
Вы пробовали не помещая в кэш контейнер сразу после упаковки распаковать. Получается? Т.е. точно ли проблема в кэше?
|
|
23.02.2015, 11:16 | #6 |
Участник
|
Цитата:
Может инсталляция АХ повреждена? |
|
22.02.2015, 01:42 | #7 |
Участник
|
У меня тоже отрабатывает корректно. Во всяком случае после упаковки и распаковки InventTable (сконвертированной как у тебя в Common, запакованной, помещенной в глобал кэш, вытянутой из него, распакованной, присвоенной другой переменной Common), значение (fieldNum(InventTable, ItemId)) выводится правильно.
6.3 последняя версия |
|
23.02.2015, 18:27 | #8 |
Участник
|
SysGlobalCache - это Map со значениями в виде других Map'ов, которые привязаны к строке, идентифицирующей владельца (owner) и чей тип значений определяется первой вставкой. Может, вы используете идентификатор владельца кэша, для которого также используются значения отличных от контейнера типов либо ключи разных базовых типов (целочисленный, строковый, еще какой)? И Map'у, и SysGlobalCache - сто лет в обед, и все их проблемы и особенности давно известны - вряд ли в 2012-й что-то такое наворотили, что вдруг стали проявляться глюки, которых раньше не было и которые почему-то воспроизводятся не у всех.
|
|
Теги |
buf2con, con2buf |
|
|