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)