Вот этот метод вызвался в startupPost
X++:
boolean closeOpenSession_flx()
{
int counter = 0,num;
int curSessions,maxSessions;
int curSessionId = new xSession().sessionId();
container users;
userId userId;
Session sessionToTerm;
xSession session;
Container userCon,activeUserCon;
UserInfo userInfo;
;
counter = Info::licensedUsersTotal();
userCon = SysUserInfo::getFullLicense();
maxSessions = counter - conlen(userCon);
curSessions = Info::getAllOnlineUser();
userid = curuserid();
// Проверка лицензий для приоритетных пользователей
if (!confind(userCon,curuserid()) && curSessions >= maxSessions )
{
sessionToTerm = new Session(curSessionId);
sessionToTerm.terminate();
sessionToTerm = NULL;
box::stop(strfmt("%1! Программа не может быть запущена. Количество активных пользователей превышает количество лицензий. Попробуйте подключиться позже!",
xUserInfo::find().name), "Microsoft Dynamics AX Access Control");
appl.globalCache().set(classstr(Info),identifierstr(Autologoff), true);
infolog.shutDown(true);
return true;
}
// Проверка повторного входа того же пользователя
if (SysUserInfo::checkLicenseAccess(userid))
{
for(counter = 1; counter < maxSessions;counter++ )
{
session = new xSession(counter, true);
if(session && session.userId() && session.clientKind()!= ClientType::WorkerThread)
{
select firstOnly userInfo
where userInfo.id == session.userId();
if (userInfo && (userid == session.userId()))
{
num++;
}
}
}
}
if (num > 1)
{
box::stop(strfmt("%1! Программа не может быть запущена дважды!",
xUserInfo::find().name), "Microsoft Dynamics AX Access Control");
appl.globalCache().set(classstr(Info),identifierstr(Autologoff), true);
infolog.shutDown(true);
return true;
}
return false;
}
X++:
if (this.closeOpenSession_flx())
{
return;
}