一个奇怪的问题

时间:2022-08-23 00:29:05

今天遇到一个奇怪的问题,在这里登记一下,备查。版本Dynamics AX2009 RU7

为了限定用户多次登录系统,在info类的startupPost方法里写了一段代码:

void restrictLoginTwice()
{
     //  To restrict user login form second login
    xSession session;
    SysClientSessions SysClientSessions;
    UserId currentUserId;
     int counter;

    ;

    currentUserId = curUserId();

     if(currentUserId!= " Admin ") //  Allow Admin User to login multiple time
    {
          while  select SysClientSessions
          where SysClientSessions.userId == currentUserId &&
         SysClientSessions.Status ==  1  //  1 : Login 0 : Logout
         {
             session =  new xSession(SysClientSessions.SessionId,  true);
              if (session && session.userId())
                counter++;

         }
     }

      if(counter>= 2)
     {            
            infolog.shutDown( true);
     }
}

在实际使用的过程中发现,这段代码对某些用户组可以限定只能登录一次,但某些用户组这段代码好像失效了,可以多次登录。

经过反复测试发现,如果用户组没有如下图所示的权限,运行这段代码查询表SysClientSessions的时候就会出现异常,直接跳过。

一个奇怪的问题

下面的四个窗体不需要赋权限,只需要选中每日这个节点给予权限。

如果没有给予权限,在查询SysClientSessions表的时候就会出现异常,并且不会给任何异常信息。

这个问题很容易重现,选一个用户组,没有管理->每日的权限,写一个job查询表SysClientSessions表,就会出现异常了。

所以要正确查询SysclientSessions,需要有这个权限。

至于为什么,不晓得。