12.01.2012, 21:11 | #1 |
Участник
|
dax-lessons: SysGlobalObjectCache class in AX 2012 [x++]
Источник: http://dynamicsaxgyan.wordpress.com/...-in-ax-2012-x/
============== Friends, There is a new class SysGlobalObjectCache that has been introduced in AX 2012, which will help for Global object caching with the help of scope, Key and values. Three important parameters are: Scope: A string type that specifies the scope or the owner of the cached object. Key : A container type that specifies [...] Источник: http://dynamicsaxgyan.wordpress.com/...-in-ax-2012-x/
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору. |
|
22.03.2018, 14:02 | #2 |
Участник
|
Добрый день!
Ax 2012 R3, 6.3.3000.111 В CIL дёргаю X++: classFactory.globalObjectCache().insert(scope, [key], [value]); X++: classFactory.globalObjectCache().print(scope) Возвращаюсь на клиент делаю print с тем же scope, а там пустота. Обращаясь к MSDN: "Every record that is inserted into SysGlobalObjectCache is shared across multiple sessions that are in the same process. If an entry is inserted on the AOS, then all the sessions on the same AOS have access to the entry in the cache. However, any cache entries inserted on the AOS will not be automatically sent to the clients connected to that AOS. The entries will also not be sent to another AOS that is part of the deployment." Кроме как перезаходом возможно обновить в рамках текущего клиента? Последний раз редактировалось Товарищ ♂uatr; 22.03.2018 в 14:12. |
|
22.03.2018, 14:22 | #3 |
Участник
|
Вызвать серверный метод и результат ручками запихать в globalCache на клиенте? Интересно, конфликтов не будет?
|
|
22.03.2018, 15:12 | #4 |
Участник
|
Идея конечно интересная, но CIL это же другая сессия, да и как туда клиентский класс прокинуть, не говоря уже о том, что он не особо-то и дружит с такими объектами.
|
|
22.03.2018, 15:31 | #5 |
Участник
|
Объект надо протаскивать в серилизованном виде. CIL умеет возвращать контейнеры. Интересно, а что вы пытаетесь сделать?
|
|
22.03.2018, 19:03 | #6 |
Участник
|
Изначальная задача - повышение производительности формы хранящей временные данные, получающей их из ресурсоёмких операций.
Ключевые значения для которой мысль была брать из кэша, чтобы обойтись без изменений в словаре данных. Последний раз редактировалось Товарищ ♂uatr; 22.03.2018 в 19:06. |
|
28.02.2023, 08:44 | #7 |
Участник
|
Так какой тут ответ в итоге? Только щас пришлось ответственно столкнуться с проблемой. Что то положенное в SysGlobalObjectCache вне CIL - в CIL не доступно. Верно и обратное при выполнении в CIL кладу в объект SysGlobalObjectCache. При выходе из CIL - ничего нет.
Акс2012. В документации четких оговорок, что в цил действует свой личный объект SysGlobalObjectCache - не нашел. Только кусок в коде: X++: if (classfactory) { sgoc = classfactory.globalObjectCache(); } else { // Workaround for SysQueryRangeUtil usage under IL // the class factory is not initialized in the interpreter // when called from IL.This is OK as the global cache is a kernel // singleton sgoc = new SysGlobalObjectCache(); } |
|
03.03.2023, 21:50 | #8 |
Участник
|
А вы не путаете серверный и клиентский SysGlobalObjectCache? Есть два разных экземпляра ClassFactory - серверный и клиентский, соотв., есть (с точки зрения каждой конкретной сессии) два разных экземпляра SysGlobalObjectCache - серверный, который общий на все сессии AOS-а, и клиентский, который по сути - бестолкова заглушечка. Так вот, попробуйте в CIL класть что-то в SysGlobalObjectCache, а потом искать это в серверном X++ коде.
|
|
Теги |
cil, classfactory, sysglobalobjectcache |
|
|