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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.12.2017, 11:03   #1  
neprikon is offline
neprikon
Участник
 
3 / 10 (1) +
Регистрация: 30.03.2011
:( Получить данные о бездействие пользователей по sessionId
Есть проблема нужно получить данные о бездействие всех пользователей. Хотим знать сколько клиентов бездействуют и сколько это продолжается по времени.
По логике должно было работать вот так:
X++:
#TimeConstants
    sysClientSessions   sysClientSessions;
    AOSSessionInfo      aOSSessionInfo;
    int                 seconds;
    ;

    while select sysClientSessions
        where sysClientSessions.Status == 1
    {
        aOSSessionInfo = new AOSSessionInfo(sysClientSessions.SessionId);

        seconds = aOSSessionInfo.idleTicks()/#millisecondsPerSecond;

        info(strFmt("%1, %2", sysClientSessions.userId, seconds));

    }
Но эта функция aOSSessionInfo.idleTicks() всегда возвращает ноль.
Помогите люди добрые, может есть идеи как решить по-другому эту задачу без нагрузки на систему.
Старый 11.12.2017, 12:54   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
IdleTicks не работает, кажется, с версии 4.0, когда обмен между клиентом и сервером перешел с протокола AOCP на стандартный RPC. Раньше на каждое клиентское подключение была выделенная сессия на AOS, и в рамках этой сессии можно было считать интервалы отсутствия трафика (что воспринималось как бездействие). Теперь со стороны AOS такого уже нет, отслеживать простои можно, наверно, со стороны клиента. См. штатный \Classes\Info\watchDog, который срабатывает при простое 15 минут и более (#watchdogInterval).
За это сообщение автора поблагодарили: demianimp (1), skuull (2).
Старый 12.12.2017, 05:04   #3  
neprikon is offline
neprikon
Участник
 
3 / 10 (1) +
Регистрация: 30.03.2011
Об этом функционале я в курсе!
Только watchDog отрабатывает каждые 15, если последний параметр idle заменить на true то каждые 15 минут простоя.
X++:
this.setTimeOut(identifierstr(watchDog), #watchdogInterval, false);
Даже если использовать этот костылек, как мне собирать данные в периодической операции допустим каждые 5 минут и собирать статистику по пользователям.
Может еще кто идейку подкинет?
Старый 12.12.2017, 09:56   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,867 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Может вот эта форма (tutorial_Timer) наведет вас на какие нить мысли.
Старый 12.12.2017, 17:31   #5  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Решение во многом может зависеть от того, насколько актуальные данные по бездействию пользователей вам нужны и почему. Если вы хотите вот прям в онлайне видеть, что такие-то сессии бездействуют 4.5 минуты - будет одно решение, если нужно просто собирать статистику и постфактум ее анализировать, скажем, для оптимизации инфраструктуры - будет другое решение. Тут еще важно соблюсти баланс между точностью/актуальностью данных и дополнительной нагрузкой на систему для сбора этих данных. Также я бы сразу закладывал в решение возможность отслеживать бездействие не всех подряд пользователей, а выборочно в зависимости от настроек.
Посмотрите на то, что делает метод watchDog(): он ведь, кроме обновления завершения сессии еще сбрасывает статистику использования объектов приложения. Ваше отслеживание бездействия пользователей можно реализовать аналогично сбору этой статистики:
  • создать таблицу, куда писать данные в разрезе сессий и интервалов бездействия
  • реализовать логику, которая на клиенте будет отслеживать бездействие и периодически писать о нем в созданную таблицу
  • реализовать логику, которая, скажем, на той же форме активных пользователей будет дополнительно тянуть данные о бездействии из созданной таблицы обязательно с привязкой к дате-времени входа (чтобы не цеплять исторические данные к новым сессиям с таким же номером сессии, что и в истории)
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
черновики (заказы) - могут удаляться. Поэтому данные в заказах хранить нельзя. Фактические данные нужно протаскивать в документы. mazzy DAX: Функционал 58 23.04.2014 09:35
Что за компании в демоданных AX2012 R2? Почему такие данные? mazzy DAX: Функционал 2 21.05.2013 01:18
Как получить данные Configuration Utility? 111andrei DAX: Программирование 2 07.02.2007 10:55
Как в Axapte получить данные о windows Кандидат DAX: Программирование 7 23.11.2005 18:30
Настройка форм для групп пользователей Роман Кошелев DAX: Функционал 14 05.08.2002 16:32
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:17.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.