Показать сообщение отдельно
Старый 30.11.2018, 12:26   #10  
rashuf is offline
rashuf
Участник
 
14 / 15 (1) ++
Регистрация: 25.09.2013
Вот этот метод вызвался в 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;
}

Последний раз редактировалось rashuf; 30.11.2018 в 12:28.