Session – это дополнительные методы для класса Session
, написанные на X++ в Microsoft Dynamics AX 2009, Microsoft Dynamics AX 2012 и Axapta 4.0.
Пока проект Session
реализует два публичных метода isInRoleAdmin
и isInRoleAdmin_Slow
. Метод позволяет узнать, можно ли в текущей сессии выполнять действия, которые требуют права администратора:
- пользователь имеет права локального администратора
- и текущая сессия была "запущена как администратор" (runAsAdministrator)
Методы могут вернуть разные значения в зависимости от того, где они был вызваны – на сервере или на клиенте, и в зависимости от того, был ли сервер или клиент запущен с правами администратора.
Метод isInRoleAdmin
выполняет чтение значения из кэша. Если значение в кэше не найдено, то выполняет запрос к методу isInRoleAdmin_Slow
, чтобы получить реальное значение. Повторные вызовы этого метода возвратят значения очень быстро.
Метод isInRoleAdmin_Slow
выполняет запрос к системе и получает ответ может ли пользователь в текущей сессии выполнять действия, которые требуют прав администратора. Метод относительно медленный.
Рекомендуется использовать метод isInRoleAdmin
.
Класс рассчитывает и кэширует рассчитанное значение при первом вызове. В последующих вызовах метода isInRoleAdmin
результат берется из кэша classFactory.
Проект Session содержит класс SessionPerfTest
для тестирования производительности с кэшем и без кэша. Класс выполняет 10тыс вызовов метода isInRoleAdmin
и замеряет время выполнения при помощи таймера SysStopwatch.
В таблице ниже показано время выполнения этих тестов на моем ноутбуке – кэширование признака isInRoleAdmin
вполне имеет смысл.
Метод, 10тыс | Вызов .net | SysGlobalCache | SysGlobalObjectCache |
---|---|---|---|
ax4.Client | 00:00:01.4116551 | 00:00:00.2632769 | |
ax4.Server | 00:00:02.7959503 | 00:00:00.6125915 | |
ax2009.Client | 00:00:01.4683846 | 00:00:00.2289435 | |
ax2009.Server | 00:00:03.0601071 | 00:00:00.4563741 | |
ax2012.Client | 00:00:01.3251630 | 00:00:00.2256371 | 00:00:00.1816486 |
ax2012.Server(CIL) | 00:00:01.7684025 | 00:00:00.2959108 | 00:00:00.2155927 |
Буду признателен за ваши замечания, предложения и советы по проекту как в разделе Issues, так и в виде письма на адрес mazzy@mazzy.ru
Мазуркин Сергей (mazzy)