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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.08.2019, 01:07   #1  
alicedr is offline
alicedr
Участник
 
175 / 43 (2) +++
Регистрация: 06.07.2012
Адрес: Канада
D365FO SysGlobalCache - expected type was int
Пытаюсь пронести значение переменных через event handler используя SysGlobalCache в D365FO v10 PU24.
Столкнулась с забавной ситуацией: могу добавить в кеш несколько переменных, но только одного типа. Тип определяется первой добавленоой переменной, например, если в начале сессии я добавила в кеш переменную целого типа, то другие переменные целого типа, включая перечисления, добавляются, а вот, например, при попытке добавить строковую переменную выпадает ошибка "The expected type was int, but the encountered type was str."
Если первой добавить строку, то переменную целого типа добавить уже нельзя.


X++:
class SysGlobalCache365
{        
    /// <summary>
    /// Runs the class with the specified arguments.
    /// </summary>
    /// <param name = "_args">The specified arguments.</param>
    public static void main(Args _args)
    {     
        SysGlobalCache sgc = classFactory.globalCache();

        sgc.set(curUserId(), "ValueInt", 10);
        sgc.set(curUserId(), "ValueInt2", 12);
        sgc.set(curUserId(), "ValueEnum", NoYes::Yes);
        sgc.set(curUserId(), "ValueStr","str"); //<--"The expected type was int, but the encountered type was str."

    }

}
Это новое ограничение или баг? Аналогичная логика работает на ура в 2012:

X++:
static void SysGlobalCache2012(Args _args)
{
    SysGlobalCache sgc = classFactory.globalCache();

        sgc.set(curUserId(), "ValueInt", 10);
        sgc.set(curUserId(), "ValueInt2", 12);
        sgc.set(curUserId(), "ValueEnum", NoYes::Yes);
        sgc.set(curUserId(), "ValueStr","str"); //<--"The expected type was int, but the encountered type was str." NO ERROR
}
Поправка: в 2012 ошибки нет, однако значение не сохраняется.

Последний раз редактировалось alicedr; 31.08.2019 в 01:26.
Старый 31.08.2019, 02:52   #2  
vmoskalenko is offline
vmoskalenko
Участник
Аватар для vmoskalenko
 
145 / 334 (12) ++++++
Регистрация: 25.01.2007
Адрес: Toronto
Мы сейчас как раз работаем на кешем для DIAL Интеграции, но пока такого не видели.
Кстати удивлись, что можно целый буфер в кеш сохранять
Старый 31.08.2019, 04:14   #3  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
700 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Может лучше Disposable context https://community.dynamics.com/365/f...hod-signatures ? Его хоть чистить ненадо и он более "типизированный"
За это сообщение автора поблагодарили: trud (2), alicedr (1).
Старый 01.09.2019, 20:57   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от skuull Посмотреть сообщение
Может лучше Disposable context
Это обёртка вокруг статических полей для передачи параметров. А случае кеширования она не нужна можно использовать статические поля напрямую. Только следует учесть что сами по себе статические поля в d365fo довольно медленная штука по сравнению с обращением к просто полями. Но быстрее чем лазить в базу
Старый 01.09.2019, 22:09   #5  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
700 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Ну да, автор вроде писал что он хочет переносить поля между евентхендлерами используя кеш. Обертка или просто статические поля, все лучше чем глобал кеш..
Старый 02.09.2019, 10:09   #6  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от alicedr Посмотреть сообщение
Столкнулась с забавной ситуацией: могу добавить в кеш несколько переменных, но только одного типа.
Поправка: в 2012 ошибки нет, однако значение не сохраняется.
А так во всех версиях было. Кэш это всего лишь map в mapе и тип значений общий для одного owner (первый параметр в методе Set). Первое добавление создает для конкретного owner свой Map, в котором значения имеют тип значения (третий параметр) добавляемого первым для owner.
Просто в DAX2012 есть проверка на тип последующих значений, а до DAX2012 было добавление без проверок - в результата что-то добавлялось, какие-то совсем разные типы выдавали ошибку, даже если что-то добавлялось, не факт, что это потом можно было нормально считать.

Последний раз редактировалось Raven Melancholic; 02.09.2019 в 10:12.
Старый 02.09.2019, 18:51   #7  
alicedr is offline
alicedr
Участник
 
175 / 43 (2) +++
Регистрация: 06.07.2012
Адрес: Канада
Да, абсолютно логичное поведение для map - теперь это очевидно, хотя изначально отсутствие ошибки в 2012 сбило с толку.
Спасибо Skuull за подсказку про disposable context!
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: Dynamics AX 2012 Reporting: Error “Client found response content type of ”, but expected ‘text/xml'” when running a report based on cubes Blog bot DAX Blogs 0 11.07.2018 02:46
Быстродействие метда TaxParameters::find Ace of Database DAX: Программирование 7 01.06.2017 11:46
emeadaxsupport: Cannot create Enterprise portal site with SharePoint 2010. Client found response content type of 'text/html; charset=utf-8', but expected 'text/xml' Blog bot DAX Blogs 0 15.08.2011 23:11
emeadaxsupport: Error when deploying AX Report to SQL Reporting Server - Client found response type of 'text/html;charset=utf8;' but expected 'text/html' Blog bot DAX Blogs 0 12.01.2010 04:44
daxsol: Axapta Kernel Functions Blog bot DAX Blogs 1 16.05.2009 19:22

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

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

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