方法一,直接修改Info类的StartupPost方法,因为我们修改比较复杂,以下我就直接引用junevoful的代码来做范例。
void startupPost()
{
int counter;
int num = 0;
int maxSessions = Info::licensedUsersTotal();
xSession session;
UserInfo userInfo;
UserId currentUserId;
;
currentUserId = curuserid();
for(counter = 1; counter < maxSessions;counter++ )
{
session = new xSession(counter, true);
if(session && session.userId())
{
select firstOnly userInfo
where userInfo.id == session.userId();
if (userInfo && (currentUserId == session.userId()))
{
num++ ;
}
}
}
if (num > 1)
{
box::info("此用户ID已经登陆,请退出。")
{
infolog.shutDown(true);
}
}
}
方法二,是方法一的进一步改进,也是我们在使用的。
不同的部门可能有不同的上班时间,这样在licence有限的情况下,可能较早上班的部门会登陆较多的人,而较晚上面的部门就无法登陆。为了避免这种不公平的现象发生,我们事先在SysUserInfo表新建一个部门的字段,然后在建立了一个表,来说明每一个部门可以同时登陆的人数。之后就用类似于方法一的代码来控制登陆的人数。