26.03.2012, 08:56 | #1 |
Участник
|
В поле 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); } |
|