На днях понадобилось мне сделать запрос для определения версий клиентов, с которых пользователи заходят в систему. Посмотрел я на таблицу
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);
}