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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.03.2012, 08:56   #1  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
В поле BuildNum таблицы SysUserLog (Журнал работы пользователей) пишется версия не клиента а сервера
На днях понадобилось мне сделать запрос для определения версий клиентов, с которых пользователи заходят в систему. Посмотрел я на таблицу SysUserLog в которой как раз ведётся протоколирование клиентских сессий, увидел там поле BuildNum, и было обрадовался - то что мне и было нужно. Но при более детальном рассмотрении оказалось, что это поле содержит не клиентский номер версии, а северный.
Для определения номера версии используется метод xInfo::buildNo(), но вызывается этот код из табличного метода SysUserLog.insert(), выполняющегося на сервере. Ляп?
Для определения номера именно клентской версии необходимо вызвать тот же xInfo::buildNo() но на клиентской стороне. Для этого необходимо использовать директиву client в описании метода. Я сделал так:
X++:
// KSM
client void initClientBuildNum()
{
    this.ClientBuildNum = xInfo::buildNo();
}
X++:
public void insert()
{
    xSession xSession = new xSession();
    this.Computername = xSession.clientComputerName();
    this.ClientType   = xSession.clientKind();
    this.SessionId    = xSession.sessionId();
    this.BuildNum     = xInfo::buildNo();

    this.initClientBuildNum(); // KSM

    new OverwriteSystemfieldsPermission().assert();
    this.overwriteSystemfields(true);
    this.(fieldnum(SysUserLog, CreatedDateTime)) = xSession.loginDateTime();
    super();
    CodeAccessPermission::revertAssert();
    this.overwriteSystemfields(false);
}
Старый 26.03.2012, 09:46   #2  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
У нас в Axapta 3 insert на SysUserLog тоже изменен:
X++:
public void insert()
{
    xSession xSession = new xSession();
    this.computername = xSession.clientComputerName();
    this.clientType   = xSession.clientKind();
    this.sessionId    = xSession.sessionId();
//Изменено-->
    if (xSession.clientKind() == ClientType::Client
     || xSession.clientKind() == ClientType::COMObject)
        this.BuildNum = SysUserLog::getClientBuildNo();
    else
        this.BuildNum = xInfo::buildNo();
//Изменено<--
//    this.buildNum     = xInfo::buildNo();

    this.overwriteSystemfields(true);
    this.(fieldNum(SysUserlog, createdDate)) = xSession.loginDate();
    this.(fieldNum(SysUserlog, createdTime)) = xSession.loginTime();
    super();
}
В SysUserLog:
X++:
public client static str getClientBuildNo()
{
    return xInfo::buildNo();
}
ИМХО, не исключено, что это ляп, перешедший в другие версии, но не факт.
__________________
С уважением, Александр.

Последний раз редактировалось samolalex; 26.03.2012 в 09:52.
За это сообщение автора поблагодарили: S.Kuskov (5).
Старый 28.03.2012, 13:27   #3  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 513 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
В 2009 пофиксили:

\Data Dictionary\Tables\SysUserLog\Methods\insert
X++:
    if(this.ClientType == ClientType::Client )
        this.BuildNum = SysUserLog::getClientBuildNo();
    else
        this.BuildNum = xInfo::buildNo();
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
За это сообщение автора поблагодарили: S.Kuskov (2).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Журнал работы пользователей (логи)? Anais DAX: Администрирование 7 26.08.2009 09:15
Использование COM коннекторов для получения данные из таблицы для стороннего клиента. IS DAX: Функционал 1 28.04.2004 13:10
Поле-ссылки на разные таблицы Хилари DAX: Программирование 2 19.04.2004 17:17
Объединить несколько полей таблицы в одном поле Grid-а на форме? storer DAX: Программирование 2 12.11.2003 14:08
Абстрактный классификатор (версия 1.0) Maxim Gorbunov DAX: База знаний и проекты 3 29.12.2001 06:15

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

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

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