AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.02.2015, 14:39   #1  
Morpheus is offline
Morpheus
Участник
Аватар для Morpheus
Соотечественники
 
602 / 167 (7) ++++++
Регистрация: 30.03.2005
Адрес: Київ-København-Düsseldorf
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  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Код работает правильно, если перед помещением в кэш буфер типа Common инициализировать чем-нить осмысленным - иначе какой толк его кэшировать?
За это сообщение автора поблагодарили: Morpheus (3).
Старый 20.02.2015, 16:07   #3  
Morpheus is offline
Morpheus
Участник
Аватар для Morpheus
Соотечественники
 
602 / 167 (7) ++++++
Регистрация: 30.03.2005
Адрес: Київ-København-Düsseldorf
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Код работает правильно, если перед помещением в кэш буфер типа Common инициализировать чем-нить осмысленным - иначе какой толк его кэшировать?
Да, я присваиваю переменной record экземпляр наследника Common.

Источник проблемы выявить и устранить не удалось.

А класс SysGlobalobjectCache работает исправно.
Старый 20.02.2015, 16:28   #4  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Таблица, чей буфер кэшируется, использует наследование? Как именно вообще проявляется то, что контейнер "портится"? Как он выглядит до помещения в кэш и после извлечения? Ситуация несколько странная, поскольку в SysGlobalCache используется обычный Map, где в данном случае контейнер хранится в качестве значения. Я вот с ходу не припомню случаев, чтобы Map как-либо портил положенный в него контейнер. Может, дело в распаковке?..

PS. В вашем примере используется classFactory, т.о. может использоваться два независимых SysGlobalCache'а в зависимости от того, где выполняется код. Может, дело в этом? Может, код кладет контейнер, скажем, в клиентский SysGlobalCache, а затем другой код пытается извлечь его из серверного SysGlobalCache и просто не находит там?

Последний раз редактировалось gl00mie; 20.02.2015 в 16:32.
Старый 20.02.2015, 17:31   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Вы пробовали не помещая в кэш контейнер сразу после упаковки распаковать. Получается? Т.е. точно ли проблема в кэше?
Старый 23.02.2015, 11:16   #6  
Morpheus is offline
Morpheus
Участник
Аватар для Morpheus
Соотечественники
 
602 / 167 (7) ++++++
Регистрация: 30.03.2005
Адрес: Київ-København-Düsseldorf
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Вы пробовали не помещая в кэш контейнер сразу после упаковки распаковать. Получается? Т.е. точно ли проблема в кэше?
Проблема точно в кэше. В ClassFactory.globalCache() вижу только значение первого элемент контейнера. Весь код выполняется на стороне сервера.

Может инсталляция АХ повреждена?
Старый 22.02.2015, 01:42   #7  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
У меня тоже отрабатывает корректно. Во всяком случае после упаковки и распаковки InventTable (сконвертированной как у тебя в Common, запакованной, помещенной в глобал кэш, вытянутой из него, распакованной, присвоенной другой переменной Common), значение (fieldNum(InventTable, ItemId)) выводится правильно.

6.3 последняя версия
Старый 23.02.2015, 18:27   #8  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
SysGlobalCache - это Map со значениями в виде других Map'ов, которые привязаны к строке, идентифицирующей владельца (owner) и чей тип значений определяется первой вставкой. Может, вы используете идентификатор владельца кэша, для которого также используются значения отличных от контейнера типов либо ключи разных базовых типов (целочисленный, строковый, еще какой)? И Map'у, и SysGlobalCache - сто лет в обед, и все их проблемы и особенности давно известны - вряд ли в 2012-й что-то такое наворотили, что вдруг стали проявляться глюки, которых раньше не было и которые почему-то воспроизводятся не у всех.
Теги
buf2con, con2buf

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axperf: Improvements on the global methods buf2con and con2buf in Microsoft Dynamics AX 2012 Blog bot DAX Blogs 4 16.02.2017 18:07
sashanazarov: con2buf crashing AOS Blog bot DAX Blogs 0 20.02.2014 17:11
AX2009 -> RU5 -> RU6 -> RU7 Pustik DAX: Прочие вопросы 8 21.05.2011 15:25
Dynamics AX Sustained Engineering: Sale Order Batch Invoicing reprints invoices from prior runs, when “Print” is set to ‘After’ on AR >> Periodic >> Sales Update >> Invoice form Blog bot DAX Blogs 0 24.03.2010 02:06
Заказов -> Строки заказов -> Запросы -> Пункт "Производство" Андре DAX: Программирование 1 20.09.2002 10:43

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:21.